PHP-以root用户身份运行系统命令.-安全


PHP - Run system commands as root. - Security

我正在寻求一些建议。。

我设法获得了一个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用户才能编辑文件,我认为这是个好主意。。

感谢

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

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

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