什么是SELinux?
SELinux是「Security-Enhanced Linux」的简称,是美国国家安全局「NSA=The National Security Agency」 和SCC(Secure Computing Corporation)开发的 Linux的一个扩张强制访问控制安全模块,是一种采用安全架构的Linux子系统,或者称为一个 Linux 内核模块。
SElinux的作用及权限管理机制
SELinux 主要作用就是最大限度地减小系统中服务进程可访问的资源(最小权限原则)。
DAC (Discretionary access control)
在没有使用 SELinux 的操作系统中,决定一个资源是否能被访问的因素是:某个资源是否拥有对应用户的权限(读、写、执行)。只要访问这个资源的进程符合以上的条件就可以被访问。而最致命问题是,root 用户不受任何管制,系统上任何资源都可以无限制地访问。
这种权限管理机制的主体是用户,也称为自主访问控制(DAC)。
MAC (Mandatory access control)
在使用了 SELinux 的操作系统中,决定一个资源是否能被访问的因素除了上述因素之外,还需要判断每一类进程是否拥有对某一类资源的访问权限。这样一来,即使进程是以 root 身份运行的,也需要判断这个进程的类型以及允许访问的资源类型才能决定是否允许访问某个资源。进程的活动空间也可以被压缩到最小。即使是以 root 身份运行的服务进程,一般也只能访问到它所需要的资源。即使程序出了漏洞,影响范围也只有在其允许访问的资源范围内。安全性大大增加。
这种权限管理机制的主体是进程,也称为强制访问控制(MAC)。
而 MAC 又细分为了两种方式,一种叫类别安全(MCS)模式,另一种叫多级安全(MLS)模式。在 DAC 模式下,只要相应目录有相应用户的权限,就可以被访问。而在 MAC 模式下,还要受进程允许访问目录范围的限制。
SELinux 相关概念
- 主体(Subject):可以完全等同于进程。
- 对象(Object):被主体访问的资源。可以是文件、目录、端口、设备等。
-
策略和规则(Policy & Rule):系统中通常有大量的文件和进程,为了节省时间和开销,通常我们只是选择性地对某些进程进行管制。而哪些进程需要管制、要怎么管制是由策略决定的。一套策略里面有多个规则。部分规则可以按照需求启用或禁用(以下把该类型的规则称为布尔型规则)。规则是模块化、可扩展的。在安装新的应用程序时,应用程序可通过添加新的模块来添加规则。用户也可以手动地增减规则。
在 CentOS 7 系统中,有三套策略,分别是:
- targeted:对大部分网络服务进程进行管制。这是系统默认使用的策略(下文均使用此策略)。
- minimum:以 targeted 为基础,仅对选定的网络服务进程进行管制。一般不用。
- mls:多级安全保护。对所有的进程进行管制。这是最严格的策略,配置难度非常大。一般不用,除非对安全性有极高的要求。
策略可以在
/etc/selinux/config中设定。
- 安全上下文(Security Context):安全上下文是 SELinux 的核心。
- 模式(Mode):见下文
SELinux 的工作模式
SELinux 有三种工作模式,分别是:
-
enforcing:强制模式。违反 SELinux 规则的行为将被阻止并记录到日志中。
-
permissive:宽容模式。违反 SELinux 规则的行为只会记录到日志中。一般为调试用。
-
disabled:关闭 SELinux。
SELinux 工作模式可以在 /etc/selinux/config或/etc/sysconfig/selinux 中设定。通过命令getenforce可以来查看当前系统的模式。
| 如果想从 disabled 切换到 enforcing 或者 permissive 的话,需要重启系统。反过来也一样。enforcing 和 permissive 模式可以通过 setenforce 1 | 0 命令快速切换。需要注意的是,如果系统已经在关闭 SELinux 的状态下运行了一段时间,在打开 SELinux 之后的第一次重启速度可能会比较慢。因为系统必须为磁盘中的文件创建安全上下文。SELinux 日志的记录需要借助 auditd.service 这个服务,请不要禁用它。 |