所谓“监牢”就是指通过chroot机制来更改某个软件运行时所能看到的根目录,即将某软件运行限制在指定目录中,保证该软件只能对该目录及其子目录的文件有所动作,从而保证整个服务器的安全。这样即使出现被破坏或被侵入,所受的损伤也较小。将软件chroot化的一个问题是该软件运行时需要的所有程序、配置文件和库文件都必须事先安装到chroot目录中,通常称这个目录为chroot jail(chroot“监牢”)。如果要在“监牢”中运行dns,而事实上根本看不到文件系统中那个真正的目录。因此需要事先创建目录,并将dns文件复制到其中。图-1中的例子,说明了 牢监 中的环境状态

图 1 “监牢”环境示意图
以下是具体步骤:
为 DNS Server 建立监牢目录
建立 /chroot/dns 目录
# mkdir /chroot/dns
建立一个空壳目录架构
# cd /chroot/dns
# mkdir -p etc/named var/run
复制 /etc/named.conf 到监牢中
# cp /etc/named.conf /chroot/dns/etc/named.conf
复制 /etc/named 目录中的文件到 Jail 监牢中
# cp /etc/named/* /chroot/dns/etc/named/
更改 /chroot/dns/var/run 目录的权限
# chmod 770 /chroot/dns/var/run
# chown noaccess:root /chroot/dns/var/run
为 Solaris 10 建立一个新服务
原本的 DNS Server Service 名称为 dns/server。
建立新服务 后,以后要启动旧版本的 DNS服务时,不能只启动 dns/server,而要改为 dns/server:default。
新 DNS Server Chroot 服务 名称为, dns/server:chroot
开始建立新 服务
# cd /var/svc/manifest/network/dns
# cp server.xml server-chroot.xml
编辑 server-chroot.xml
寻找
<instance name='default' enabled='false' >
改为
<instance name='chroot' enabled='false' >
寻找
exec='/usr/sbin/named'
改为
exec='/usr/sbin/named -t /chroot/dns'
寻找
privileges='basic,!proc_session,!proc_info,!file_link_any,net_privaddr,file_dac_read,file_dac_search,sys_resource' />
改为
privileges='basic,!proc_session,!proc_info,!file_link_any,net_privaddr,priv_proc_chroot,priv_file_dac_read,file_dac_search,sys_resource' />
寻找
user='root'
改为
user='noaccess'
保存文件退出。
停止原来的 DNS服务
# svcadm disable dns/server:default
加入新的 DNS Server Chroot service
# svccfg import server-chroot.xml
启动 chroot DNS service
# svcadm enable dns/server:chroot
# svcs dns/server
STATE STIME FMRI
disabled 6:21:03 svc:/network/dns/server:default
online 6:27:01 svc:/network/dns/server:chroot
Bind 9 DNS Server 现在已经能够在“监牢” 环境中运行