gpt4 book ai didi

php - 当 PHP 需要 shell 时使用不同于/bin/sh 的路径

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:03:22 28 4
gpt4 key购买 nike

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

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

提前致谢!

最佳答案

PHP 使用 popen()在这种情况下,它通常被硬编码为使用 /bin/sh -c(例如,参见 glibc's implementation)。

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

关于php - 当 PHP 需要 shell 时使用不同于/bin/sh 的路径,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17019039/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com