php-sudoshell_exec命令从命令行运行,但不能从浏览器运行


php sudo shell_exec command runs from command line, but not from browser

我正在用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,并以这种方式进行尝试。

相关文章: