由于天缘最近使用的比较多的是Red Hat 操作系统,而且自己也是在一台Red Hat 9 下面配置好Bind 9的,因此在下面的例子中就以Red Hat AS3为配置平台进行介绍。天缘所在单位的服务DNS是solaris操作系统,因此写shell的时候,我争取做到对Solaris也通用。由于各种因素,我没能亲自在Solaris上进行测试。下面的安装过程对Red Hat和其他unix操作系统都没问题,最后附上的自动安装的shell脚本我只在Red Hat下测试成功,对Solaris大概也基本上顾及到了,如果大家在实际使用那个脚本的时候发现在Solaris下使用存在问题,请及时反馈到此文的留言中,以使我及时更正,方便其他读者朋友。
首先,在开始以前,让我们解释一下标题中出现的chroot 和 bind这两个词。 先是chroot,事实上,在很多英文文章中,称它为”jail”( 监牢, 拘留所, 监狱)。那么什么是”Jail”呢?简单来说,就是把一个事物限制到某个范围。大家都知道,有时候由于一个应用程序的bug、漏洞等问题,会导致该程序被攻击者控制,取得相应用户的权限,进而取得系统管理员级别的权限。例如Windows用户对一些iis漏洞导致系统最高权限落入攻击者之手的事情肯定时有耳闻。不管什么程序,都可能有bug/漏洞,为了防止这样系统中某程序的漏洞导致系统最高权限被攻击者窃取的事件发生,就需要限制该程序的权限。
所谓的限制,并不是不让该程序运行,而是对程序运行时候可以使用的系统资源、用户权限、所在目录进行严格控制。这样,在该程序被他人非法控制后,能具有的权限也相当有限,对系统也不会造成更大的危害。举个形象的例子,架过ftp 服务器的朋友都知道,用户凭借自己的用户名/密码可以进入到自己的空间内进行上传/下载/添加删除目录等操作权限,而对其他用户的目录和系统的其他目录无法进行任何操作(当然,这些权限是管理者合法授权的),这个就可以看做是一个Jail,把ftp用户限制在自己的目录里。在计算机界术语中,我们把这种对程序的Jail,特称为”chroot”。因此题目中的chroot bind,大家可以理解成“权限受严格限制的bind”。
值得一提的是,chroot的程序并不能说是程序本身更安全了,它跟没有chroot的程序比较,依然有着同样多的bug/漏洞,依然会被攻击者利用这些bug/漏洞进行攻击并得逞。那么我们辛苦chroot是为了什么呢?是为了把损失降低到最小。打个比方,购买人生保险并不能保你一生平安,但是可以在你遇到麻烦的时候让损失少一些。我们的chroot程序也是同样的道理,当攻击者取得了该程序的权限的时候,由于程序本身的权限被严格限制了,因此攻击者无法造成更大的破坏,也无法夺取操作系统的最高权限。DNS 服务器由于是作域名解析之用,需要应付来自各地的很多访问,且一般不限制来访ip,因此安全隐患和被攻击的可能性相当大。做一个DNS服务器的资料网络上到处可寻,而作为网络管理员,我们需要的除了域名解析,还有“安全”(天缘在以前的网管笔记中提到过,“安全是一种意识”,在做任何事情的时候都提醒自己注意安全,是一个称职的网络管理者所应该具备的)!
1、安装Bind 9
虽然我所用的Red Hat AS3 中有rpm包,但是为了方便其他操作系统的朋友,我们还是从源代码包方式安装。首先从ISC公司的主页(http://www.isc.org/products/BIND/)下Bind 9 软件包。
wget ftp://ftp.isc.org/isc/bind9/9.2.3/bind-9.2.3.tar.gz
(我没下最新的,下的是稳定版,您可以根据自己的需要选取)
接着开始解压缩(为描述简单,以下操作如无特殊声明,都是以root权限进行)
tar vzxf bind-9.2.3.tar.gz
卸载Red Hat 中原有的Bind,一共有三个rpm包
rpm -e bind bind-utils caching-nameserver
进入该目录开始编译安装
./configure --prefix=/usr/local --disable-ipv6 --disable-threads
#因为ipv6和线程方式我用不到就去掉了,把Bind 9安装到/usr/local下
make;make install
到此Bind 9已经安装完成了,普通的 DNS Server 到此就安装结束了,而对我们的chroot 而言才刚开始呢。
2、构建chroot 目录环境
a.创建Bind 工作目录/chroot/named及下属工作目录
rm -rf /chroot/named #删除原来的旧目录,之所以加这句是我写shell的时候调试方便
mkdir -p /chroot/named
cd /chroot/named
mkdir dev (虚拟/dev)
mkdir etc (虚拟/etc)
mkdir logs (存放日志)
mkdir -p var/run (将来会在这下面放一个named.pid文件)
b.建立Bind的组和用户named
groupadd named
useradd -g named -d /chroot/named -s /bin/true named
pASswd -l named #-l ,Lock,表示锁定用户
c.创建虚拟设备(dev),日志记录的时候有的选项可能用到它们。在默认情况下,是使用/dev目录下的文件,但是由于我们需要把DNS限制到一个目录,所以必须完全把/dev下用到的文件(或者说设备)模拟过来才可以。
ls -lL /dev/zero /dev/null /dev/random
看到类似
crw-rw-rw- 1 root root 1, 3 2003-09-15 /dev/null
crw-r--r-- 1 root root 1, 8 2003-09-15 /dev/random
crw-rw-rw- 1 root root 1, 5 2003-09-15 /dev/zero
这样的,将其中的1,3这样的数字记录下来,这表示主设备号和次设备号(一般来说主设备号用来区分设备的种类;次设备号则是为了作唯一性区分,标明不同属性——注意,在unix系统中是把设备也当作文件来对待的),在redhat 9下,ls加不加-L参数都无所谓,但是在Solaris下则一定要加上才可以显示。
mknod dev/null c 1 3
mknod dev/zero c 1 5
mknod dev/random c 1 8
d.复制时钟文件到我们chroot的etc下,Linux 的时钟设置文件为:/etc/localtime ,实际上这个文件是 /usr/share/zoneinfo 目录下对应文件的符号连接。(假设我们所处的地区位于上海,那么只要运行以下的命令就可以设置时区了。 ln -sf /usr/share/zoneinfo/ASia/Shanghai /etc/localtime;注意在天缘用的solaris 2.6中并没有此文件,而是该用/usr/share/lib/zoneinfo/GB)
每次输入很长的命令来进行重新启动,停止DNS实在不是明智的做法,写个shell脚本来帮助我们吧。
vi /etc/init.d/named cASe "$1" in exit 0 |
然后当然是 chmod a x /etc/init.d/named
接下来就是对各个启动模式做符号连接了Red Hat 下:
ln -s /etc/init.d/named /etc/rc2.d/S45named Solaris 2.6 下: |
到这里,我们的chroot bind 9 可以说真正正式完工!!
在最后,我付上一个在Red Hat AS3 上调试通过的自动安装chroot bind 9的安装包(已内含bind 9.2.3),如要在Solaris 上安装,可能需要自行修改一些地方,我在shell中注明了在Solaris下可能有错的地方。希望这个安装包可以方便各位和我自己在某些紧急情形下的时候用最短的时间搞定一个chroot DNS!
- 上一篇:配置防火墙环境中DNS服务器
- 下一篇:如何才能注册域名-网址注册