在Linux上沙箱Apache的最佳方法

时间:2020-03-06 14:50:33  来源:igfitidea点击:

我的Apache在面向公众的Debian服务器上运行,并且对安装的安全性有些担心。这是一台托管多个业余时间业余项目的机器,因此,使用该机器的我们当中没有人真正有时间不断监视上游补丁,保持对安全问题的意识等。 ,或者如果它们进入,请将其放在沙盒中。

那么,什么是最好的,易于设置,易于维护的解决方案呢?在Debian上设置用户模式linux沙箱是否容易?也许是chroot监狱?我想从外部轻松访问Sadbox中的文件。这是我很清楚自己是程序员而不是sysadmin的那些时候之一。任何帮助将非常感激!

解决方案

我们始终可以将其设置在虚拟机中并保留其映像,因此可以根据需要重新滚动它。这样,服务器就从实际计算机中提取出来,并且任何病毒等都包含在虚拟机内部。如前所述,如果保留映像作为备份,则可以轻松恢复到以前的状态。

创建一个虚拟机。尝试类似vmware或者qemu

当我们运行完整的沙箱环境时,Chroot监狱可能确实不安全。攻击者可以完全访问内核功能,例如可以安装驱动器以访问"主机"系统。

我建议我们使用linux-vserver。我们可以将linux-vserver视为经过改进的chroot监狱,其中包含完整的debian安装。由于它运行在一个内核中,因此它真的非常快,并且所有代码执行都是本机执行。

我个人使用linux-vserver来分离所有服务,并且几乎没有明显的性能差异。

请查看linux-vserver Wiki以获取安装说明。

问候,丹尼斯

可以肯定地说,CHRoot Jails很少是一个好主意,尽管有此意图,但还是很容易破解,事实上,我已经看到用户不小心将其完成了!

没有冒犯,但是,如果我们没有时间监视安全补丁并保持对安全问题的注意,则无论设置如何,都应引起关注。另一方面,我们正在考虑这些问题的事实使我们与其他99.9%的此类机器所有者区分开。我们在正确的道路上!

我赞同xardias所说的,但建议使用OpenVZ。

它与Linux-Vserver相似,因此我们可能要在进行此路由比较时将两者进行比较。

我用代理http服务器(nginx)设置了一个Web服务器,然后将流量委派给不同的OpenVZ容器(基于主机名或者请求的路径)。在每个容器中,我们可以设置Apache或者任何其他Web服务器(例如nginx,lighttpd等)。
这样一来,我们就无法为所有内容使用一个Apache,但可以为任何服务子集(例如,每个项目)创建一个容器。

OpenVZ容器可以很容易地完全进行更新("对于$(vzlist)中的i;执行vzctl exec apt-get升级;完成")

不同容器的文件存储在硬件节点中,因此我们可以通过SFTP进入硬件节点很容易地访问它们。
除此之外,我们可以将公共IP地址添加到某些容器中,在其中安装SSH,然后直接从容器中访问它们。
我什至听说过SSH代理,因此即使在这种情况下,也可能不需要额外的公共IP地址。

我们到底要解决什么问题?如果我们关心该服务器上的内容,则需要防止入侵者进入该服务器。如果我们担心入侵者会对服务器造成什么影响,则需要限制服务器本身的功能。

在不严重限制服务器本身的情况下,使用虚拟化无法解决这些问题。我认为我们问题的真正答案是:

  • 运行一个为我们提供简单操作系统更新机制的操作系统。
  • 使用供应商提供的软件。
  • 经常备份所有内容。

令人惊讶的是,没有人提到mod_chroot和suEXEC,这是我们应该开始的基本内容,并且很可能是我们唯一需要的内容。

我们应该使用SELinux。我不知道Debian对它的支持程度如何;如果不是这样,只需在VM中安装启用了SELinux的Centos 5.2. 不应进行过多的工作,也应比任何业余chroot都要安全得多,后者并不像大多数人所相信的那样安全。
SELinux以难以管理而闻名,但是,如果我们只是在运行Web服务器,那不应该成为问题。我们可能只需要做一些"让步"就可以使httpd连接到数据库,仅此而已。

尽管以上所有都是不错的建议,但我也建议添加iptables规则以禁止意外的传出网络连接。由于大多数自动化Web漏洞利用程序的第一件事就是下载其有效负载的其余部分,因此防止网络连接会降低攻击者的速度。

可以使用一些类似于这些规则(请注意,Web服务器可能需要访问其他协议):
iptables --append OUTPUT -m owner --uid-owner apache -m state --state建立,相关--jump ACCEPT
iptables --append OUTPUT -m owner --uid-owner apache --protocol udp --destination-port 53 --jump ACCEPT
iptables --append OUTPUT -m owner --uid-owner apache --jump REJECT

如果使用Debian,debootstrap是QEMU,Xen,OpenVZ,Lguest或者许多其他软件的朋友。