SELinux 项目在 2000 年以 GPL 协议的形式开源,当 Red Hat 在其 Linux 发行版本中包括了 SELinux 之后,SELinux 才逐步变得流行起来。现在,SELinux 已经被许多组织广泛使用,几乎所有的 Linux 内核 2.6 以上版本,都集成了 SELinux 功能。
对于 SELinux,初学者可以这么理解,它是部署在 Linux 上用于增强系统安全的功能模块。
我们知道,传统的 Linux 系统中,默认权限是对文件或目录的所有者、所属组和其他人的读、写和执行权限进行控制,这种控制方式称为自主访问控制(DAC)方式;而在 SELinux 中,采用的是强制访问控制(MAC)系统,也就是控制一个进程对具体文件系统上面的文件或目录是否拥有访问权限,而判断进程是否可以访问文件或目录的依据,取决于 SELinux 中设定的很多策略规则。说到这里,读者有必要详细地了解一下这两个访问控制系统的特点:
- 自主访问控制系统(Discretionary Access Control,DAC)是 Linux 的默认访问控制方式,也就是依据用户的身份和该身份对文件及目录的 rwx 权限来判断是否可以访问。不过,在 DAC 访问控制的实际使用中我们也发现了一些问题:
- root 权限过高,rwx 权限对 root 用户并不生效,一旦 root 用户被窃取或者 root 用户本身的误操作,都是对 Linux 系统的致命威胁。
- Linux 默认权限过于简单,只有所有者、所属组和其他人的身份,权限也只有读、写和执行权限,并不利于权限细分与设定。
- 不合理权限的分配会导致严重后果,比如给系统敏感文件或目录设定 777 权限,或给敏感文件设定特殊权限——SetUID 权限等。
- 强制访问控制(Mandatory Access Control,MAC)是通过 SELinux 的默认策略规则来控制特定的进程对系统的文件资源的访问。也就是说,即使你是 root 用户,但是当你访问文件资源时,如果使用了不正确的进程,那么也是不能访问这个文件资源的。
这样一来,SELinux 控制的就不单单只是用户及权限,还有进程。每个进程能够访问哪个文件资源,以及每个文件资源可以被哪些进程访问,都靠 SELinux 的规则策略来确定。
注意,在 SELinux 中,Linux 的默认权限还是有作用的,也就是说,一个用户要能访问一个文件,既要求这个用户的权限符合 rwx 权限,也要求这个用户的进程符合 SELinux 的规定。
不过,系统中有这么多的进程,也有这么多的文件,如果手工来进行分配和指定,那么工作量过大。所以 SELinux 提供了很多的默认策略规则,这些策略规则已经设定得比较完善,我们稍后再来学习如何查看和管理这些策略规则。为了使读者清楚地了解 SELinux 所扮演的角色,这里举一个例子,假设 apache 上发现了一个漏洞,使得某个远程用户可以访问系统的敏感文件(如 /etc/shadow)。如果我们的 Linux 中启用了 SELinux,那么,因为 apache 服务的进程并不具备访问 /etc/shadow 的权限,所以这个远程用户通过 apache 访问 /etc/shadow文件就会被 SELinux 所阻挡,起到保护 Linux 系统的作用。
CentOS 6.x安装SELinux
在 CentOS 6.x 中,SELinux 也是整合到 Linux 的内核当中的,并且是启动的,所以不需要单独安装。不过,现在不再像在 CentOS 5.x 中,所有的 SELinux 工具都是已经安装和配置好的,在 CentOS 6.x 中,虽然 SELinux 的主程序默认已经安装,但是很多的 SELinux 管理工具需要我们手工安装。SELinux 安装命令如下:
[root@localhost ~]# yum -y install setroubleshoot
[root@localhost ~]# yum -y install setools-console
通过以上的介绍,读者应该对 SELinux 有了初步的认识,下面我们再通过了解 SELinux 的工作模式,细致了解 SELinux。