我应该提一下,如果您已经安装了 BIND,例如通过 RPM 包,那么在安装新的 BIND 之前,您可能应该先将其移除。在 Red Hat 系统上,这可能意味着移除 bind
和 bind-utils
包,以及可能存在的 bind-devel
和 caching-nameserver
包。
您可能希望在执行此操作之前保存一份 init 脚本的副本(例如,/etc/rc.d/init.d/named
),如果有的话;稍后会很有用。
这是简单的部分 :-) 。只需运行 make install
,让它为您处理即可。之后您可能想要 chmod 000 /usr/local/sbin/named
,以确保您不会意外运行非 chroot 版本的 BIND。(如果您没有像我建议的那样告诉它安装到 /usr/local/sbin
中,那么路径是 /usr/sbin/named
。)
软件包中只有两个部分必须位于 chroot jail 内部:主要的 named
守护进程本身,以及 named-xfer
,它用于区域传输。您可以直接从源代码树中复制它们
# cp src/bin/named/named /chroot/named/bin
# cp src/bin/named-xfer/named-xfer /chroot/named/bin
如果您有来自发行版的现有 init 脚本,最好的做法可能是简单地修改它以运行 /chroot/named/bin/named
,并带有适当的开关。开关是... (请击鼓...)
-u named
,它告诉 BIND 以用户 named
而不是 root
身份运行。-g named
,也让 BIND 在组 named
下运行,而不是 root
或 wheel
。-t /chroot/named
,它告诉 BIND 将自身 chroot 到我们设置的 jail 中。以下是我在 Red Hat 6.0 系统上使用的 init 脚本。正如您所看到的,它几乎与 Red Hat 发行版本的方式完全相同。我还修改了 ndc restart
命令,以便它可以正确地重启服务器,并保持 chroot 状态。您也应该在您的 init 脚本中执行相同的操作,即使您不复制这个脚本。
#!/bin/sh
#
# named This shell script takes care of starting and stopping
# named (BIND DNS server).
#
# chkconfig: 345 55 45
# description: named (BIND) is a Domain Name Server (DNS) \
# that is used to resolve host names to IP addresses.
# probe: true
# Source function library.
. /etc/rc.d/init.d/functions
# Source networking configuration.
. /etc/sysconfig/network
# Check that networking is up.
[ ${NETWORKING} = "no" ] && exit 0
[ -f /chroot/named/bin/named ] || exit 0
[ -f /chroot/named/etc/named.conf ] || exit 0
# See how we were called.
case "$1" in
start)
# Start daemons.
echo -n "Starting named: "
daemon /chroot/named/bin/named -u named -g named -t /chroot/named
echo
touch /var/lock/subsys/named
;;
stop)
# Stop daemons.
echo -n "Shutting down named: "
killproc named
rm -f /var/lock/subsys/named
echo
;;
status)
/usr/local/sbin/ndc status
exit $?
;;
restart)
/usr/local/sbin/ndc -n /chroot/named/bin/named "restart -u named -g named -t /chroot/named"
exit $?
;;
reload)
/usr/local/sbin/ndc reload
exit $?
;;
probe)
# named knows how to reload intelligently; we don't want linuxconf
# to offer to restart every time
/usr/local/sbin/ndc reload >/dev/null 2>&1 || echo start
exit 0
;;
*)
echo "Usage: named {start|stop|status|restart}"
exit 1
esac
exit 0
在 Caldera OpenLinux 系统上,您只需修改顶部定义的变量,它显然会为您处理其余的事情
NAME=named
DAEMON=/chroot/named/bin/$NAME
OPTIONS="-t /chroot/named -u named -g named"
您还需要在 named.conf
中添加或更改一些选项,以保持各种目录的清晰。特别是,您应该在 options
部分中添加(或更改,如果您已经有)以下指令
directory "/etc/namedb";
pid-file "/var/run/named.pid";
named-xfer "/bin/named-xfer";
由于此文件是由 named
守护进程读取的,因此所有路径当然都是相对于 chroot jail 的。有些人还报告说必须在他们的 named.conf
中添加一个额外的块才能使 ndc
正常工作
controls {
unix "/var/run/ndc" perm 0600 owner 0 group 0;
};