如何使用dynamic虚拟主机进行共享虚拟主机设置?

我们正在构build一种共享的托pipeWeb服务器设置,但是一切都通过ourdomain.com上的Web应用程序进行pipe理,该应用程序具有默认的apache用户(www-data)来访问所有人的文件。

每个人都有一个user_name,他们的web_root是[some_root_folder] / [user_name]

我们正在使用创builddynamic虚拟主机

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] 

我们不希望创build单独的虚拟主机,因为这需要在每次注册时重新加载apache(我会问你在另一个项目上使用mpm-itk创build单独虚拟主机的意见)。

如果user_michael执行:

<?php echo file_get_contents('../user_george/index.php'); ?> <?php echo file_get_contents('../user_george/index.php'); ?>user_michael.ourdomain.com/index.php

Michael能够读取George的文件,因为这两个目录属于www-data用户组(否则我们的web应用程序不能修改它们)

那么:www-data怎么能修改Michael和George的文件,但是如果上面给出的设置,他们不能修改对方的文件?

运行file_get_contents时,正在读取../user_george/index.php文件的用户与Web服务器(www-data)相同,而不是该文件的所有者。

PHP安全模式是针对此问题的解决scheme,但已被弃用。 我build议查看这个系列的解决scheme关于安全的共享主机。

每次注册后重新启动Apache可能不是问题。 看到优雅的重启 。

对于你的许可问题,如果你只需要php,而不想运行CGI,你可能想看看PHP的安全模式 。 它被弃用,不是最好的方式,但容易使用。
另一种方法是使用suPHP作为user_name而不是apache用户运行php脚本。