如何使用动态虚拟主机设置共享网络托管?

如何使用动态虚拟主机设置共享网络托管?

我们正在构建一种共享托管网络服务器设置,但一切都由 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 安全模式是解决此问题的方法,但已被弃用。我建议检查本系列了解有关共享主机安全的解决方案。

答案2

每次注册后重新启动 Apache 可能不是问题。请参阅优雅重启

对于您的权限问题,如果您只需要 php 并且不想运行 CGI,您可能需要研究PHP 安全模式。它已被弃用,不是最好的方法,但易于使用。
另一种方法是使用苏普以 user_name 而不是 apache 用户身份运行 php 脚本。

相关内容