slackware 13.1系统自带的bind版本为bind-9.4.3-P4,如果是在生产环境中搭建DNS服务器,为了安全考虑,强烈建议进行软件包升级。目前在slackware 13.1上最新的稳定版本是bind-9.4.3_P5。


更新软件包列表:
root@slackware:~# slackpkg update

升级bind:
root@slackware:~# slackpkg upgrade bind

好了,等待升级安装结后,你将得到最新版本的bind。 如果你在安装slackware 13.1的时候,并没有选择安装bind,你可以使用下面命令进行安装。
root@slackware:~# slackpkg install bind

接下来才是本篇文章的核心部分:Chroot 环境
首先,创建用户和组:
root@slackware:~# groupadd named
root@slackware:~# useradd -g named -d /var/named -s /bin/false named

第二,配置你的chroot目录。
在此假定你使用“/chroot/named”目录。
root@slackware:~# mkdir -p /chroot/named/{dev,etc,var}

添加bind需要访问的一些设备:
root@slackware:~# mknod /chroot/named/dev/null c 1 3
root@slackware:~# mknod /chroot/named/dev/random c 1 8
root@slackware:~# mknod /chroot/named/dev/zero c 1 5
root@slackware:~# chmod a+w /chroot/named/dev/*

你还需要拷贝/etc/localtime 和 /etc/named.conf 到chroot目录:
root@slackware:~# cp /etc/localtime /chroot/named/etc
root@slackware:~# cp /etc/named.conf /chroot/named/etc

然后开始配置var目录:
root@slackware:~# mkdir -p /chroot/named/var/{log,run,named}
root@slackware:~# mkdir /chroot/named/var/run/named
root@slackware:~# chown named.named /chroot/named/var/run/named
root@slackware:~# chown named.named /chroot/named/var/{named,log}

假定你已经有一个可以工作的DNS服务器,现在拷贝你的zone文件到chroot目录:
root@slackware:~# cp /var/named/caching-example/* /chroot/named/var/named

关于使用bind的日志功能:
你可以加入以下内容到你的named.conf 配置文件中(语法及意义就不再叙述,感兴趣的朋友可以参考named. conf的联机帮助文档)
logging {
       channel "bind_log" {
             file "/var/log/named.log" versions 5 size 100k;
            severity info;
            print-time yes;
            print-severity yes;
            print-category yes;
          };
     category default {
            bind_log;
         };
};


创建配置rndc.conf:
root@slackware:~# rndc-confgen -r /dev/urandom > /chroot/named/etc/rndc.conf
把rndc.conf中
key "rndc-key" {
algorithm hmac-md5;
secret "U4jzup9pqIelfs7hDyl5zw==";
};
上述部分写进/chroot/named/etc/named.conf中。
<注>:在你生成的rndc.conf中上述 secret "……" 部分会不同,别忘记去掉每行最前面的注释符号“#”。


然后在/etc目录中生成一个到/chroot/named/etc/rndc.conf符号连接:
root@slackware:~# ln -s /chroot/named/etc/rndc.conf /etc

倒数第二步,修改bind的启动脚本/etc/rc.d/rc.bind:
找到下面以×××背景显色的部分,
bind_start() {
if [ -x /usr/sbin/named ]; then
echo "Starting BIND: /usr/sbin/named"
/usr/sbin/named
sleep 1
fi
……
}
修改为 “/usr/sbin/named -u named -t /chroot/named -c /etc/named.conf”

最后一步,用脚本启动bind服务:
root@slackware:~# /etc/rc.d/rc.bind start
并检查bind是不是以chroot的方式运行:
root@slackware:~# ls -l /proc/`pidof named`/root
lrwxrwxrwx 1 named named 0 2010-09-24 13:52 /proc/2948/root -> /chroot/named/
可以断定bind已经以chroot环境运行了。