selinux 策略可以这样写

你还在为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

发表评论

您的电子邮箱地址不会被公开。