我想在浏览器中执行一个php脚本,然后执行一个单一的linux命令并返回它的输出。 当我第一次决定testing这个时,我创build了这个:
<?php $command = "ls"; exec($command, $output); print_r($output); ?>
这工作得很好。 但是当我改变命令我真的想运行的命令:
$command = "/etc/init.d/mycontrollerd status /etc/mycontrollerconfig";
它给了我这个输出:
Array ( [0] => You need root privileges to run this script )
我被build议使用suexec。 然而,在检查手册页后,我甚至无法确定从哪里开始。 当然,我不想造成安全风险。 那么有人可以给我配方让我的命令运行并返回它的输出?
顺便说一句,这是一个运行Ubuntu的基本LAMP框。
编辑:@womlbe下面build议sudo suexec。 安全仍然是至高无上的,我怎么能这样做呢?
据我所知,suexec不会授予root权限(或apache用户的权限)。
要以最简单的forms使用suexec,我相信你会:
如果你正在运行FastCGI,你将定义suexec的path(我不相信suexec适用于mod_php)(在httpd.conf中):
例如FastCgiSuexec /usr/sbin/suexec (可能需要更改suexec上的权限)。 这里有一个简短但有些过时的概述。
添加一行到你的VirtualHost来指定你想运行的用户:
SuexecUserGroup "#UID" "#GID" (用实际的号码replace – 保留号码)
其他变体将允许您使用suPHP或suexec,将它们设置为所有脚本的处理程序。 您需要将组件编译进来,并且需要为您的PHP脚本使用CGI / FastCGI。
由于您当前需要root权限才能运行该脚本,因此不能只使用suexec。 你的一些select是:
sudo命令,从你的php脚本(把用户添加到sudoers等) setuid的外部脚本 以上所有的安全性充其量都是值得怀疑的。