我有一个bash脚本,它通过shell_exec(script.sh参数)在PHP中调用参数。基本上,我的目标是调用另一个不是apache的用户所拥有的脚本。
script.sh脚本是一个包含以下内容的文件(现在有一些错误处理命令):
#/bin/bash
whoami>>whoami
echo $1 >> parameter
while read f; do
env>>envoutput
sudo -i -u archivescriptowner /path/to/archivescript.sh -command archive >> output
done < $1
在我的/ etc / sudoers文件中,我有以下内容:
apache ALL=(archivescriptowner) NOPASSWD: /bin/bash -c /path/to/archivescript.sh *
当我通过运行su -s /bin/bash
apache运行此脚本并传递参数时,它可以正常工作。
当我通过php中的按钮运行它时,archivescript.sh不会执行
whoami文件写有apache
参数文件写入了正确的文件
env显示以下内容
Term=xterm
LD_LIBRARY_PATH=/path/to/library
PATH=/sbin/:usr/sbin:/bin:/usr/bin
PWD=/var/www/html
LANG=C
SHLVL=4
=/bin/env
PWD输出正确,这是我的脚本现在的位置,它将来会被移动。
按钮单击运行时的输出文件为空白。
我不知道为什么这不起作用。任何见解都会有所帮助。如果我需要提供任何其他信息,请告诉我。
答案 0 :(得分:1)
我最近发布了一个项目,允许PHP获取真正的Bash shell并与之交互。在此处获取:https://github.com/merlinthemagic/MTS
下载后,您只需使用以下代码:
$shell = \MTS\Factories::getDevices()->getLocalHost()->getShell('bash', true);
$return1 = $shell->exeCmd('/path/to/archivescript.sh');
echo $return1; //return from your script