我用php-fpm运行lighttpd。我已经将http用户添加到我的sudoers,作为一个nopasswd sudoer。我有以下脚本:
<?php
echo shell_exec("sudo sh -c 'echo \"wtf3\" > /etc/openvpn/auth.txt'");
?>
我这样做很好:
sudo -u http php testsudo.php
但在浏览器中运行时失败。
shell_exec("whoami");
在浏览器中确认我是用户http。
是什么给出了?
答案 0 :(得分:0)
制作一个可以运行命令的shell脚本是不可能的?
#!/bin/sh
sudo whoami
在php中:
$retVal = `/path/to/custom/script/myscript.sh &2>1`;
if ($retVal) echo 'SWEET';
else echo 'POOP: ' . $retVal;
``里面的{p> {command}
表示与linux服务器上的shell_exec('{command}')
相同。
如果我不偏离此处,那么您的目标是将用户添加到VPN(可能还有其他内容),在这种情况下,您可以将用户名/密码/等命令行参数传递给自定义shell脚本。
这不是你问题的纯shell_exec()
答案,但也许你可以在不做sudo的情况下运行myscript.sh
。基于这个事实,你说你尝试在shell和路径中工作的所有内容都在echo $PATH
中设置,但在PHP脚本中没有sudo echo $PATH
。似乎某些原因,sudo是php中的一个问题,但不是shell中的问题所以......让我们将sudo移回shell并尝试这种方式。