21.7. syslog 守护进程

我们必须告知 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并更改以下行

  1.  [ -f /usr/sbin/named ] || exit 0
     
    改为读取
     [ -f /chroot/named/usr/sbin/named ] || exit 0
     

  2.  [ -f /etc/named.conf ] || exit 0
     
    改为读取
     [ -f /chroot/named/etc/named.conf ] || exit 0
     

  3.  daemon named
     
    改为读取
     daemon /chroot/named/usr/sbin/named -t /chroot/named/ -unamed -gnamed
     

-t

选项告诉named使用新的 chroot 环境启动。

-u

选项指定要运行的用户。

-g

选项指定要运行的组。

BIND 8.2 版本中,ISC BIND/DNS 软件的 ndc 命令变成了一个二进制文件;之前,它是一个脚本文件,这使得附带的 ndc 在此设置中无用。为了修复它,必须从源代码重新编译 ISC BIND/DNS 包。为此,在 ISC BIND/DNS 源代码目录的顶层。

  1. 对于 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
     

  2. 编辑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=:'
      

  3. 我们之前使用的 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 
     
    我们构建二进制文件,然后将 ndc 程序的输出复制到/usr/sbin并覆盖旧的。我们不要忘记剥离新的 ndc 二进制文件以获得更好的性能。