【发布时间】:2018-01-20 20:54:07
【问题描述】:
我正在尝试从 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}'
输出是:守护进程
【问题讨论】:
-
对不起,我忘了说我已经运行了:sudo chmod +x myshellscript。
标签: php linux shell xampp daemon