将Apache虚拟主机与系统其余部分隔离


11

我正在设置一个Web服务器,该服务器将托管许多不同的网站,如Apache VirtualHosts,每个网站都可以运行脚本(主要是PHP,其他可能是possiblu)。

我的问题是如何将这些VirtualHost彼此隔离以及与系统其余部分隔离?我不希望网站X例如读取网站Y的配置或任何服务器的“私有”文件。

目前,我已按照此处所述使用FastCGI,PHP和SUExec设置了VirtualHosts(http://x10hosting.com/forums/vps-tutorials/148894-debian-apache-2-2-fastcgi-php-5-suexec -easy-way.html),但是SUExec仅阻止用户编辑/执行他们自己以外的文件-用户仍然可以读取敏感信息,例如配置文件。

我已经考虑过删除服务器上所有文件的UNIX全局读取权限,因为这样可以解决上述问题,但是我不确定是否可以安全地执行此操作而不中断服务器功能。

我也研究了使用chroot,但似乎只能在每个服务器上完成,而不能在每个虚拟主机上完成。

我正在寻找将我的VirtualHost与系统其余部分隔离的任何建议。

PS我正在运行Ubuntu 12.04服务器

我的回答:我几乎按照当前配置进行了操作,但是对所有虚拟主机都进行了chroot监禁,例如,将chroot监禁入其中/var/www,然后将所有用户数据放在子文件夹中,每个子文件夹均具有组/其他r / w / x权限禁用的。该选项是可取的,特别是因为无需修改源代码就可以实现。

我选择了@Chris的答案,因为它是经过彻底编写的,并且还考虑了FTP和SELinux

Answers:


4

这可以通过在Apache中启用mod_users模块来完成。

您将需要在apache配置中设置UserDir。我建议您在单独的配置文件中执行此操作,并将其包括在内。包装包含在

<IfModule mod_users.c>
   Include conf/extra/userdir.conf
</IfModule>

我可以为您提供整个教程,但这应该可以帮助您开始配置Apache:http : //www.techytalk.info/enable-userdir-apache-module-ubuntu-debian-based-linux-distributions/

提示:如果您正在运行SELinux(应该这样做),则必须授予Apache对用户目录的读取权限。您可以通过设置以下内容来做到这一点:

sudo setsebool -P httpd_enable_homedirs=On

它还需要对用户dirs public_html目录的文件许可权以及对父目录(直到root)的rx许可权。

显然,您需要为用户设置chroot,例如在vsftpd中。安装:

apt-get vsftpd

要配置chrooting,请使用vi或nano打开/etc/vsftpd/vsftpd.conf。查找并取消注释或添加:chroot_local_user = yes

您可以通过FTP建议使用与sftp相同的行为,打开/ etc / ssh / sshd_config并添加Match块和以下行:

Subsystem   sftp    internal-sftp

Match Group web_users
    ChrootDirectory %h
    ForceCommand internal-sftp
    AllowTcpForwarding no
Match

这将chroot web_users组中的任何用户。另外,您还需要通过将其设置为/ sbin / nologin来拒绝对shell的访问:

useradd -G "web_users" -s /sbin/nologin new_user

如果这将是一个公共生产服务器,我也强烈建议您对OS,OpenSSH,Apache,PHP,vsftpd进行一些强化,并应用一些严格的iptables和TCP包装器。我建议您也保留SELinux。


3
我看不到如何mod_userdir提供单独域名的虚拟托管。另外,我确实担心隔离方面的安全性,因为我无法在Apache的用户目录之间找到任何相关信息。似乎不提供该功能。
gertvdijk 2012年

6

我建议看看suphpPHP-FPM

基本上,它将使PHP解释器能够“ su”到为该VirtualHost配置的某些特定用户。这样一来,您就可以利用常规文件系统权限来隔离每个VirtualHost。

考虑到性能,我建议使用FPM。在主页上,这是您最感兴趣的:

每个池的用户和组选项也很有趣,它允许您在给定的uid和gid下运行特定的fpm池。再见!


4

1
我查看了这些链接,但似乎无法基于每个虚拟主机更改chroot。也许我应该在like中为chroot定义一个全局www目录/var/www,并将所有主机都放在该目录的子目录中,这些子目录中的每个子目录都删除了全局执行/读取权限?
JesperB 2012年

我的要点是chroot,您可以在每个虚拟服务器上执行此操作。这是一个例子。在这种情况下,他们使用mod_chroot
tacotuesday,2012年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.