3.4.3 参考策略源代码分析
策略文件含有成千上万条规则,并且规则随着应用程序的增加而加倍增长。如何让规则结构清晰和编写简单一直是一个难点,参考策略通过抽象化、层次化和模块化,很大程度简化了策略的编写。
参考策略源代码主要由模块源代码组成,每个模块针对一个RPM包或一个应用程序或一项服务。模块由私有规则文件(.te)、文件标识描述文件(.fc)和模块的接口文件(.if)组成。每个模块对应用程序的权限作了详细的描述,还提供了接口给其他模块使用,主要用于域的转移。
例如:Linux操作系统启动时,init进程经过域转移后,域变成init_t类型。当init进程执行应用程序/sbin/consoletype时,/sbin/consoletype的标签为system_u:object_r:consoletype_exec_t,s0,由init进程和文件consoletype的安全上下文对可以查找到策略,consoletype.te文件中含有私有规则init_domain(consoletype_t,consoletype_exec_t),这样,consoletype执行后的进程的域转移为consoletype_t。
应用程序的策略模块常给其他模块提供接口来实现域的转移,但也可以用私有策略进行域的转移。这样,只允许指定的域执行本应用程序,给新产生的进程指定的域。
策略模块将SELinux规则进行抽象封装,以便于理解和书写,在编译时,再给m4宏进行扩展成SELinux规则存放在policy.conf中。policy.conf文件中还提供了策略模块的注释,以便在规则调试时从policy.conf中找到规则对应的策略模块语句。
策略模块很多,但机制类似,下面以wine模块为例说明策略模块的抽象语句与SELinux规则的对应关系。
1.wine.te
wine.te文件描述了wine应用程序的域的私有规则,从域的私有规则可以看出,在targeted策略中,wine进程具有unconfined域的权限,即可对几乎所有的文件进行操作等,另外,它还有对所有可执行文件进行执行的权限 。wine.te文件列出如下:
policy_module(wine,1.1.3)
########################################
#
# Declarations
#
type wine_t;
domain_type(wine_t) #定义进程wine的域为wine_t
type wine_exec_t; #定义可执行文件的类型
domain_entry_file(wine_t,wine_exec_t) #指定域wint_t由wine_exec_t类型文件转移生成
########################################
#
# Local policy
#
ifdef(`targeted_policy',`
allow wine_t self:process { execstack execmem execheap };
unconfined_domain_noaudit(wine_t) #使域wine_t成为unconfined域,即可做unconfined的操作
files_execmod_all_files(wine_t) #可执行所有可执行文件
optional_policy(`
hal_dbus_chat(wine_t)
')
')
|
2.wine.if
wine.if文件提供了给其他的域使用的接口,用于域的转移,即当其他进程调用wine应用程序时,新生成的wine进程将转移到接口指定的域。wine.if文件列出如下:
## |
3.wine.fc
wine.fc文件提供了wine应用程序的文件标识,策略模块编译后,这些标识会被写入到文件的扩展属性中去。SELinux将根据进程域的标签和文件的标签去查找规则,确定执行权限。wine.fc文件列出如下:
/usr/bin/wine--gen_context(system_u:object_r:wine_exec_t,s0) /opt/picasa/wine/bin/wine--gen_context(system_u:object_r:wine_exec_t,s0) |
4.policy.conf中与wine相关的规则
策略源代码经编译后生成policy.conf文件。在policy.conf文件中,wine应用程序的模块策略经m4宏扩展后的规则列出如下,其中,注释####表示在策略模块中的策略语句,在begin和end之前是策略语句经m4宏扩展后的规则。
type wine_exec_t;
type wine_t;
##### begin domain_type(wine_t) depth: 1 #对应策略模块wine.te中语句
##### begin domain_base_type(wine_t) depth: 2
typeattribute wine_t domain; #定义域属性
##### end domain_base_type(wine_t) depth: 1
##### begin init_sigchld(wine_t) depth: 2
allow wine_t init_t:process sigchld;
##### end init_sigchld(wine_t) depth: 1
##### begin init_signull(wine_t) depth: 2
allow wine_t init_t:process signull;
##### end init_signull(wine_t) depth: 1
##### begin rpm_use_fds(wine_t) depth: 2
allow wine_t rpm_t:fd use;
##### end rpm_use_fds(wine_t) depth: 1
##### begin rpm_read_pipes(wine_t) depth: 2
allow wine_t rpm_t:fifo_file { read getattr lock ioctl };
##### end rpm_read_pipes(wine_t) depth: 1
##### begin selinux_dontaudit_read_fs(wine_t) depth: 2
dontaudit wine_t security_t:dir { getattr search };
dontaudit wine_t security_t:file { getattr read };
##### end selinux_dontaudit_read_fs(wine_t) depth: 1
##### begin seutil_dontaudit_read_config(wine_t) depth: 2
dontaudit wine_t selinux_config_t:dir search;
dontaudit wine_t selinux_config_t:file { getattr read };
##### end seutil_dontaudit_read_config(wine_t) depth: 1
##### end domain_type(wine_t) depth: 0
##### begin domain_entry_file(wine_t,wine_exec_t) depth: 1
allow wine_t wine_exec_t:file entrypoint;
allow wine_t wine_exec_t:file { read getattr lock execute ioctl };
typeattribute wine_exec_t entry_type;
##### end domain_entry_file(wine_t,wine_exec_t) depth: 0
##### begin domain_entry_file(wine_t,wine_exec_t) depth: 1
allow wine_t wine_exec_t:file entrypoint;
allow wine_t wine_exec_t:file { read getattr lock execute ioctl };
typeattribute wine_exec_t entry_type;
##### begin corecmd_executable_file(wine_exec_t) depth: 2
typeattribute wine_exec_t exec_type;
##### begin files_type(wine_exec_t) depth: 3
typeattribute wine_exec_t file_type;
##### end files_type(wine_exec_t) depth: 2
##### end corecmd_executable_file(wine_exec_t) depth: 1
##### end domain_entry_file(wine_t,wine_exec_t) depth: 0
|
| 回书目 上一节 下一节 |
|
· Linux笔试面试题选摘测.. · 08年5月软考网管上午真.. · 性能测试从零开始 目录 · 08年5月软考网工上午真.. · 上周拒绝服务攻击(DDo.. · 08年5月各大网上书店及.. |
· 2008年5月24日软考试题.. · 软件设计师专家临考模.. · 上周网络管理员专家自.. · 网络工程师自测获奖名.. · 08年4月各大网上书店及.. · 系统分析师自测获奖名.. |
|
||||
| · ASP.NET开发教程 · 专题:ASP.NET 2.0基础.. · LAMP技术精解 · 服务器节能与绿色IT · ARP攻击防范与解决方案 · Linux 集群技术专题 · Windows集群服务应用 · CISSP认证成长之路 |
· SQL Server 2008/2005.. · SQL Server入门到精通 · 网络工程师职业规划与.. · 浏览器的战国时代 · 运营商封堵ADSL共享 中.. · 微软出价446亿美元收购.. · 技术人求职简历完备手册 · 开源虚拟化技术Xen |
|||
|
||||
| · SOA 面向服务架构 · SQL Server 2008/2005.. · Apache技术专题 · 三层交换技术专题 · SQL Server入门到精通 · Apache技术专题 · Windows集群服务应用 · 国际文档格式标准开战 |
· 路由器设置与口令恢复 · Linux 集群技术专题 · PHP开发应用手册 · SOA 面向服务架构 · 企业数据恢复指南 · 了解统一威胁管理(UTM).. · 专题:AIX操作系统管理.. · 访问控制列表(ACL)介绍 |
|||
|
||||
| · SQL Server入门到精通 · SQL Server 2008/2005.. · SOA 面向服务架构 · Apache技术专题 · 三层交换技术专题 · Apache技术专题 · 企业数据恢复指南 · Windows集群服务应用 |
· 路由器设置与口令恢复 · Linux 集群技术专题 · SOA 面向服务架构 · 了解统一威胁管理(UTM).. · 反垃圾邮件技术应用 · 访问控制列表(ACL)介绍 · ASP.NET开发教程 · PHP开发应用手册 |
|||