1 概述
1.1 功能介绍
SELinux 是 2.6 版本的 Linux 内核中提供的强制访问控制(MAC)系统。对于目前可用的 Linux安全模块来说,SELinux 是功能最全面,而且测试最充分的,它是在 20 年的 MAC 研究基础上建立的。SELinux 在类型强制服务器中合并了多级安全性或一种可选的多类策略,并采用了基于角色的访问控制概念。[1]
大部分使用 SELinux 的人使用的都是 SELinux 就绪的发行版,例如 Fedora、Red Hat Enterprise Linux (RHEL)、Debian或 Centos。它们都是在内核中启用 SELinux 的,并且提供一个可定制的安全策略,还提供很多用户层的库和工具,它们都可以使用 SELinux 的功能。
SELinux是一种基于 域-类型 模型(domain-type)的强制访问控制(MAC)安全系统,它由NSA编写并设计成内核模块包含到内核中,相应的某些安全相关的应用也被打了SELinux的补丁,最后还有一个相应的安全策略。
众所周知,标准的UNⅨ安全模型是”任意的访问控制”DAC。就是说,任何程序对其资源享有完全的控制权。假设某个程序打算把含有潜在重要信息的文件扔到/tmp目录下,那么在DAC情况下没人能阻止他!
而MAC情况下的安全策略完全控制着对所有资源的访问。这是MAC和DAC本质的区别。
SELinux提供了比传统的UNⅨ权限更好的访问控制。。
官网地址:http://selinuxproject.org/page/Main_Page
1.2 工程依赖
工程源仓库搭建
2 环境搭建
2.1环境要求
基础系统 EL7,or selinuxplus Cloud 软件包 selinux-policy selinux-policy-targeted
2.2 环境搭建
1 安装软件
Yum install selinux-policy-devel
2 解压策略包,配置文件目录
selinux-policy/SOURCES/serefpolicy-3.12.1/policy/modules/
3 以getty为例
[root@localhost system]# ls getty.* getty.fc getty.if getty.te
4 根据audit2allow 工具查找avc的deny信息 ,并修改文件
################################################# # selinuxplus add here for ... # gen_require(` type chkpwd_exec_t; type init_exec_t; type unreserved_port_t; type admin_home_t; type dmidecode_exec_t; type memory_device_t; type ssh_keygen_exec_t; type sshd_key_t; type urandom_device_t; type getty_etc_t; type init_t; type init_var_run_t; type power_unit_file_t; type systemd_passwd_agent_exec_t; type systemd_passwd_var_run_t; type systemd_systemctl_exec_t; class lnk_file read; ') allow getty_t chkpwd_exec_t:file execute; allow getty_t init_exec_t:file getattr; allow getty_t self:capability setuid; allow getty_t unreserved_port_t:tcp_socket name_connect; allow getty_t admin_home_t:file { read open }; allow getty_t dmidecode_exec_t:file { read getattr open execute execute_no_trans }; allow getty_t memory_device_t:chr_file { read open }; allow getty_t self:capability sys_rawio; allow getty_t ssh_keygen_exec_t:file { read execute open execute_no_trans }; allow getty_t sshd_key_t:file { read getattr open }; allow getty_t urandom_device_t:chr_file { read getattr open }; allow getty_t admin_home_t:dir write; allow getty_t getty_etc_t:dir { write create add_name }; allow getty_t getty_etc_t:file { write create };
2.3生成二进制策略
使用工具生产二进制策略:
make -f /usr/share/selinux/devel/Makefile getty.pp
2.4 工程调试
使用semodule工具测试
semodule –I getty.pp
开启selinux为permission状态,并根据audit的日志进行定位分析,如有阻止策略再次进行添加和生成测试工作。
2.5 其他事项
1、 avc的信息要全局分析
2、 多次测试和重启机器测试,如有socket通信,要进行通信测试。
3、 一些规则没有被审计出来,但一样denial了程序的运行,需要使用semoudle –DB 将那些dontaudit的测试去除。-D 表示构建审计dontaudit的规则,-B表示重新rebuild。
You can build the policy configuration with the “dontaudit” rules removed by running “semodule -DB”. This will expose any hidden denials. To build the policy configuration with the “dontaudit” rules re-insterted run “semodule -B”
2.6 其他
描述项目研制过程中将采用的其他方面的内容。