【问题标题】:PHP - Run system commands as root. - SecurityPHP - 以 root 身份运行系统命令。 - 安全
【发布时间】:2015-04-16 04:06:02
【问题描述】:

我正在寻找一些建议..

我已经设法获得一个 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 命令。此文件具有655root:root 权限。

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

我怎样才能使它更安全?显然没有 root 访问权限是最好的,但我需要运行一些命令来移动、编辑、更新、安装文件等。

更新

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

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

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

谢谢

【问题讨论】:

    标签: php security root


    【解决方案1】:

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

    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 身份运行(临时文件、不安全的依赖项等),攻击者将利用它们

    5. 修改 sudoers 文件以确保命令不能带参数运行,使用 "" 语法,例如:

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

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

    【讨论】:

      【解决方案2】:

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

      【讨论】:

      • 如果我赋予 www-data root 权限,是否不允许任何脚本运行具有 root 权限?
      • 我看到了你的问题。因此,将文件夹的 owner 递归设置为 www-data 并将 www-data 保留在它自己的 group 之前的位置。
      • 对不起 - 这正如我上面写的那样工作。我现在正努力让它更安全。
      猜你喜欢
      • 2012-09-01
      • 1970-01-01
      • 2012-02-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-08-26
      • 2020-05-01
      相关资源
      最近更新 更多