在Linux上最好的沙盒Apache方法

我的Apache运行在面向公众的Debian服务器上,对安装的安全性有点担心。 这是一个机器,主持几个空闲时间的爱好项目,所以我们没有谁使用这台机器真的有时间不断地观察上游补丁,保持安全问题等意识,但我想保持坏人出去,或者如果他们进来,把他们放在沙箱里。

那么什么是最好的,易于设置,易于维护的解决scheme? 在Debian上设置一个用户模式的linux sandbox很容易吗? 或者也许是一个chroot监狱? 我想从外面轻松访问sadbox内的文件。 这是对我来说非常清楚,我是程序员而不是系统pipe理员的那个时代之一。 任何帮助将非常感激!

当你运行一个完整的沙箱环境时,Chroot监狱真的不安全。 攻击者可以完全访问内核功能,例如可以挂载驱动器来访问“主机”系统。

我建议你使用linux-vserver。 你可以看到linux-vserver是一个改进的chroot监狱,里面有一个完整的debian安装。 由于它在一个单独的内核中运行,所以代码执行本身就是一个代码。

我个人使用Linux的虚拟服务器分离我的所有服务,只有几乎没有明显的性能差异。

查看linux-vserver wiki来获取安装说明。

问候,丹尼斯

我第二什么xardias说,而是推荐OpenVZ 。

它与Linux-Vserver类似,所以你可能想要比较这两个路线。

我使用代理http服务器( nginx )设置了一个web服务器,然后将流量委托给不同的OpenVZ容器(基于主机名或请求的路径)。 在每个容器中,你可以设置Apache或任何其他网络服务器(例如nginx,lighttpd,..)。 这样你就没有一个Apache的一切,但可以创建一个容器的任何子集的服务(如每个项目)。

OpenVZ容器可以很容易地完全更新(“为我在$(vzlist);做vzctl执行apt-get升级;完成”)

不同容器的文件存储在硬件节点中,因此您可以通过SFTP将这些文件很容易地存取到硬件节点中。 除此之外,你可以添加一个公有IP地址给你的一些容器,在那里安装SSH,然后直接从容器访问它们。 我甚至听说过SSH代理,所以即使在这种情况下,额外的公共IP地址也可能是不必要的。

您可以随时在虚拟机内部进行设置并保留一个虚拟机的映像,以便在需要时可以重新展开。 这样,服务器就从您的实际计算机中抽象出来,并且虚拟机中包含任何病毒等等。 正如我之前所说,如果你保留一个图像作为备份,你可以很容易地恢复到以前的状态。

为了确保这一点,CHRoot Jails几乎不是一个好主意,尽管意图很容易打破,事实上我已经意外地看到用户完成这个任务!

没有冒犯,但如果你没有时间看安全补丁,并保持安全问题的意识,你应该关心,不管你的设置。 另一方面,你正在考虑这些问题的事实,使你与其他99.9%的这类机器的所有者分开。 你走在正确的道路上!

我感到惊讶的是,没有人提到mod_chroot和suEXEC ,这是你应该从头开始的基本的东西,而且很可能是你唯一需要的东西。

你应该使用SELinux。 我不知道它在Debian上的支持程度如何; 如果不是,只需在VM中安装一个启用了SELinux的Centos 5.2。 不应该做太多的工作,比任何业余chroot更安全,这是不是大多数人认为是安全的。 SELinux有难以管理的声誉,但如果你只是运行一个网络服务器,这不应该是一个问题。 你可能只需要做一些“sebool”让httpd连接到数据库,但是这是关于它的。

虽然以上都是很好的建议,我也建议添加一个iptables规则来禁止意外的传出网络连接。 由于大多数自动化Web攻击所做的第一件事就是下载其余的有效负载,防止网络连接可能会降低攻击者的速度。

有些规则类似于这些可以使用(请注意,您的Web服务器可能需要访问其他协议):iptables –append OUTPUT -m所有者–uid-owner apache -m状态–state ESTABLISHED,RELATED –jump接受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或其他许多人。

制作一个虚拟机。 尝试类似vmware或qemu

你真的想要解决什么问题? 如果你关心那个服务器上的东西,你需要防止入侵者进入。 如果您关心入侵者如何处理您的服务器,则需要限制服务器本身的功能。

这些问题都不能通过虚拟化解决,而不会严重破坏服务器本身。 我认为你的问题的真正答案是这样的:

  1. 运行一个操作系统,为操作系统更新提供一个简单的机制。
  2. 使用供应商提供的软件。
  3. 经常备份一切。