目录
一、起源
SELinux全称是Security Enhanced Linux,美国国家安全局开发的一个Linux强制访问控制安全模块,2001年发布,默认集成在CentOS、RedHat、Euler、Kylin等系统的2.6及以上的内核里,项目开源地址:SELinux Project · GitHub
CentOS官网也包含该项目的介绍:zh/HowTos/SELinux - CentOS Wiki
二、架构和模式
Linux系统对于权限访问的控制,主要有两种:
- 自主访问控制(DAC):允许所有者根据自己的判断来设置对文件和目录的保护。DAC的两种实现形式是UNIX权限位(rwx)和访问控制列表(例如我们常见的文件或目录的可读可写可执行这种就是基于用户的自主访问控制)。
- 强制访问控制(MAC):是一种基于标签关系的、由系统强制执行的访问控制机制。系统将敏感标签与创建用来执行程序的所有进程关联起来。MAC策略使用这种标签来进行访问控制决策。
SELinux就是一种基于域-类型模型的强制访问控制安全系统,它可以控制文件系统、文件描述符、文件、目录、端口、消息接口和网络接口的权限。
SELinux是通过LSM(Linux Security Modules)框架加载到内核中的,SELinux也不是唯一的一个用于增强Linux安全的系统(比如还有Ubuntu系统中APPArmor),SELinux作为一个LSM的模块被加载到内核中,只有当访问符合DAC检查后,才会进行判断是否符合SELinux的权限控制。
2.1 获取SELinux运行模式
1、查看SELinux运行模式
可以使用getenforce命令可以查看当前系统的SELinux模式,共有三种,分别是:
Enforcing:强制模式,这种模式下,会对不符合权限的行为进行拦截,拦截行为会记录在/var/log/message日志里;
permissive:警告模式,这种模式下,只会产生告警日志到/var/log/audit/audit.log,不会拦截;
disabled:关闭模式。
2、改变SELinux模式
1、可以使用setenforce 1(Enforcing)/0(permissive) 命令暂时改变SELinux的运行模式(直到系统重启),只有在Enforcing和permissive两种模式转换时不需要系统重启,其他模式的转换都需要重启。
2、可以修改/etc/selinux/config文件中的SELINUX值,改为enforcing/permission/disabled的任一种即可。
2.2 获取SELinux运行信息
使用sestatus可以查看当前系统的SELinux状态,可以显示当前系统selinux的版本和使用的策略集以及当前的selinux模式。
另外配置文件 /etc/selinux/config 也包含了 SELinux 运行策略和模式的信息,通过改变变量 SELINUXTYPE 的值实现,该值有多种可能(targeted, mls, or minimum),每种都是一系列定义好的规则集,例如:targeted 代表仅针对预制的几种网络服务和访问请求使用 SELinux 保护