分类: LINUX
2009-11-11 15:58:03
在dvnlinux-dist的源码树中提供了系统安全模块,位于dvnlinux-dist根目录下的security目录,其中包括两个系统安全工具:iptables和 SELinux,这也是其他Linux发行版提供的主流安全工具。
本文档主要介绍SELinux的安装。
SELinux(Security-enhanced Linux)是安全增强了的Linux,是由NSA(National Security Agency)和SCC(Secure Computing Corporation)共同开发的GPL项目。
SELinux改进了对内核对象和服务的访问控制
SELinux已经整合进了Linux-2.6版内核,源码位于内核security/selinux目录。Linux内核中关于SELinux的配置选项如图所示,在内核配置选项主菜单的Security options栏下面。
可以从下载到SELinux的安全策略工具。我们选择的是2008-09-09发布的稳定版本,主要包括如下几项:
这些都可以通过make && make install命令来安装,并且可以通过DESTDIR选项来控制安装的路径,比如要将他们安装在$(ROOTFS)目录下,可以使用如下命令:
make &&
make DESTDIR=$(ROOTFS) install
我们需要修改开始引导系统的程序 /sbin/init以使系统支持并启用 SELinux。需要给sysvinit打上一个SELinux补丁(sysvinit-init.c.diff),这个补丁会在系统引导时挂载selinuxfs虚拟文件系统到/selinux目录,并加载SELinux策略。
可以通过如下命令替换目标系统的init文件:
cd sysinit-2.86
cd src
patch -p0 < ../../sysvinit-init.c.diff
make init
mv $(ROOTFS)/sbin/init $(ROOTFS)/sbin/init.old
cp init $(ROOTFS)/sbin/init
Sysvinit-init.c.diff补丁引入了一个 标志 no_selinux,如果引导命令包括了 -p 选项,这个标志就被设置为 1。如果这个标志被设置 了,那么就会给出一条警告消息,然后像正常方式一样引导。否则就调用函数 load_policy(), 这个函数是在这个补丁中定义的。
比如,我们使用的bootloader是grub,grub的配置文件是/boot/grub/menu.lst,如果使用下列引导参数将不挂载SELinux:kernel /boot/kernel-2.6.28 root=/dev/hda1 -p,而去除-p选项即可在引导是启动SELinux。
可以使用checkpolicy程序编译策略:
checkpolicy -o policy.bin policy.conf
将编译生成的策略安装到/etc/目录下:
cp policy.bin /etc/。
更换策略需要重新编译并安装。
/etc/selinux/config文件控制SELinux是激活还是关闭,如果激活,SELinux的运行模式是许可(permissive)或者强制(enforcing)模式。关闭SELinux将关闭SELinux内核和应用程序代码,系统在没有任何SELinux保护下运行,许可模式表示激活了SELinux代码,但SELinux策略不否决操作,只是把违背策略的操作信息审核记录到log系统。强制策略则对违背策略的操作进行否决,并记录信息到log系统。
使用sestatus命令可以查看SELinux的运行状态,也可使用如下目录查看:
cat /selinux/enforce返回0表示许可模式,返回1表示强制模式。
也可通过如下命令更改模式:
echo 0 > /selinux/enforce将关闭强制模式;
echo 1 > /selinux/enforce将开启强制模式。