我想在浏览器中执行一个 php 脚本,该脚本将依次执行单个 linux 命令并返回其输出。当我第一次决定测试它时,我创建了这个:
<?php
$command = "ls";
exec($command, $output);
print_r($output);
?>
效果很好。但是当我将 $command 更改为我真正想要运行的命令时:
$command = "/etc/init.d/mycontrollerd status /etc/mycontrollerconfig";
它给了我这个输出:
Array ( [0] => You need root privileges to run this script )
有人建议我使用 suexec。然而,在查看手册页后,我甚至不知道从哪里开始。当然,我不想造成安全风险。那么有人能告诉我如何让我的命令运行并返回其输出吗?
顺便说一句,这是在运行 Ubuntu 的基本 LAMP 盒上。
编辑:下面的@womlbe 建议使用 sudo 而不是 suexec。由于安全仍然是最重要的,我该怎么做呢?
答案1
据我所知,suexec 不会授予 root 权限(或 apache 用户的权限)。
要以最简单的形式使用 suexec,我相信您会:
如果您正在运行 FastCGI,您将定义 suexec 的路径(我不相信 suexec 适用于 mod_php)(在 httpd.conf 中):
例如
FastCgiSuexec /usr/sbin/suexec
(可能需要更改 suexec 的权限)。有一个简短但有些过时的概述这里。向您的 VirtualHost 添加一行以指定您想要以以下身份运行的用户:
SuexecUserGroup "#UID" "#GID"
(用实际数字替换 - 保留数字符号)
其他变体允许您使用 suPHP 或 suexec,将它们设置为所有脚本的处理程序。您需要编译组件,并且需要为您的 PHP 脚本使用 CGI/FastCGI。
由于您目前需要 root 权限才能运行该脚本,因此您不能仅使用 suexec。您的一些选项包括:
- 更改脚本的权限 - 根据其功能可能会很困难/不安全(例如,如果脚本执行的任务需要某些权限,则简单的 chmod 是不够的)
- 使用
sudo
php 脚本中的命令(将用户添加到 sudoers 等) - 使用外部脚本
setuid
以上所有措施的安全性都是值得怀疑的。