我遇到过这个问题,我有一个运行apache和php的服务器。我们有许多虚拟主机,但我们注意到潜在的恶意用户可以使用他的网络空间浏览其他用户的文件(通过简单的PHP脚本)甚至系统文件,这可能是由于php权限。 一种避免它的方法是在php.ini中设置open_basedir var,这在单个主机系统中非常简单,但是对于虚拟主机,每个主机都会有一个basebir。
我可以为每个用户/主机设置dis basedir吗?有没有办法让apache认可已经请求的php文件的php权限
E.G。 /home/X_USER/index.php拥有所有者X_USER,当apache读取文件index.php时,它检查其路径和所有者,只是我正在寻找一个系统设置php basedir变量到该路径。
提前感谢 Lopoc
答案 0 :(得分:18)
可以使用open_basedir
Apache指令在每个目录的基础上设置php_admin_value
。
manual的示例:
<Directory /docroot>
php_admin_value open_basedir /docroot
</Directory>
重新评论:是的,外部命令不受open_basedir
的影响 - 调用ls /
时,这是通过PHP运行的用户帐户的权限完成的(通常命名为www
或类似的)。据我所知,无法将open_basedir
扩展到外部命令。
在这种情况下,我不认为您正在寻找的保护类型可以在正常的Apache / PHP设置中实现。唯一可能接近的是running Apache in a chroot jail。我自己也没有这样做,所以我不能对此发表任何意见 - 你必须深入研究并提出具体问题。
答案 1 :(得分:1)
您可以使用Apache配置文件设置许多php.ini设置。
请参阅PHP手册中的这些相关页面: - http://php.net/manual/en/configuration.changes.php - http://www.php.net/manual/en/ini.core.php#ini.sect.path-directory - http://www.php.net/manual/en/configuration.changes.modes.php
答案 2 :(得分:1)
和open_basedir与“/ docroot”不安全,你应该以“/”结束或PHP可以访问/ docroot1