php sudo shell_exec命令从命令行运行,但不是从浏览器运行

时间:2013-07-06 02:30:03

标签: php bash lighttpd sudo shell-exec

我用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。

是什么给出了?

1 个答案:

答案 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并尝试这种方式。