编译模块
[root@python log]# checkmodule -m -o local.mod local.te
checkmodule: loading policy configuration from local.te
checkmodule: policy configuration loaded
checkmodule: writing binary representation (version 5) to local.mod
3)semodule_package
创建新的模块
[root@python log]# semodule_package -o local.pp -m local.mod
4)semodule
能够显示,加载,删除 模块
加载的例子:
[root@python log]# semodule -i local.pp
5)semanage
这是个功能强大的策略管理工具,有了他即使没有策略的源代码,也是能够管理安全策略的。因为我主要是介绍用源代码来修改策略的,周详用法大家能够参考他的man页。
5. 定制策略
FC4,RHEL4等都是采用策略1.X版本的,并且是提供策略源代码的RPM包。从FC5开始策略的版本从1.X 升级到2.X。2.X版本的refpolicy(reference policy)最大的一个变化就是引进模块(module)这个概念, 同一套策略源代码就能够支持Multi-LevelSecurity(MLS)和non-MLS。
http://serefpolicy.sf.net/
标准的FC5里不提供源代码的RPM包。FC5提供的audit2allow,semanage,semodule也是能够研发一些简单的策略模块的。但是,要是作策略模块的研发,增加一个ROLE之类的,最好还是下载refpolicy的源代码。
5.1策略源文档的安装
从CVS服务器下载的源代码是最新的,假如碰到象make的时候出错,那么最好就是把您系统里和SELinux有关的那些包更新到最新的状态。
从source Forge的CVS服务器下载源代码
[root@python src]# cd /usr/local/src
[root@python src]# cvs -d:pserver:anonymous@cvs.sourceforge.net:/cvsroot/serefpolicy login
[root@python src]# cvs -z3 -d:pserver:anonymous@cvs.sourceforge.net:/cvsroot/serefpolicy co -P refpolicy
[root@python src]# cd refpolicy/
[root@python src]# make install-src
安装好了的源代码目录结构如下图所示:
每一个模块有3个文档构成,比如上图的sudo.fc 就是和 命令sudo相关的文档的定义标签,(file context rabel),sudo.te是Type Enforcement定义,包括TE访问规则等,sudo.if是个外部模块调用这个模块的接口定义。
[root@python src]# cd /etc/selinux/refpolicy/src/policy
[root@python policy]# cp build.conf build.conf.org
[root@python policy]# vi build.conf
[root@python policy]# diff build.conf build.conf.org
32c32
#DISTRO = redhat
43c43
MONOLITHIC=y
[root@python src]# make conf
[root@python src]# make
这样,在/etc/selinux/refpolicy/src/policy下生成很多的以pp为后缀的文档,这些就是SELinux模块。接下来我们修改/etc/sysconfig/selinux,设成SELINUXTYPE=refpolicy,然后reboot.
启动后,确认策略的适用情况, 现在的版本是20。
[fu@python ~]$ /usr/sbin/sestatus
SELinux status: enabled
SELinuxfs mount: /selinux
Current mode: permissive
Mode from config file: permissive
Policy version: 20
Policy from config file: refpolicy
5.2给程式定制domain
研发程式策略的一般步骤
1.给文档,端口之类的object赋予type 标签
2.配置 Type Enforcement (Domain 迁移,访问许可)
3.策略加载
4.permissive模式下运行程式
5.确认日志,用audit2allow生成访问许可
6.重复1,2,3,4,5动作,直到没有违反的日志出现
7.转换到enforcing模式,正式运用
因为我们所常用的那些服务的策略模块都已有了,修改的时候也比较简单。在这里我就举个一般的例子。用点对点下载的朋友估计都跟我相同,在Linux上用 azureus,Amule来下载东西吧。
接下来以azureus为例,介召如何在FC5里追加一个azureus.pp模块。我们在追加azureus.pp模块之前,azureus是在系统给用户设好的user_t domain里运行。
[fu@python azureus]$ ps -efZ|grep azureus
user_u:user_r:user_t fu 1751 1732 0 22:28 pts/3 00:00:00 /bin/bash ./azureus
接下来我们在追加3个文档。
1)azureus.fc
在这里我只定义一个文档,实际要是真的用的,还要定义azureus_t能写的目录等。
[root@python apps]# more azureus.fc
/home/fu/azureus -- gen_context(user_u:object_r:azureus_exec_t,s0)
2)azureus.te
[root@python apps]# more azureus.te
policy_module(azureus,1.0.0)
type azureus_t;
type azureus_exec_t;
role user_r types azureus_t;
require {
type user_t;
};
domain_type(azureus_t)
domain_entry_file(azureus_t, azureus_exec_t)
domain_auto_trans(user_t, azureus_exec_t, azureus_t)
3)azureus.if
实际上没有别的模块要调用azureus,所以这个文档就是空文档也不要紧。
[root@python apps]# more azureus.if
# policy/modules/apps/azureus.if
## Myapp example policy
##
## Execute a domain transition to run azureus.
##
##
## Domain allowed to transition.
##
interface(`azureus_domtrans',`
gen_requires(`
type azureus_t, azureus_exec_t;
')
domain_auto_trans($1,azureus_exec_t,azureus_t)
allow $1 azureus_t:fd use;
allow azureus_t $1:fd use;
allow $1 azureus_t:fifo_file rw_file_perms;
allow $1 azureus_t:process sigchld;
')
在/etc/selinux/refpolicy/src/policy/policy/module.conf 里加入下面一行
[root@python policy]# tail -1 modules.conf
azureus = module
确认/etc/selinux/refpolicy/src/policy里MONOLITHIC=n
文章整理:西部数码--专业提供域名注册、虚拟主机服务
http://www.west263.com
以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!




