我们必须告知 syslogd syslog 守护进程程序 关于新的 chroot 服务,因为通常,进程通过以下路径与 syslogd 通信/dev/log。由于 chroot 监狱的缘故,这将不可能实现,因此需要告知 syslogd 监听/chroot/named/dev/log而不是默认的dev/log。为此,编辑 syslog 启动脚本文件以指定额外的监听位置。
编辑syslog脚本文件 vi +24/etc/rc.d/init.d/syslog并更改以下行
daemon syslogd -m 0 |
daemon syslogd -m 0 -a /chroot/named/dev/log |
默认的 ISC BIND/DNS named 脚本文件启动守护进程named在 chroot 监狱之外。我们必须更改它以从 chroot 监狱启动 named。编辑 named 脚本文件 vi/etc/rc.d/init.d/named并更改以下行
[ -f /usr/sbin/named ] || exit 0 |
[ -f /chroot/named/usr/sbin/named ] || exit 0 |
[ -f /etc/named.conf ] || exit 0 |
[ -f /chroot/named/etc/named.conf ] || exit 0 |
daemon named |
daemon /chroot/named/usr/sbin/named -t /chroot/named/ -unamed -gnamed |
选项告诉named使用新的 chroot 环境启动。
选项指定要运行的用户。
选项指定要运行的组。
在 BIND 8.2 版本中,ISC BIND/DNS 软件的 ndc 命令变成了一个二进制文件;之前,它是一个脚本文件,这使得附带的 ndc 在此设置中无用。为了修复它,必须从源代码重新编译 ISC BIND/DNS 包。为此,在 ISC BIND/DNS 源代码目录的顶层。
对于 ndc 实用程序
[root@deep] /# cp bind-src.tar.gz /vat/tmp [root@deep] /# cd /var/tmp/ [root@deep ]/tmp# tar xzpf bind-src.tar.gz [root@deep ]/tmp# cd src [root@deep ]/src# cp port/linux/Makefile.set port/linux/Makefile.set-orig |
编辑Makefile.set 文件,viport/linux/Makefile.set进行下面列出的更改
'CC=egcs -D_GNU_SOURCE' 'CDEBUG=-O9 -funroll-loops -ffast-math -malign-double -mcpu=pentiumpro -march=pentiumpro -fomit-frame-pointer -fno-exceptions -g 'DESTBIN=/usr/bin' 'DESTSBIN=/chroot/named/usr/sbin' 'DESTEXEC=/chroot/named/usr/sbin' 'DESTMAN=/usr/man' 'DESTHELP=/usr/lib' 'DESTETC=/etc' 'DESTRUN=/chroot/named/var/run' 'DESTLIB=/usr/lib/bind/lib' 'DESTINC=/usr/lib/bind/include' 'LEX=flex -8 -I' 'YACC=yacc -d' 'SYSLIBS=-lfl' 'INSTALL=install' 'MANDIR=man' 'MANROFF=cat' 'CATEXT=$$N' 'PS=ps p' 'AR=ar crus' 'RANLIB=:' |
我们之前使用的 Makefile 和这个 Makefile 之间的区别在于我们修改了DESTSBIN=, DESTEXEC=,以及DESTRUN=行以指向 BIND/DNS 的 chroot 目录。通过此修改,ndc 程序知道在哪里找到named.
[root@deep ]/src# make clean [root@deep ]/src# make [root@deep ]/src# cp bin/ndc/ndc /usr/sbin/ [root@deep ]/src# cp: overwrite `/usr/sbin/ndc'? y [root@deep ]/src# strip /usr/sbin/ndc |