php - 以指定用户身份从 php 运行 shell 脚本

标签 php linux shell xampp daemon

我正在尝试从 PHP 脚本运行 shell 脚本。

PHP 代码:

<? php
     $sss = escapeshellarg('virtualbox');
     $result = shell_exec("/home/hani/Desktop/launchscript.sh '$sss' 2>&1 ");
     echo "<pre>$result</pre>";
     echo "<br />";
     echo (shell_exec('whoami'));
?>

我的 shell 脚本:

#!/bin/bash


sss=$1
echo 'the sudo password' |sudo -S service $1 restart

在 Web 服务器 (Xampp) 中运行 PHP 代码后,我得到了以下输出:

[sudo] password for daemon: Sorry, try again.
[sudo] password for daemon: 
sudo: 1 incorrect password attempt

daemon

尽管如此,我还没有为daemon 用户设置任何密码。 在检查当前运行 PHP 代码的用户后,我发现它是 daemon
经过这里和网上的大量研究,我发现 daemon 不能运行 sudo 命令。
我还发现我可以通过编辑 sudoers 文件并授予守护进程用户运行 sudo 命令的权限来解决这个问题。然而,这不是一个安全的解决方案。
所以我的问题是:如何通过 PHP 代码而不是作为守护进程运行该脚本?
PS:我尝试这样做是为了更改运行 PHP 文件的当前用户:

$result = shell_exec(" sudo -u hani /home/hani/Desktop/launchscript.sh '$sss' 2>&1 ");  

但是我在浏览器中得到了这个输出:

sudo: no tty present and no askpass program specified

并且用户仍然是守护进程。

我在 Ubuntu 16.04 中使用 Xampp
另一个信息,我在终端中运行此命令以了解“httpd”服务的所有者:

ps -ef | egrep '(httpd)' | grep -v `whoami` | grep -v root | head -n1 | awk '{print $1}'

输出是:守护进程

最佳答案

我想我找到了解决方案(但仍然不确定安全问题)。
它只需要更改httpd 服务的默认用户(所有者)和。这可以通过编辑位于 /opt/lampp/etc 中的 httpd.conf 来完成(如果您使用的是 Xampp)。正如我在问题中提到的,默认用户是守护进程。但是它没有运行 sudo 命令的权限,所以它只需要将那个用户更改为另一个有权运行 sudo 命令的用户(显然是 root 用户或 < strong>您在 Ubuntu 中的默认用户)。

关于php - 以指定用户身份从 php 运行 shell 脚本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45650439/

相关文章:

php - 如何在 PHP 中查找 "related items"

javascript - PHP & Ajax , Javascript - 如何在将数据而不是文本提取到数据库中时显示模态

linux - shell脚本中文件的旋转

git - 如何在不使用 Git 的情况下将 GitHub 存储库下载为 Zip

php - 在 Wordpress 中按日期分组帖子

PHP/MySQL PDO/更新行

java - 使用 JNI 问题构建 .so 文件

ruby - 获取登录用户列表

linux - 如何检查字符串是否以特定字符串开头>

android - 如何从 adb shell 命令启动 AFW 徽章应用程序?