1

我正在使用 php-fpm 运行 lighttpd。我已将 http 用户作为 nopasswd sudoer 添加到我的 sudoers 中。我有以下脚本:

<?php
    echo shell_exec("sudo sh -c 'echo \"wtf3\" > /etc/openvpn/auth.txt'");
?>

当我这样做时它运行良好:

sudo -u http php testsudo.php

但通过浏览器运行时失败。

shell_exec("whoami");

在浏览器中确认我是用户 http。

是什么赋予了?

4

1 回答 1

0

制作一个可以运行您的命令的shell脚本是不可能的吗?

#!/bin/sh
sudo whoami

在php中:

$retVal = `/path/to/custom/script/myscript.sh &2>1`;
if ($retVal) echo 'SWEET';
else echo 'POOP: ' . $retVal;

{command}inside `` 的含义与shell_exec('{command}')在 linux 服务器上相同。如果我在这里没有偏离基础,您的目标是将用户添加到您的 VPN(可能还有其他事情),在这种情况下,您可以将用户名/密码/等的命令行参数传递给您的自定义 shell 脚本。

这不是shell_exec()您问题的纯粹答案,但也许您可以在myscript.sh不执行 sudo 的情况下运行。只是基于你说你尝试的所有东西都在 shell 中工作的事实,并且路径设置在 中echo $PATH,但不是sudo echo $PATH在你的 PHP 脚本中。似乎出于某种原因,sudo 是 php 中的一个问题,但不是 shell 中的问题,所以......让我们将 sudo 移回 shell 并尝试这种方式。

于 2013-07-06T04:13:37.523 回答