PHP – 每个虚拟主机不同的open_basedir

我碰到过这个问题,我有一个运行ApachePHP的服务器。 我们有很多的虚拟主机,但我们注意到,一个潜在的恶意用户可以使用他的networking空间浏览其他用户的文件(通过一个简单的PHP脚本),甚至系统文件,这可能是由于PHP的权限。 避免这种情况的一种方法是在php.ini中设置open_basedir var,在单个主机系统中这很简单,但是在虚拟主机的情况下,每个主机都会有一个basebir。

何我可以设置每个用户/主机dis basedir? 有没有办法让apache遗传已被请求的php文件的php特权

EG /home/X_USER/index.php拥有所有者X_USER,当apache读取文件index.php时,它会检查它的path和所有者,只是我正在寻找一个系统设置php basedirvariables的path。

预先感谢Lopoc

可以使用php_admin_value Apache指令在每个目录下设置open_basedir

手册中的示例:

 <Directory /docroot> php_admin_value open_basedir /docroot </Directory> 

回复您的评论:是的,外部命令不受open_basedir影响 – 当调用ls /这是通过PHP运行的用户帐户(通常命名为www或类似的)的权限完成的。 据我所知,将open_basedir扩展到外部命令是不可能的。

在这种情况下,我不认为你正在寻找的保护类型可以在普通的Apache / PHP设置中使用。 唯一可能接近的就是在chroot监狱里运行Apache 。 我自己没有这样做,所以我什么都不能说 – 你必须深入挖掘,也许会特别提出一个问题。

您可以使用Apache配置文件设置许多php.ini设置。

从PHP手册查看这些相关页面: – http://php.net/manual/en/configuration.changes.phphttp://www.php.net/manual/en/ini.core.php#ini&#x3002; sect.path-directory – http://www.php.net/manual/en/configuration.changes.modes.php

chroot是个好主意。 而现在码头工人更有效率。

而open_basedir与“/ docroot”不是安全的,你应该以“/”结尾或者PHP可以访问/ docroot1