一.下载安装并编译安装Bind-9.3.3
### 下载源程序包
cd /usr/local/src
wget http://ftp.isc.org/isc/bind9/9.3.3/bind-9.3.3.tar.gz
### 解压
tar -zxvf bind-9.3.3.tar.gz
cd bind-9.3.3
#编译并安装
./configure --disable-ipv6 --disable-threads
make
make install
二.配置BIND的CHROOT目录结构
为了方便管理自己的业务数据,于是在“/usr”下建立自己的目录如“jinkey”,可以根据自己的实际情况进行修改。
mkdir -p /usr/jinkey/named
cd /usr/jinkey/named
### 创建BIND数据的子目录
mkdir dev
mkdir etc
mkdir logs
mkdir -p var/run
三.建立专用的用户与用户组
groupadd named
### 创建“named”用户,并指定用户主目录为“/usr/jinkey/named”
useradd -g named -d /usr/jinkey/named -s /bin/true named
### 锁定用户
passwd -l named
四.创建虚拟设备并复制时钟文件
cd /usr/jinkey/named
mknod dev/null c 1 3
mknod dev/random c 1 8
mknod dev/zero c 1 5
### 复制时钟文件到我们chroot的etc下
cp /etc/localtime etc/
五.生成配置文件
cd /usr/jinkey/named
rndc-confgen > etc/rndc.conf
cd etc
tail -10 rndc.conf | head -9 | sed s/#\ //g > named.conf
此时可以查看生成的named.conf文件
#vi named.conf
key "rndc-key" {
algorithm hmac-md5;
secret "gedof5uLyv9DGSOrQeWACw==";
};
controls {
inet 127.0.0.1 port 953
allow { 127.0.0.1; } keys { "rndc-key"; };
};
对配置文件进行符号链接
ln -s /usr/jinkey/named/etc/named.conf /etc/named.conf
ln -s /usr/jinkey/named/etc/rndc.conf /etc/rndc.conf
六.设置文件夹权限
其实这一步,才是我们作任何chroot 服务真正精华的地方。如何把权限划分得准确,不至于无法执行服务,也不能大到会威胁到其他程序的安全,实在是一个需要仔细考虑的问题。
A. 由于我们的目的是达到让bind程序以named用户身份运行,所以必须让它具有读配置,无写配置文件的权限,而且最好其他程序也不能改变我们的配置文件,只有root能改,named用户能读。为了满足这个要求的,自然就想到把文件的拥有者改为root,组用户设置为named,然后再慢慢仔细划分权限。
cd /usr/jinkey/named
chown -R root.named ./
B.接下来想想各个文件、子目录的权限。Root组对 文件需要读写执行权限,named组对文件需要读取权限,而对下属子目录而言,则必须具有执行权限才能进入其中。因此作以下权限设置。
# 对文件赋予root 读写权限,赋予组named读权限
find . -type f -print | xargs chmod u=rw,og=r
# 对目录赋予roo读写执行权限,赋予组named读执行权限(这里的执行是为了能进入到下级目录中
find . -type d -print | xargs chmod u=rwx,og=rx
# 对etc目录下的配置文件,能不让其他用户读取当然是最好的,因此设置
chmod o= etc/*.conf
接着是为var/目录设置权限(在这里会生成进程守护文件named.pid—我们在named.conf中设置了的)
#这里可以把named抛弃
chown root.root var/
#root可以读写设置,其他用户能执行就行,其实我们之所以做一个chroot DNS需要大费周折地单独设置目录,就是为了不让named具有访问真正的/var的权限。
chmod u=rwx,og=x var/
#因为在run下面的需要由named身份来写named.pid文件,所以需要将组改为named好限制权限
chown root.named var/run/
#用户/组具有读写执行权限,其他用户能读/执行就可以了,这样的设置,主要是为了方便我们后面写shell来判断DNS目前的状态。
chmod ug=rwx,o=rx var/run/
#日志目录
chown root.named logs/
#日志允许其他人看比较好,方便以后挂第三方程序
chmod ug=rwx,o=rx logs/
七.测试运行BIND
/usr/local/sbin/named -t /usr/jinkey/named -u named -c /etc/named.conf
ps -C named
八.建立named服务启动脚本
cd /usr/jinkey/named
vi named.start
输入以下内容,并保存:
#多cpu的记得加个 "-n " 参数,才能启用多cpu哦,我也是在别的地方看到的
cd /usr/jinkey/named
#确保除错的debug文件能够以named身份写入
touch named.run #建立该文件
chown named.named named.run #设置文件拥有者为named.named
chmod ug=rw,o=r named.run #权限为664
#以named身份,在/usr/jinkey/named目录中以/etc/named.conf为配置文件执行named程序
#这里的/etc/named.conf是我们用ln –s连过去的,参看前文
/usr/local/sbin/named -t /usr/jinkey/named -u named -c /etc/named.conf