我正在用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用户。
什么东西?
制作一个运行命令的shell脚本是不可能的吗?
#!/bin/sh
sudo whoami
在php:中
$retVal = `/path/to/custom/script/myscript.sh &2>1`;
if ($retVal) echo 'SWEET';
else echo 'POOP: ' . $retVal;
"中的{command}
与linux服务器上的shell_exec('{command}')
含义相同。如果我在这里没有偏离基础,你的目标是将用户添加到你的VPN中(也许还有其他事情),在这种情况下,你可以将用户名/密码等的命令行参数传递到你的自定义shell脚本中。
对于您的问题,这并不是一个纯粹的shell_exec()
答案,但也许您可以在不执行sudo的情况下运行myscript.sh
。只是基于这样一个事实,您说您尝试的一切都在shell中工作,并且在echo $PATH
中设置了路径,但在PHP脚本中没有设置sudo echo $PATH
。由于某种原因,sudo在php中似乎是一个问题,但在shell中不是,所以……让我们将sudo移回shell,并以这种方式进行尝试。