第 1 章 SELinux 入门
通过了解 Security Enhanced Linux (SELinux)的核心概念来提高系统的安全性。了解 SELinux 架构、软件包和操作模式有助于有效地管理系统策略。
1.1. SELinux 简介 复制链接链接已复制到粘贴板!
Security Enhanced Linux (SELinux)是强制访问控制(MAC)的一种实现,它增强了系统安全性。通过强制执行细致的策略来限制进程如何与文件和网络资源交互,SELinux 可缓解受入侵应用程序的影响并防止未经授权的访问。
标准 Discretionary Access Control (DAC)基于用户、组和其他权限的访问策略。此模型可防止系统管理员创建精细的安全策略,例如将特定应用程序限制为仅查看日志文件,同时允许其他应用程序将数据附加到日志文件中。
SELinux 通过强制强制强制访问控制(MAC)策略添加额外保护层: May <subject> do <action> to <object> ?,例如:在用户主目录中的 web 服务器访问文件?每个进程和系统资源都有一个特殊的安全性标签,称为 SELinux 上下文(context)。SELinux 上下文有时被称为 SELinux 标签,它是一个提取系统级详情的标识符,以专注于实体的安全属性。这个标识符为在 SELinux 策略中引用对象提供了一致的方法,并删除在其他识别方法中找到的模糊。例如,一个文件可以在使用绑定挂载的系统中有多个有效的路径名称。
SELinux 策略使用规则中的上下文来定义进程如何与系统资源交互。默认情况下,除非规则明确授予访问权限,否则策略会拒绝所有交互。
如需更多信息,请参阅在系统上安装 selinux-policy-doc 软件包时,请参阅 man -k selinux 命令列出的 selinux (8) 手册页和 man page。
SELinux 策略规则会在 DAC 规则后检查。如果 DAC 规则拒绝访问,则不会评估 SELinux 策略规则,且不会记录 SELinux 拒绝信息。
SELinux 上下文有四个字段:user、role、type 和 security level。type 字段对于 SELinux 策略是最重要的,因为定义进程和系统资源之间的允许交互的最常见的策略规则基于 SELinux 类型而不是完整的 SELinux 上下文。SELinux 类型以 _t 结尾。例如,Web 服务器的类型上下文是 httpd_t。/var/www/html/ 中的文件和目录使用 httpd_sys_content_t 类型,而 /tmp 和 /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/,但被拒绝访问 /var/www/html/,它被标记为 httpd_sys_content_t。