SELinux 介绍

查看原文

Security-Enhanced Linux (SELinux) 是在 Linux 内核中设计的一套 Access Control 机制,即便你可以通过 user, group, rwx 这些权限检查,你还得通过 SELinux 定制的 policies 的检查才能执行命令成功。

大部分操作系统一般使用 Discretionary Access Control (DAC). 它把目录设备和 objects 挂钩,进程 和 subjects 挂钩,DAC 就是控制 subjects 和 objects 二者怎么互相交互。

SELinux 觉得还不够,要引入更多,所以使用了 Mandatory Access Contro (MAC)。因为只基于用户 id 和所有权,还有很多安全隐患没有考虑到,例如说用户的角色,程序的功能,数据敏感度等等。以下是未起用 SELinux 的文件权限

~]$ ls -l file1
-rwxrw-r-- 1 user1 group1 0 2009-08-30 11:03 file1

起用了 SELinux 后,文件可以通过 -Z 来查看权限。可以看到 SELinux 提供了四个级别的权限控制:user, role, type, level. 以下例子分别对应 unconfined_u, object_r, user_home_t, s0. 注意这里的 SELinux User 和 Linux user 是两种不同的概念。

~]$ ls -Z file1
-rwxrw-r--  user1 group1 unconfined_u:object_r:user_home_t:s0      file1

MAC, DAC 区别

  • DAC 只基于 Linux user, group id 检查, MAC 基于 user, role, type, level 检查。
  • MAC 规则会在 DAC 规则之后检查,DAC 检查没过也不会检查 MAC

SELinux 的特点:

  • 所有进程和文件都被打上一个标签:type 。进程会根据 type 跑在自己的 domain 下,并根据 rules 只能处理特定类型的文件和其它进程。
  • ACL 粒度更细了。
  • 系统级别的管控
  • 减少 privilege escalation attack 发生的风险。举个例子,Apache 被攻破了,攻击者还是无法读取到 user home directories 下的文件。