chroot jail 的主要优点是,它可以将 DNS 守护程序能够访问的文件系统部分限制在 jail 的根目录中。 此外,由于 jail 只需要支持 DNS,因此 jail 中可用的与 ISC BIND/DNS 相关的程序可以非常有限。 最重要的是,不需要 setuid-root 程序,这些程序可能被用来获取 root 访问权限并逃脱 jail。
: named 二进制程序必须位于您的PATH环境变量中列出的目录中,这样才能工作。 在本文档的其余部分,我将假设您的原始 named 程序的路径是/usr/sbin/named.
以下是在 chroot jail 中运行 ISC BIND/DNS 软件的必要步骤
我们必须找到 named 的共享库依赖项,named 是 DNS 守护程序。 这些稍后需要复制到 chroot jail 中。
要查找 named 的共享库依赖项,请执行以下命令
[root@deep] /# ldd /usr/sbin/named libc.so.6 => /lib/libc.so.6 (0x40017000) /lib/ld-linux.so.2 => /lib/ld-linux.so.2 (0x40000000) |
记下上面列出的文件; 在我们后面的步骤中您将需要它们。
现在我们必须设置 chroot 环境,并创建 jail 的根目录。 我们选择了/chroot/named因为我们想将其放在其自身独立的文件系统上,以防止文件系统攻击。 在我们 Linux 安装过程的早期,我们创建了一个特殊的分区/chroot用于此目的。
[root@deep] /# /etc/rc.d/init.d/named stop |
Shutting down named: [ OK ] |
[root@deep] /# mkdir -p /chroot/named |
接下来,按如下方式创建其余目录
[root@deep] /# mkdir /chroot/named/dev [root@deep] /# mkdir /chroot/named/lib [root@deep] /# mkdir /chroot/named/etc [root@deep] /# mkdir -p /chroot/named/usr/sbin [root@deep] /# mkdir -p /chroot/named/var/run [root@deep] /# mkdir /chroot/named/var/named |
现在将主配置文件、区域文件、named 和 named-xfer 程序复制到 chroot jail 目录中的适当位置
[root@deep] /# cp /etc/named.conf /chroot/named/etc/ [root@deep] /# cd /var/named ; cp -a . /chroot/named/var/named/ [root@deep] /# mknod /chroot/named/dev/null c 1 3 [root@deep] /# chmod 666 /chroot/named/dev/null [root@deep] /# cp /usr/sbin/named /chroot/named/usr/sbin/ [root@deep] /# cp /usr/sbin/named-xfer /chroot/named/usr/sbin/ |
: 的所有者/chroot/named/var/named目录和此目录中的所有文件必须是 named 进程名称在从服务器下,并且只有从服务器,否则您将无法进行区域传输。
为了使named目录及其所有文件归 named 进程名称在从服务器下所有,请使用命令
[root@deep] /# chown -R named.named /chroot/named/var/named/ |
将上面标识的共享库复制到 chrooted lib 目录
[root@deep] /# cp /lib/libc.so.6 /chroot/named/lib/ [root@deep] /# cp /lib/ld-linux.so.2 /chroot/named/lib/ |
复制localtime和nsswitch.conf文件到 chrootedetc目录,以便日志条目能够正确地针对您的本地时区进行调整
[root@deep] /# cp /etc/localtime /chroot/named/etc/ [root@deep] /# cp /etc/nsswitch.conf /chroot/named/etc/ |
我们必须设置一些文件在/chroot/named/etc目录下,并启用 immutable bit 以获得更好的安全性
设置 immutable bit 在nsswitch.conf文件
[root@deep] /# cd /chroot/named/etc/ [root@deep etc]# chattr +i nsswitch.conf |
设置 immutable bit 在named.conf文件
[root@deep] /# cd /chroot/named/etc/ [root@deep etc]# chattr +i named.conf |
添加新的 UID 和新的 GID 以运行守护程序named如果尚未设置。 这很重要,因为以 root 身份运行它会破坏 jail 的目的,并且使用系统上已存在的不同用户 ID 可能会允许您的服务访问彼此的资源。 检查/etc/passwd和/etc/group文件以查找可用的空闲 UID/GID 号码。 在我们的示例中,我们将使用数字 53 和名称 named。
[root@deep] /#useradd -c DNS Server -u 53 -s /bin/false -r -d /chroot/named named 2>/dev/null || : |