这是 Chroot-BIND HOWTO;请参阅何处?以获取包含最新副本的主站点。本文档假设您已经知道如何配置和使用 BIND(伯克利互联网域名)。如果不是,我建议您先阅读 DNS HOWTO。本文档还假设您对在类 UNIX 系统上编译和安装软件有基本的熟悉程度。
本文档介绍了一些在安装 BIND 时可以采取的额外安全预防措施。它解释了如何配置 BIND,使其驻留在“chroot 监狱”中,这意味着它无法查看或访问其自身小目录树之外的文件。我们还将配置它以非 root 用户身份运行。
chroot 背后的想法非常简单。当您在 chroot 监狱中运行 BIND(或任何其他进程)时,该进程根本无法看到监狱外部文件系统的任何部分。例如,在本文档中,我们将设置 BIND 以 chroot 到目录 /chroot/named
。嗯,对于 BIND 来说,这个目录的内容将显示为 /
,即根目录。它无法访问此目录之外的任何内容。如果您曾经使用 ftp
登录到公共系统,您可能以前遇到过 chroot 监狱。
由于使用 BIND 9 时 chroot 过程要简单得多,我已经开始稍微扩展本文档,以包含更多关于保护 BIND 安装的通用技巧。然而,本文档不是(也不打算成为)保护 BIND 的完整参考。如果您只按照本文档中概述的内容进行操作,您还没有完成对名称服务器的保护!
在 chroot 监狱中运行 BIND 背后的想法是限制任何恶意个人通过利用 BIND 中的漏洞可能获得的访问权限。出于同样的原因,我们以非 root 用户身份运行 BIND。
这应被视为对正常安全预防措施(运行最新版本、使用访问控制等)的补充,当然不能替代它们。
如果您对 DNS 安全感兴趣,您可能还会对其他一些产品感兴趣。使用 StackGuard 构建 BIND 可能是获得更多保护的好主意。使用它很简单;就像使用普通的 gcc 一样。此外,DNScache 是 BIND 的安全替代品,由 Dan Bernstein 编写。Dan 是 qmail 的作者,DNScache 似乎遵循类似的理念。
本文档的最新版本始终可从 Regina, Sask. 的 Linux/开源用户网站 http://www.losurs.org/docs/howto/Chroot-BIND.html 获取。
现在有本文档的日语翻译版本,由 Nakano Takeo nakano at apm.seikei.ac.jp
维护。该版本可在 http://www.linux.or.jp/JF/JFdocs/Chroot-BIND-HOWTO.html 获取。
BIND 可从 互联网软件联盟 的 http://www.isc.org/bind.html 获取。截至本文撰写之时,BIND 9 的当前版本为 9.2.0。BIND 9 已经发布一段时间了,许多人正在生产环境中使用它。然而,一些更保守的人仍然喜欢使用 BIND 8。如果您是这样的人,请参阅我的 Chroot-BIND8 HOWTO(可从同一位置获取),了解有关 chroot 的详细信息,但请注意,BIND 8 的 chroot 要麻烦得多。
请记住,许多早期版本的 BIND 中都存在已知的安全漏洞,因此请务必确保您运行的是最新版本!
我根据自己在 chroot 环境中设置 BIND 的经验编写了本文档。就我而言,我已经拥有以 Linux 发行版附带的软件包形式存在的 BIND 安装。我假设你们中的大多数人可能也处于相同的情况,并且将简单地从您现有的 BIND 安装中传输和修改配置文件,然后在安装新软件包之前删除旧软件包。不过,暂时不要删除旧软件包;我们可能首先需要其中的一些文件。
如果您的情況并非如此,您仍然应该能够按照本文档进行操作。唯一的区别是,当我提到复制现有文件时,您首先必须自己创建它。DNS HOWTO 可能会对此有所帮助。
这些步骤在我的系统上对我有用;您的结果可能会有所不同。这只是一种处理方法;还有其他方法可以设置相同的东西(尽管总体方法将是相同的)。只是碰巧这是我尝试的第一个有效的方法,所以我把它写下来了。
我迄今为止的 BIND 经验是在 Linux 服务器上安装。但是,本文档中的大多数说明也应很容易适用于其他 UNIX 版本,我将尝试指出我所知道的差异。我还收到了来自使用其他发行版和其他平台的人的建议,并且我已尽力在可能的情况下纳入他们的评论。
如果您运行的是 Linux,您需要确保在尝试此操作之前运行的是 2.4 内核。-u
开关(以非 root 用户身份运行)需要这个较新的内核。