第 1 章 SELinux 入门
SELinux(Security Enhanced Linux)提供了一个额外的系统安全层。SELinux 从根本上解决以下问题:May <subject> do <action> to <object>?, 例如:Web 服务器是否可以访问用户主目录中的文件?
1.1. SELinux 简介
系统管理员一般无法通过基于用户、组群和其它权限(称为 Discretionary Access Control,DAC)的标准访问策略生成全面、精细的安全策略。例如,限制特定应用程序只能查看日志文件,而同时允许其他应用程序在日志文件中添加新数据。
Security Enhanced Linux(SELinux)实现强制访问控制(MAC)。每个进程和系统资源都有一个特殊的安全性标签,称为 SELinux 上下文(context)。SELinux 上下文有时被称为 SELinux 标签,它是一个提取系统级别细节并专注于实体的安全属性的标识符。这不仅提供了在 SELinux 策略中引用对象的一个一致方法,而且消除了在其他身份识别系统中可能存在的模糊性。例如,某个文件可以在使用绑定挂载的系统中有多个有效的路径名称。
SELinux 策略在一系列规则中使用这些上下文,它们定义进程如何相互交互以及与各种系统资源进行交互。默认情况下,策略不允许任何交互,除非规则明确授予了相应的权限。
请记住,对 SELinux 策略规则的检查是在 DAC 规则后进行的。如果 DAC 规则已拒绝了访问,则不会使用 SELinux 策略规则。这意味着,如果传统的 DAC 规则已阻止了访问,则不会在 SELinux 中记录拒绝信息。
SELinux 上下文包括以下字段: user(用户)、role(角色)、type(类型)和 security level(安全级别)。在 SELinux 策略中,SELinux 类型信息可能是最重要的。这是因为,最常用的、用于定义允许在进程和系统资源间进行的交互的策略规则会使用 SELinux 类型而不是 SELinux 的完整上下文。SELinux 类型以 _t
结尾。例如,Web 服务器的类型名称为 httpd_t
。通常位于 /var/www/html/
中的文件和目录的类型上下文是 httpd_sys_content_t
。通常位于 /tmp
and /var/tmp/
中的文件和目录的类型上下文是 tmp_t
。Web 服务器端口的类型上下文是 http_port_t
。
有一个策略规则允许 Apache(作为 httpd_t
运行的 Web 服务器进程)访问通常位于 /var/www/html/
和其他 Web 服务器目录中上下文的文件和目录(httpd_sys_content_t
)。策略中没有允许规则适用于通常位于 /tmp
和 /var/tmp/
中的文件,因此不允许访问。因此,当使用 SELinux 时,即使 Apache 被破坏,一个恶意的脚本可以访问它,也无法访问 /tmp
目录。
图 1.1. 通过 SELinux 以安全的方式运行 Apache 和 MariaDB 的示例。
如上图所示,SELinux 允许作为 httpd_t
运行 Apache 进程访问 /var/www/html/
目录,并且拒绝同一进程访问 /data/mysql/
目录,因为 httpd_t
和 mysqld_db_t
类型上下文没有允许规则。另一方面,作为 mysqld_t
运行的 MariaDB 进程可以访问 /data/mysql/
目录,SELinux 也会正确地拒绝使用 mysqld_t
类型的进程来访问标记为 httpd_sys_content_t
的 /var/www/html/
目录。
其他资源
-
selinux(8)
手册页和apropos selinux
命令列出的 man page。 -
在安装了
selinux-policy-doc
软件包后,man -k _selinux
命令会列出 man page。 - The SELinux Coloring Book 可帮助您更好地了解 SELinux 基本概念。。
- SELinux Wiki FAQ