让dhcpd 运行在监牢中

1. 在指定网络接口启动DHCP服务器  
如果你的Linux系统连接了不止一个网络界面,但是你只想让 DHCP 服务器启动其中之一,你可以配置 DHCP 服务器只在那个设备上启动。在 /etc/sysconfig/dhcpd 中,把界面的名称添加到 DHCPDARGS 的列表中:  
DHCPDARGS=eth0  
或者直接使用命令:  
Echo “DHCPDARGS=eth0”>> /etc/ sysconfig/dhcpd  
这样对于带有两个网卡的防火墙机器,更加安全:一个网卡可以被配置成 DHCP 客户来从互联网上检索 IP 地址;另一个网卡可以被用作防火墙之后的内部网络的 DHCP 服务器。仅指定连接到内部网络的网卡使系统更加安全,因为用户无法通过互联网来连接它的守护进程。  
2. 让DHCP服务器在监牢中运行  
所谓“监牢”就是指通过chroot机制来更改某个软件运行时所能看到的根目录,即将某软件运行限制在指定目录中,保证该软件只能对该目录及其子目录的文件有所动作,从而保证整个服务器的安全。这样即使出现被破坏或被侵入,所受的损伤也较小。  
将软件chroot化的一个问题是该软件运行时需要的所有程序、配置文件和库文件都必须事先安装到chroot目录中,通常称这个目录为chroot jail(chroot“监牢”)。如果要在“监牢”中运行dhcpd,而事实上根本看不到文件系统中那个真正的目录。因此需要事先创建目录,并将dhcpd复制到其中。同时dhcpd需要几个库文件,可以使用ldd(library Dependency Display缩写)命令,ldd作用是显示一个可执行程序必须使用的共享库。  
ldd dhcpd  
       libc.so.6 => /lib/tls/libc.so.6 (0x42000000)  
       /lib/ld-linux.so.2 => /lib/ld-linux.so.2 (0x40000000)  
这意味着还需要在“监牢”中创建lib目录,并将库文件复制到其中。手工完成这一工作是非常麻烦的,此时可以用jail软件包来帮助简化chroot“监牢”建立的过程。  
(1)Jail软件的编译和安装  
Jail官方网站是:http://www.jmcresearch.com/ ,最新版本:1.9a。  
#Wget http://www.jmcresearch.com/static/dwn/projects/jail/jail_1.9a.tar.gz  
#tar xzvf jail.tar.gz ;cd jail/src  
#make; make install  
(2)用jail创建监牢  
jail软件包提供了几个Perl脚本作为其核心命令,包括mkjailenv、addjailuser和addjailsw。  
mkjailenv:创建chroot“监牢”目录,并且从真实文件系统中拷贝基本的软件环境。addjailsw:从真实文件系统中拷贝二进制可执行文件及其相关的其它文件(包括库文件、辅助性文件和设备文件)到该“监牢”中。addjailuser:创建新的chroot“监牢”用户。  
首先停止目前dhcpd服务,然后建立chroot目录:  
#/sbin/service dhcpd start  
#mkjailenv  /chroot/  
mkjailenv  
A component of Jail (version 1.9 for linux)  
http://www.gsyc.inf.uc3m.es/~assman/jail/  
Juan M. Casillas   

Making chrooted environment into /chroot  
       Doing preinstall()  
       Doing special_devices()  
       Doing gen_template_password()  
       Doing postinstall()  
Done.  
下面的例子展示为“监牢”添加dhcpd程序的过程  
# addjailsw  /chroot/ -P /usr/sbin/dhcpd  
addjailsw  
A component of Jail (version 1.9 for linux)  
http://www.gsyc.inf.uc3m.es/~assman/jail/  
Juan M. Casillas   

Guessing dhcpd args(0)  
Warning: file /chroot//lib/tls/libc.so.6 exists. Overwritting it  
Warning: file /chroot//lib/ld-linux.so.2 exists. Overwritting it  
………  
Done.  
不用在意那些警告信息,因为jail会调用ldd检查dhcpd用到的库文件。而几乎所有基于共享库的二进制可执行文件都需要上述的几个库文件。接下来将dhcpd的相关文件拷贝到“监牢”中:  
#  mkdir -p /chroot/dhcp/etc  
# cp /etc/dhcpd.conf /chroot/dhcp/etc/  
# mkdir -p /chroot/dhcp/var/state/dhcp  
# touch /chroot/dhcp/var/state/dhcp/dhcp.leases  
此时的“监牢”目录结构见图1。  

图1 “监牢”目录结构  
重新启动dhcpd:  
[root@www root]# /chroot/usr/sbin/dhcpd  
使用ps命令检查dhcpd进程:  
#ps -ef | grep dhcpd  
root      2402     1  0 14:25 nbsp;       00:00:00 /chroot/usr/sbin/dhcpd  
root      2764  2725  0 14:29 pts/2    00:00:00 grep dhcpd  
注意此时进程名称已经改变,使用检查dhcpd运行的端口:  
# netstat -nutap | grep dhcpd  
udp   0  0 0.0.0.0:67         0.0.0.0:*                           2402/dhcpd  
端口号没有改变。现在dhcpd已经成功运行在“监牢”中。  

到此为止一个这样,一个完整和安全的 DHCP服务器就完成了。

 

 

http://tieba.baidu.com/fz=54264304

 

上面是原文连接,你研究下。

来源:_Nickelback

声明:本站部分文章及图片转载于互联网,内容版权归原作者所有,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

上一篇 2014年8月8日
下一篇 2014年8月9日

相关推荐