如何利用 suexec 允许 php 脚本运行 linux 命令?

如何利用 suexec 允许 php 脚本运行 linux 命令?

我想在浏览器中执行一个 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,我相信您会:

  1. 如果您正在运行 FastCGI,您将定义 suexec 的路径(我不相信 suexec 适用于 mod_php)(在 httpd.conf 中):

    例如FastCgiSuexec /usr/sbin/suexec(可能需要更改 suexec 的权限)。有一个简短但有些过时的概述这里

  2. 向您的 VirtualHost 添加一行以指定您想要以以下身份运行的用户:

    SuexecUserGroup "#UID" "#GID"(用实际数字替换 - 保留数字符号)

其他变体允许您使用 suPHP 或 suexec,将它们设置为所有脚本的处理程序。您需要编译组件,并且需要为您的 PHP 脚本使用 CGI/FastCGI。

由于您目前需要 root 权限才能运行该脚本,因此您不能仅使用 suexec。您的一些选项包括:

  1. 更改脚本的权限 - 根据其功能可能会很困难/不安全(例如,如果脚本执行的任务需要某些权限,则简单的 chmod 是不够的)
  2. 使用sudophp 脚本中的命令(将用户添加到 sudoers 等)
  3. 使用外部脚本setuid

以上所有措施的安全性都是值得怀疑的。

相关内容