我们正在构建一种共享托管网络服务器设置,但一切都由 ourdomain.com 上的网络应用程序管理,该应用程序具有默认的 apache 用户(www-data)来访问每个人的文件。
每个人都有一个 user_name,他们的 web_root 是 [some_root_folder]/[user_name]
我们正在使用创建动态虚拟主机
http://httpd.apache.org/docs/2.0/vhosts/mass.html#xtra-conf
作为
[some_root_folder]/[user_name] user_name.ourdomain.com
我们的确是
chown 770 user_name:www-data -R [some_root_folder]/[user_name]
我们不希望创建单独的虚拟主机,因为这需要在每次注册时重新加载 apache(我会询问您对在另一个条目上使用 mpm-itk 创建单独的虚拟主机的意见)。
问题
如果 user_michael 执行:
<?php echo file_get_contents(‘../user_george/index.php’); ?>
上user_michael.ourdomain.com/index.php
Michael 能够读取 George 的文件,因为这两个目录都属于 www-data 用户组(否则我们的 Web 应用程序无法修改它们)
所以: www-data 怎么能修改迈克尔和乔治的文件,但他们不能修改对方的,给定上面的设置?
每次注册后重新启动 Apache 可能不是问题。请参阅优雅重启。
对于您的权限问题,如果您只需要 php 而不想运行 CGI,您可能需要查看PHP Safe Mode。它已弃用,不是最好的方法,但易于使用。
另一种方法是使用suPHP以 user_name 而不是 apache 用户的身份运行 php 脚本。
当您运行 file_get_contents 时,正在读取 ../user_george/index.php 文件的用户与 Web 服务器(www-data)相同,而不是文件的所有者。
PHP 安全模式是此问题的解决方案,但已弃用。我建议查看本系列以获取有关共享主机安全性的解决方案。