你还在为selinux的策略而忧愁么?下面来分析一个工具,该工具可以快速的帮实现策略的生成,本文将从使用到实现的角度进行分析,或许对于你,只需要生成策略,或许你还对其原理感到好奇。那么下面就转入正题进行简单策略之游,该文档将形成系列来说一说SELINUX策略。文章尽可能的通俗易懂。
转载请注明出处 [By SELinux+]
1 策略工具
在F12或rhel6以后都会安装一个这样的工具policycoreutils-gui。你可以检测一下你的服务器上有没有这个软件包。其实他只是selinux生成策略的一部分。
在使用这个工具很简单,首先先找到一个软件包,比如icecast-2.3.2-5.fc15.x86_64.rpm的软件包。
首先看一下这个软件包的信息
[root@localhost ~]# rpm -qi icecast Name : icecast Relocations: (not relocatable) Version : 2.3.2 endor: Fedora Project Release : 4.el5 Build Date: Wed 21 Oct 2009 07:28:35 PM CST Install Date: Mon 14 Mar 2011 01:01:22 PM CST Build Host: x86-4.fedora.phx.redhat.com Group : Applications/Multimedia Source RPM: icecast-2.3.2-4.el5.src.rpm
可以根据icecast的安装路径判断其可执行的命令在哪里,利用rpm –qlf 判断其可执行的命令
[root@localhost setest]# rpm -qlf /usr/bin/icecast /etc/icecast.xml /etc/logrotate.d/icecast /etc/rc.d/init.d/icecast /usr/bin/icecast /usr/share/doc/icecast-2.3.2
根据结果可以看到/usr/bin/icecast是可执行的文件
2 生成策略
使用seplogen 工具直接生成策略
[root@localhost setest]# sepolgen /usr/bin/icecast Created the following files in: ./ icecast.te # 打印强制文件 icecast.if # 接口文件 icecast.fc # 文件上下文定义 icecast.sh # 建立脚本
这样就会看到当前文件夹下生成四个文件
-rw-r--r--. 1 root root 309 7月 6 09:22 icecast.fc -rw-r--r--. 1 root root 3177 7月 6 09:22 icecast.if -rwxr-x---. 1 root root 1360 7月 6 09:22 icecast.sh -rw-r--r--. 1 root root 1244 7月 6 09:22 icecast.te
3 策略补充
这些策略有没有没有顾及到的策略场景呢?再看一下该软件的安装路径。
可以使用rpm -qlf查看该软件的安装的位置
[root@localhost setest]# rpm -qlf /usr/bin/icecast /etc/icecast.xml /etc/logrotate.d/icecast /etc/rc.d/init.d/icecast /usr/bin/icecast /usr/share/doc/icecast-2.3.2 /usr/share/doc/icecast-2.3.2/AUTHORS /usr/share/doc/icecast-2.3.2/COPYING /usr/share/doc/icecast-2.3.2/ChangeLog
看到/etc/logrotate.d/icecast的一行,发现icecast需要日志设置,打开该设置文件
[root@localhost setest]# more /etc/logrotate.d/icecast /var/log/icecast/*log { missingok notifempty sharedscripts postrotate /bin/kill -HUP `cat /var/run/icecast/icecast.pid 2>/dev/null` 2> /dev/null || true endscript }
已知logrotate是作为logrotate_t的,所以在cecast.te中添加:
gen_require(` type logrotate_t; ') icecast_signal(logrotate_t)
同样看到icecast的程序放在/usr/share目录下
/usr/share/doc/icecast-2.3.2 /usr/share/doc/icecast-2.3.2/AUTHORS /usr/share/doc/icecast-2.3.2/COPYING /usr/share/doc/icecast-2.3.2/ChangeLog
在icecast.fc中添加
/usr/share/icecast(/.*)? gen_context(system_u:object_r:httpd_sys_content_t,s0)
到这里整个策略也即将完成
使用icecast.sh编译和加载策略
sh icecast.sh Building and Loading Policy + make -f /usr/share/selinux/devel/Makefile Compiling targeted icecast module /usr/bin/checkmodule:loading policy configuration from tmp/icecast.tmp /usr/bin/checkmodule:policy configuration loaded /usr/bin/checkmodule:writing binary representation (version 10) to tmp/icecast.mod Creating targeted icecast.pp policy package rm tmp/icecast.mod tmp/icecast.mod.fc + /usr/sbin/semodule -i icecast.pp
如果发现avc的拒绝可以是使用audit2allow –la工具进行调试
3 策略生成工具说明
4 Template模板
程序的模板来自/usr/share/system-config-selinux/templates目录下
这些文件便是对默认目录的一个模板文件对应,常见的目录如上图所示:/etc,/var/cache,/var/log,/tmp/,/var,/var/run/,/var/spool等
文件分别为
[root@localhost templates]# ll *.py -rw-r--r--. 1 root root 1186 Aug 25 2010 boolean.py -rw-r--r--. 1 root root 3143 Aug 25 2010 etc_rw.py -rw-r--r--. 1 root root 7821 Aug 25 2010 executable.py -rw-r--r--. 1 root root 726 Aug 25 2010 __init__.py -rw-r--r--. 1 root root 1794 Aug 25 2010 network.py -rw-r--r--. 1 root root 49098 Aug 25 2010 polgen.py -rw-r--r--. 1 root root 3267 Aug 25 2010 rw.py -rw-r--r--. 1 root root 3829 Aug 25 2010 script.py -rw-r--r--. 1 root root 1313 Aug 25 2010 semodule.py -rw-r--r--. 1 root root 2797 Aug 25 2010 tmp.py -rw-r--r--. 1 root root 4164 Aug 25 2010 user.p y -rw-r--r--. 1 root root 3606 Aug 25 2010 var_cache.py -rw-r--r--. 1 root root 4263 Aug 25 2010 var_lib.py -rw-r--r--. 1 root root 3308 Aug 25 2010 var_log.py -rw-r--r--. 1 root root 2822 Aug 25 2010 var_run.py -rw-r--r--. 1 root root 3601 Aug 25 2010 var_spool.py