PHP - 以root身份运行系统命令。 - 安全

时间:2015-02-15 16:01:39

标签: php security root

我正在寻找一些建议..

我设法得到一个php脚本来调用另一个页面,然后以root身份运行系统命令。

这就是我所做的,我想知道我是否能够保护它。

etc/sudoers.d我添加了一个包含文件列表的文件,wwwrun用户可以以root身份运行而无需密码。它包含类似于:

的条目
wwwrun ALL=(ALL) NOPASSWD: /Web/scripts/helper/filea
wwwrun ALL=(ALL) NOPASSWD: /Web/scripts/helper/fileb
wwwrun ALL=(ALL) NOPASSWD: /Web/scripts/helper/filec

我的主网站上有一个test.php页面,对此的权限为777& wwwrun:root

在test.php中我有一些jquery,它使用ajax来调用action.php&action=aaa

在action.php中我有:

if ($_REQUEST['action']) == 'aaa') {
  exec('/Web/scripts/helper/filea', $res);
}

if ($_REQUEST['action']) == 'bbb') {
  exec('/Web/scripts/helper/fileb', $res);
}

if ($_REQUEST['action']) == 'bbb') {
  exec('/Web/scripts/helper/filec', $res);
}

filea包含几个bash命令。此文件包含655& root:root权限。

filea,fileb和filec中的命令是固定的,如果传递了一个变量,它只是告诉它在文件中运行另一个固定命令。

如何让这更安全?显然没有root权限是最好的,但我需要运行一些命令来移动,编辑,更新,安装文件等。

更新

只是为了确认这是有效的。我想让它更安全一点。

我尝试将所有权更改为wwwrun:root和权限更改为744

这使得只有root才能编辑文件,我认为这是一个好主意..

由于

2 个答案:

答案 0 :(得分:2)

关于保护应用程序的一些建议,按影响排序:

  1. 尝试重新设计系统,以便不需要root权限。您指出了这一点,如果您可以提供有关应用程序功能的更多详细信息,我们可以探索它。这可能是您花时间保护应用程序的最佳投资。

  2. 保护脚本不被非root用户修改。如果wwwroot可以修改脚本内容,则可以以root身份运行任何命令:

    • 确保文件归root用户所有,并且wwwdata属于一个组,除root之外的任何人都可以修改它们。您可以将wwwrun权限限制为仅执行并取消其他权限,否则攻击者只能覆盖文件内容并执行任意命令:

      wwwrun$ cp evil /Web/scripts/helper/filea && sudo /Web/scripts/helper/filea

    • 确保所有直到并包含脚本的路径都归root所有,并且只有root才能修改它们。否则,攻击者只能移动目录来执行任意命令:

      wwwrun$ rm -rf /Web/script && mkdir -p /Web/script/helper

      wwwrun$ cp evil /Web/scripts/helper/filea && sudo /Web/scripts/helper/filea

    • 对您在脚本中运行的所有命令执行此操作

  3. 确保所有引用的命令和文件都使用绝对路径

  4. 检查正在执行的脚本的安全性:它们以root用户身份运行,如果它们不是以root身份运行(临时文件,不安全的依赖项等),攻击者将利用它们

    < / LI>
  5. 修改sudoers文件以确保命令不能使用参数运行,方法是使用&#34;&#34;语法,例如:

    wwwrun ALL=(ALL) NOPASSWD: /Web/scripts/helper/filea ""

  6. 检查比赛条件 - 例如攻击者可以同时并发执行多个命令,检查这种并发是否会引入漏洞。如果需要,请确保脚本不能通过使用锁定机制同时运行

答案 1 :(得分:0)

尝试向root授予www-data权限! 要求www-data有权阅读。您还可以尝试将文件ownergroup更改为www-data