我们正在构建一种共享托管网络服务器设置,但一切都由 ourdomain.com 上的网络应用程序管理,该应用程序具有默认的 apache 用户(www-data)来访问每个人的文件。
每个人都有一个用户名,他们的 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]
我们不想创建单独的 vhost,因为这需要在每次注册时重新加载 apache(我会在另一个条目中询问您对使用 mpm-itk 创建单独的 vhost 的意见)。
问题
如果 user_michael 执行:
<?php echo file_get_contents(‘../user_george/index.php’); ?>
在user_michael.ourdomain.com/index.php
Michael 能够读取 George 的文件,因为两个目录都属于 www-data 用户组(否则我们的 Web 应用程序无法修改它们)
那么:根据上述设置,www-data 怎样才能同时修改 Michael 和 George 的文件,而他们却不能互相修改?
答案1
当您运行 file_get_contents 时,读取 ../user_george/index.php 文件的用户与 Web 服务器 (www-data) 相同,而不是文件的所有者。
PHP 安全模式是解决此问题的方法,但已被弃用。我建议检查本系列了解有关共享主机安全的解决方案。