1

我希望 PHP 在需要 shell 时在给定路径上使用可执行文件,而不是在需要 shell 的每种情况下使用默认的 /bin/sh(例如 mail() 函数在 UNIX 平台上启动 sendmail,system()函数,反引号运算符等)。由于我使用 PHP 作为 apache 模块,因此我尝试更改 /etc/passwd 中 www-data 用户的 shell,因为 webserver 以该用户身份运行。那没有帮助。我还尝试使用 SetEnv 在 apache 配置中设置 SHELL 变量,但它也没有帮助。我想这样做,因为我想审核 PHP 完成的所有 shell 调用,以记录和/或拒绝/接受它们。禁用像 system() 这样的 PHP 函数不是一个选项,因为现有(无法修改)解决方案使用它。我已经用 C 编写了那个“受限外壳”,

是的,我已经问过这个与 mail() 函数相关的问题,但我意识到我需要一个非常通用的解决方案,而且它不仅与 mail() 相关,而且问题是一般的 shell 使用,在许多不同的情况。我也考虑过在 apparmor 中覆盖路径名的可能性,但我认为这是不可能的。为 apache/PHP 提供自定义 chroot“监狱”的解决方案只是为了提供不同的 shell,这对我来说似乎是一个巨大的过度杀伤情况:(

提前非常感谢!

4

1 回答 1

1

PHP 在这种情况下使用popen(),它通常是硬编码的/bin/sh -c(例如,参见glibc 的实现)。

如果设置 chroot 监狱确实不是一个选项,并且 AppArmor 提供的还不够,您可能需要修改 PHP 或 libc。

于 2013-06-10T08:12:14.513 回答