PHP - 每个虚拟主机都有一个不同的 open_basedir

Posted

技术标签:

【中文标题】PHP - 每个虚拟主机都有一个不同的 open_basedir【英文标题】:PHP - a different open_basedir per each virtual host 【发布时间】:2011-02-16 09:27:31 【问题描述】:

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

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

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

提前致谢 洛波克

【问题讨论】:

【参考方案1】:

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

来自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。我自己没有这样做,所以我不能说什么 - 你必须深入研究,也许可以专门问一个关于这个的问题。

【讨论】:

是的,但是即使使用这个指令,一个简单的 echo 'ls /' 仍然有效【参考方案2】:

您可以使用 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

【讨论】:

【参考方案3】:

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

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

【讨论】:

以上是关于PHP - 每个虚拟主机都有一个不同的 open_basedir的主要内容,如果未能解决你的问题,请参考以下文章

PHP Wamp 服务器 - 一台服务器上有 2 个 SSL 证书

2018-3-19 13周1次课 php-fpm的pool慢日志进程open_basedir

linux的php-fpm的pool慢执行日志进程管理及open_basedir介绍

循环嵌套数组生成不同长度的表

php-fpm的poolphp-fpm慢执行日志open_basedirphp-fpm进程管理

新世界主机_XenServer7.0都有哪些优势?