首先,我想知道将 Apache 的 vhost 彼此隔离的最佳方法是什么。我认为这也与 Linux 文件系统有关,因为将和这样的文件夹(和文件)放在/var/www/site1.com/public_html
同/var/www/site2.com/public_html
一个 Linux 用户/组下并不是一个好习惯。
我找到了这个类似的帖子:将 Apache 虚拟主机与系统其余部分隔离但注意到这是关于将虚拟主机与系统隔离。这是一种很好的做法,但不是我想要的。
我不希望通过任何可能的方式site1.com
访问文件site2.com
,如果可能的话,除了文件系统自己的目录和子目录之外,也不要访问文件系统中任何不必要的东西。
其次,chmod 对用户权限有什么影响。假设两个站点都在各自的用户和用户组中运行。但site1.com
有一个文件或目录的 chmod 权限为 777。是否site2.com
可以使用该文件/目录?
答案1
这不是最好的解决方案,但可能是其中的一部分,也是最简单的解决方案:使用 suExec。
例如,使用 suExec,您可以轻松为每个 vhost 分配不同的 Unix 用户(最常见的情况)。如果您注意将这些用户的主页设为私有(模式 0700),那么这是一个非常好的隔离开始。
它们没有被 chrooted,并且仍将共享 /tmp,查看正在运行的其他进程等。但您将至少比绝大多数配置糟糕的 LAMP 服务器高出一个级别。
还有一些技术上的优点/缺点:
- 优点:消除“ftp-user 与 www-data”用户,许多人最终将所有文件和文件夹 chmod 为全局写入(模式 0777),以便 HTTP 上传正常工作;这里 shell 登录和 Apache 共享同一个用户
- 缺点:出于同样的原因,Apache 现在可以从你的用户帐户修改任何文件(数据、代码);对于那些希望从后台更新 Wordpress 的人来说,这是先决条件,但如果你非常重视安全性,并且知道如何真正维护 web 应用程序,那么这是不行的
- 缺点:当 Apache 工作进程对某个用户执行 su 时,它不能被重新用于处理针对不同 vhost/用户的下一个传入 HTTP 请求;因此,如果您有大量 vhost/用户,则此解决方案的扩展性不佳(与使用其 mpm-worker 并通过 FastCGI、HTTP 反向代理等在进程外运行代码的非常好的想法无关)
关于您的第二个问题:使用私人主页,您可以得到您想要的(chmod 0700 ~toto),但如果用户愿意,她自己可能会将自己的主页公开,甚至全局可写(运行 chmod 0777 ~toto)。因此,这取决于您对服务器用户和应用程序的信任。