我正在设置一个 Web 服务器,它将托管许多不同的网站作为 Apache VirtualHosts,每个网站都可以运行脚本(主要是 PHP,可能还有其他)。
我的问题是如何将这些 VirtualHosts 与彼此以及系统的其余部分隔离开来?我不希望网站 X 读取网站 Y 的配置或任何服务器的“私有”文件。
目前,我已经按照此处所述(http://x10hosting.com/forums/vps-tutorials/148894-debian-apache-2-2-fastcgi-php-5-suexec)设置了带有 FastCGI、PHP 和 SUExec 的 VirtualHosts -easy-way.html ),但 SUExec 仅阻止用户编辑/执行除他们自己之外的文件 - 用户仍然可以读取敏感信息,例如配置文件。
我曾考虑删除服务器上所有文件的 UNIX 全局读取权限,因为这将解决上述问题,但我不确定是否可以安全地执行此操作而不会中断服务器功能。
我也研究过使用 chroot,但似乎这只能在每个服务器的基础上完成,而不能在每个虚拟主机的基础上完成。
我正在寻找任何将我的 VirtualHosts 与系统其余部分隔离的建议。
PS 我正在运行 Ubuntu 12.04 服务器
我的回答:我几乎按照我当前的配置结束,但是为所有虚拟主机做一个 chroot jail,例如在 chroot jail/var/www,然后将所有用户的数据放在子文件夹中,每个子文件夹都具有 group/others r/w/x 权限禁用。此选项是可取的,特别是因为无需对源代码进行任何修改即可实现。
我选择了@Chris 的答案,因为它写得很透彻,而且还考虑了 FTP 和 SELinux