为什么在chroot中运行named(bind)对于安全来说非常重要? 或者,也许不是?

我正在玩绑定,并开始想知道为什么这个软件是在例如在chroot中运行的CentOS。 不要误解我,我知道绑定是什么,chroot(监狱)是什么。 但我的主要想法是绑定运行没有chroot非常不安全? 如果没有监狱(更多的是任何其他服务或软件)设置它是否真的有害。 在系统中有许多没有chroot的进程运行,我认为妥协的任何人都是非常dungerous,但是什么让命名更加dungerous然后其他软件没有chroot运行?

正如@有些人提到,你必须从历史的angular度思考这个问题。

从历史的angular度来看,一个单一的硬件就是在单一操作系统下的十几种不同的服务。 如果一个服务受到威胁,那么该硬件上的所有内容都会受到影响。

有了虚拟化,这个问题就不那么重要了。 虽然逃离虚拟机并非不可能,但这并不是微不足道的。 要摆脱虚拟机肯定比较难,那就是以root权限运行的进程脱离chroot。 所以我的绑定服务器在自己的虚拟机上运行。 在这种情况下,chroot确实没有太大的意义,因为损坏已经被虚拟机的事实所限制了。

chroot是一个非常微弱的尝试,创造像一个虚拟机。 Chroot可以通过任何具有root权限的进程逃脱。 一个chroot不是有意的,不能用作一个安全机制。 带有BSD jail或LXC的chroot为您提供了操作系统级别的虚拟化,并提供了安全function。 但是现在用一台整台机器的新虚拟机很容易,build立或者学习如何使用操作系统级别的虚拟化工具是不值得的。

早期版本的绑定没有删除权限。 在Unix上,只有root帐户可以打开低于1024的端口,而且我们都知道绑定需要在udp / 53和tcp / 53上侦听。 由于绑定以root身份启动,并且不会放弃权限,所以任何妥协都意味着整个系统可能会受到影响。 现在几乎所有的软件都会开始打开套接字,并执行任何其他需要root权限的东西,然后他们将更改正在运行的用户作为非特权帐户。 一旦特权被丢弃,受到攻击的影响远远低于主机系统。

其他的答案是相当不错的,但没有提到层的安全概念。 您添加到系统中的每一层安全性都是对手必须克服的另一个层面。 把BIND放入chroot会增加一个障碍。

假设BIND存在可利用的漏洞,并且有人能够执行任意代码。 如果他们在chroot中,他们需要在系统中的其他任何东西之前突破。 如上所述,root权限是需要chroot破解的。 BIND不能以超级用户身份运行,并且应该在chroot中提供最less的工具,进一步限制选项,并且基本上只留下系统调用。 如果没有系统调用来提升权限,那么攻击者就会看到你的DNSlogging。

SomeGuy提到前面提到的情况是不太可能的,BIND最近几乎没有漏洞,它们大多局限于DoStypes场景而不是远程执行。 也就是说,在chroot中运行是不less操作系统的默认configuration,因此您不太可能花费精力来保持日益增长的安全性。

前言

我一直听到人们重申来自互联网的错误观念。因此,我会试着澄清一下

首先, 有多less偶然的发现,只是因为因果关系 ,最终被用于除了预期目的之外的其他事情?

什么是什么,什么是Chroot监狱

Chroot最初被devise为改变进程或用户的根目录(非常适用于编译未知来源的软件)。 这为基本系统提供了安全保障 ,同时也提供了一个快速的testing台设备,包括易于清理的设备。 从那以后,历史已经过去了,它的概念和暗示的用途也已经发生了变化。

chroot已被有效地使用,并直接在几个程序和库的代码库(即openSSHd,apache2 + mod_security2 / mod_chroot,dovecot,sendmail,openVPN,pam_chroot, 等等 )。 假设所有这些主stream应用程序都实施了错误的安全解决scheme,这是不正确的

chroot是文件系统虚拟化的一个解决scheme:没有什么更多的了。 只要你坚持在chroot jail里面运行进程的指导原则,你就可以轻易地脱离chroot这个假设也是不正确的。

一些步骤,以确保您的chroot监狱

即不要作为ROOT运行进程。 这可能会打开一个根升级向量(在chroot内部或外部也是如此)。 不要在chroot中运行一个进程,使用与chroot 之外的另一个进程相同的用户。 将每个进程和用户分成自己的Chroot,以限制攻击面并提供隐私。 只安装必要的文件,库和设备。 最后,chroot不是基本系统安全性的替代品。 整个系统的安全。

另一个重要的说明:很多人认为OpenVZ是破碎的,或者说它与完整的系统虚拟化不相等。 他们做这个假设是因为它本质上是一个Chroot,一个工艺表已经被消毒。 在硬件和设备上实施安全措施。 其中大部分可以在chroot中实现。

并非每个pipe理员都具有在专用服务器上或在完整的系统虚拟化环境下确保所有必需内核参数所需的知识水平。 这意味着部署OpenVZ意味着在部署应用程序之前,您的客户将拥有更less的攻击面来覆盖和保护。 一个好的主机能够很好地保证这些参数,反过来说,这不仅对节点上的每个人,对数据中心,对整个互联网来说都是好事。

如上所述,chroot提供文件系统虚拟化。 您必须确保没有setuid可执行文件,不安全的应用程序,库,悬空的无主符号链接等,如果攻击者可能破坏绑定,他们将需要冲刷虚拟文件系统来缓冲溢出,使用文件描述符,或者以某种其他方式妥协通常通过特权升级或将他或她的有效负载注入到基本系统中的chroot – 逃脱监狱内的东西。

如果发生这种情况,通常会导致错误更新,零日漏洞利用或惯用的人为错误

为什么仍然使用chroot,而不是完整的系统虚拟化

考虑这种情况:您正在运行一个虚拟专用服务器,主机节点运行OpenVZ。 你根本无法运行任何在内核级别上工作的东西。 这也意味着您不能使用操作系统虚拟化来分离进程,并提供额外的安全性。 因此,你必须使用chroot来达到这个目的。

而且,无论现有资源如何,chroot都可以在任何系统上持续运行。 简而言之,它具有任何虚拟化types的最小开销。 这意味着它在许多低端机型上仍然很重要。

考虑另一种情况:你有一个虚拟化环境中运行的Apache。 你想分开每个用户。 提供一个通过chroot添加到apache(mod_chroot,mod_security等)的虚拟化文件系统将是确保最终用户之间最大隐私的最佳select。 这也有助于防止英特尔收集,并提供另一层安全。

简而言之, 分层实施安全是非常重要的。 Chroot可能是其中之一。 不是每个人,每个系统都有访问内核的好处,因此,chroot STILL有用的。 有各种各样的应用程序,其中完整的系统virtuaisation本质上是矫枉过正。

回答你的问题

我不特别使用CentOS,但是我知道Bind现在在操作之前放弃它的特权。 然而,我认为绑定是由于它的攻击媒介和潜在的漏洞的历史chrooted。

也…自动chroot这个应用程序更有意义,因为不是每个人都可以访问完整的系统/操作系统级虚拟化。 这反过来又在理论上帮助CentOS用户群提供安全性:

操作系统提供者根本不会假设每个人都在运行相同的系统。 这样,他们可以帮助提供一个额外的安全层…

这么多的应用程序使用它的原因,为什么显然你的操作系统默认情况下:因为它被用来作为一个安全function,它可以工作。 如前所述,经过精心的准备,潜在的攻击者必须克服的另一个障碍 – 大多数情况下,只限制对chroot监狱的损害。

这部分是由于历史原因,当老版本的绑定有严重,频繁的安全漏洞。 我并没有真正跟上这个问题,但我敢打赌,自从糟糕的日子以来,情况有了很大的改善。

另一个更实际的原因是,它通常部署在一个面向互联网的angular色中,因此面对更多的攻击,探测和普遍的恶作剧。

因此,在安全问题上经常是经验法则:安全性高于遗憾,特别是因为裁员的努力相对较less。