Php shell_exec不尊重open_basedir

Php shell_exec不尊重open_basedir,php,linux,apache,Php,Linux,Apache,我正在创建一个共享主机,但不幸的是,我需要允许用户使用shell_exec。问题是,有了这个命令,他们几乎可以读取我服务器上的任何文件,包括其他网站的文件!如何使shell_exec遵守我在vhosts文件中设置的open_basedir?我认为没有简单的方法可以做到这一点。为了阻止客户端访问特定目录,必须阻止正在运行的PHP用户。(可能是apache或www数据) 您必须实现一个模块或一种方法来运行每个实例,用户可以将其引导到您的特定路径。您可以限制用户可以访问的basedir和特定根base

我正在创建一个共享主机,但不幸的是,我需要允许用户使用shell_exec。问题是,有了这个命令,他们几乎可以读取我服务器上的任何文件,包括其他网站的文件!如何使shell_exec遵守我在vhosts文件中设置的open_basedir?

我认为没有简单的方法可以做到这一点。为了阻止客户端访问特定目录,必须阻止正在运行的PHP用户。(可能是apache或www数据)


您必须实现一个模块或一种方法来运行每个实例,用户可以将其引导到您的特定路径。

您可以限制用户可以访问的basedir和特定根basedir。PHP需要会话的
/tmp
dir,所以别忘了使用这个规则。以下是示例代码,您可以添加目录并允许:

open_basedir = /home/users/some_user/public_html:/tmp
这在PHP上是全局性的,但您可以在Apache用户托管环境上设置,并为每个用户指定
open\u basedir

 php_admin_value open_basedir "/home/some_user:/usr/lib/php:/usr/php5/lib/php:/usr/local/lib/php:/usr/local/php5/lib/php:/tmp"

确保路径可用,并且检查正在工作。不要忘记添加
/tmp

实现fastcgi或suphp,以便php进程作为特定用户运行。这将大大有助于安全。谢谢你,先生。如果因为安全问题我不能允许shell_exec,我想我可以在我的php.ini中禁用If,但是如果一些客户端需要使用它,我可以给它们一个新的函数名,比如shell_exec_fdslkfjd,但是我如何使这个函数名作为shell_exec工作?使用FastCGI并通过php-fpm.conf中的池定义禁用shell_exec。然后不要将其删除到应该具有shell_exec的用户池中。