/var/www
我已经在不同的子目录中设置了我的所有网站。假设我有 5 个基于 CMS 的站点,例如WordPress /var/www/a.com
、/var/www/b.com
、和./var/www/c.com
/var/www/d.com
/var/www/e.com
但我发现,如果我向 中的某个人授予管理员权限a.com
,使用某些插件,他们可以访问到/var/www
,并访问不同的目录,比如说/var/www/c.com
,因此他们可以通过阅读例如配置文件来获得访问权限( wp-config.php
) 在 WordPress 的情况下,因为最终目录列表插件通过可能具有组访问权限的 Web 服务器执行此操作。
我找到的唯一解决方案是仅在此文件中限制对来宾和组的完全访问,因此从技术上讲,它只能通过具有 root 访问权限的 SSH 访问,但这可能会导致错误,因为 Web 服务器将无法访问,除非Web 服务器用户是所有者。
这使我得出结论,如果您在同一主机上托管多个站点,并且它们运行相同的 Web 服务器守护程序,则存在固有风险。但是应该有一个解决方案,因为这是由世界各地的数百个虚拟主机完成的。
鉴于这种情况,谁能推荐我一个解决方案?
如果您使用PHP并且想要阻止任何 php 脚本浏览当前网站以外的其他目录,那么最简单的方法是,您可以使用
open_basedir
更多信息:https ://www.php.net/manual/en/ini.core.php#ini.open-basedir
编辑: 为了像 Gerald Schneider 所说的那样更安全,请将您的 open_basedir 添加到您的网络服务器配置或 php 池中。
在您的网站文件夹中添加一个 .user.ini 文件并更改所有者权限以不让您的网络服务器或 php 编辑/删除此文件。例子 :
/var/www/a.com/.user.ini
添加类似这样的内容:
open_basedir = "/var/www/a.com:/tmp"
所以这意味着,对于 PHP,它将无法解析这些路径之外的内容(/var/www/a.com 和 /tmp,需要上传)。
检查您的 php.ini 以启用此配置文件,检查它,执行phpinfo()
并检查user_ini.filename
更多信息:https ://www.php.net/configuration.file.per-user此提示仅保护您免受使用 PHP 函数的 PHP 脚本的影响,您无需更改任何目录权限,但如果有人想使用 PHP 执行批处理脚本,它可以解析其他文件夹,如果您使用 sftp、ftp 或其他东西浏览您的文件,此规则将不起作用。
解决方案是使用 PHP FPM 池,因此每个目录将由不同的用户运行。
我之前忘了写这个,但这就是我解决问题的方法,现在文件权限很有意义,因为我可以按照 UNIX 经典文件系统权限控制的意图对所有者、组和来宾权限进行巨大控制。