我想创建一个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()
还是别的什么?
答案 0 :(得分:4)
使用哪个php函数来启动脚本无关紧要 - 缺少的是您的用户帐户的授权。
使用sudo(预先配置Web服务器用户以通过visudo
运行不带密码的确切命令,并在命令前添加sudo
)或设置自己执行命令的setuid脚本。
答案 1 :(得分:3)
您真正需要做的是将您的网络服务器设置为以特定用户身份运行(例如,除了'nobody'),或者授予该用户对您要执行的内容的权限。