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

在PHP需要shell时使用不同于/bin/sh的路径,php,linux,apache,shell,apparmor,Php,Linux,Apache,Shell,Apparmor,我希望PHP在需要shell时在给定路径上使用可执行文件,而不是在需要shell的任何情况下使用默认的/bin/sh(例如在UNIX平台上启动sendmail的mail()函数、system()函数、backtick操作符等)。因为我使用PHP作为apache模块,所以我尝试在/etc/passwd中更改www数据用户的shell,因为webserver以该用户的身份运行。那没用。我还尝试使用SetEnv在apache配置中设置SHELL变量,但也没有帮助。我想这样做,因为我想审计PHP完成的所

我希望PHP在需要shell时在给定路径上使用可执行文件,而不是在需要shell的任何情况下使用默认的/bin/sh(例如在UNIX平台上启动sendmail的mail()函数、system()函数、backtick操作符等)。因为我使用PHP作为apache模块,所以我尝试在/etc/passwd中更改www数据用户的shell,因为webserver以该用户的身份运行。那没用。我还尝试使用SetEnv在apache配置中设置SHELL变量,但也没有帮助。我想这样做,因为我想审计PHP完成的所有shell调用,记录和/或拒绝/接受它们。禁用system()等PHP函数不是一个选项,因为现有(无法修改)解决方案使用它。我已经有了用C编写的“受限shell”,我只是错过了让PHP使用该二进制文件而不是/bin/sh的诀窍——在其他情况下需要/bin/sh

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

非常感谢!

PHP在本例中使用,通常是硬编码使用
/bin/sh-c
(例如,请参阅)

如果设置chroot不是一个选项,并且AppArmor提供的内容还不够,那么您可能需要修改PHP或libc。

PHP在这种情况下使用,通常硬编码为使用
/bin/sh-c
(例如,请参阅)


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

在chroot环境中运行apache如何?请阅读此内容。在chroot监狱中,您可以用修改后的版本替换shell。是的,我在问题中也提到了chroot,谢谢。我只需付费l仅仅因为将单个字符串设置为不同的(所用shell的路径),使用chroot env真是太过分了,这是一个巨大的资源浪费,使管理变得更加复杂,等等。但是,如果没有其他解决方案,我必须肯定地处理这个问题…谢谢!在chrooted环境中运行apache怎么样?阅读此文。在chrootjail中,您可以用修改后的版本替换shell。是的,我在我的文章中也提到了chroot问题,谢谢。只是我觉得有一个chroot env真的太过分了,因为设置一个不同的字符串(用过的shell的路径),这是一个巨大的资源浪费,让管理变得更复杂,等等。但是如果没有其他解决方案,我肯定要处理这个问题…谢谢!