8

我想创建一个 php 脚本来执行 shell 命令并返回其输出。服务器需要私钥。当我第一次决定测试它时,我创建了这个:

<?php
$command = "ls";
$output = shell_exec($command);
echo "<pre>$output</pre>";
?>

那工作得很好。但是当我更改$command为我真的想运行的命令时:

$command = "/etc/init.d/mycontrollerd status /etc/mycontrollerconfig";

它给了我这个输出:

You need root privileges to run this script

我的猜测是我需要使用sudo. 当然,这需要将 pem 文件放在服务器上的某个位置。假设我这样做,究竟应该$command是什么?我应该使用shell_exec(),exec()还是system()其他什么?

4

2 回答 2

4

您使用哪个 php 函数来启动脚本并不重要 - 缺少的是您的用户帐户的授权。

要么使用 sudo(预先配置 Web 服务器用户以通过 运行不带密码的确切命令visudo,并在命令前加上sudo),要么设置一个 setuid 脚本来自行执行命令。

于 2011-07-13T21:42:23.910 回答
3

您真正需要做的是将您的 Web 服务器设置为以特定用户身份运行(例如,“nobody”除外),或者授予该用户您想要执行的权限。

另请参阅: PHP shell_exec() 和 sudo:必须是 setuid root

于 2011-07-13T21:27:56.033 回答