Linux 系统管理(EL7)-SELinux篇

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 其他

描述项目研制过程中将采用的其他方面的内容。

发表评论

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