我希望PHP在给定的路径上使用可执行文件,当它需要一个shell而不是默认的/bin/sh,当它需要一个shell(例如mail()函数在UNIX平台上启动sendmail, system()函数,反打运算符等)。由于我使用PHP作为apache模块,因此我尝试更改/etc/passwd中www-data用户的shell,因为webserver以该用户运行。但这无济于事。我还尝试在apache配置中设置SHELL变量,使用SetEnv,但它也没有帮助。我想这样做,因为我想审计PHP完成的所有shell调用,记录和/或拒绝/接受它们。不能禁用system()等PHP函数,因为现有的(无法修改的)解决方案使用它。我已经用C编写了这个"受限shell",我只是错过了让PHP在所有需要/bin/sh的情况下使用该二进制文件而不是/bin/sh的技巧。
是的,我已经问过这个与mail()函数相关的问题,但我意识到我需要一个更通用的解决方案,它不仅与mail()相关,而且问题是shell在许多不同情况下的一般使用。我也考虑过在幻影中重写路径名的可能性,但我认为这是不可能的。为apache/PHP提供自定义chroot"jail"的解决方案只是为了提供不同的shell,对我来说似乎是一个巨大的过度的情况:(
提前感谢!
PHP在这种情况下使用popen(),它通常硬编码为使用/bin/sh -c
(例如,请参阅glibc的实现)。
如果确实不能设置chroot jail,而且AppArmor提供的功能还不够,那么您可能必须修改PHP或libc。