14

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

我可以为每个用户/主机设置 dis basedir 吗?有没有办法让apache继承已请求的php文件的php权限

EG /home/X_USER/index.php 作为所有者 X_USER,当 apache 读取文件 index.php 时,它会检查其路径和所有者,只是我正在寻找一个系统设置 php basedir 变量到该路径。

在此先感谢 Lopoc

4

3 回答 3

20

可以使用Apache 指令open_basedir在每个目录的基础上进行设置。php_admin_value

手册中的示例:

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

回复您的评论:是的,外部命令不受open_basedir- 调用ls /此操作时使用用户帐户 PHP 运行的权限(通常命名www或类似)。据我所知,无法扩展open_basedir到外部命令。

在这种情况下,我认为您正在寻找的那种保护在正常的 Apache/PHP 设置中是不可能的。唯一可能接近的是在 chroot 监狱中运行 Apache。我自己没有这样做,所以我不能说什么 - 你必须深入研究,也许会专门问一个关于这个的问题。

于 2010-05-06T12:52:35.027 回答
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

于 2010-05-06T12:53:01.097 回答
1

chroot 是个好主意。现在 docker 更有效了。

并且 open_basedir 带有 "/docroot" 不安全,你应该以 "/" 结尾或者 PHP 可以访问 /docroot1

于 2016-04-16T16:35:20.473 回答