第 1 章 简介


SELinux(Security Enhanced Linux)提供了一个额外的系统安全层。SELinux 从根本上回答问题:"May <subject> do <action> to <object>",例如:"Web 服务器访问用户主目录中的文件吗?"
基于用户、组和其他权限(称为 Discretionary Access Control(DAC))的标准访问策略不允许系统管理员创建全面而精细的安全策略,例如限制特定应用程序仅查看日志文件,同时允许其他应用程序将新数据附加到日志文件
SELinux 使用强制访问控制(Mandatory Access Control,简称 MAC)。每个进程和系统资源都有一个特殊的安全标签,称为 SELinux 上下文。SELinux 上下文有时称为 SELinux 标签,它是一个提取系统级别细节并专注于实体的安全属性的标识符。这不仅提供了在 SELinux 策略中引用对象的一种一致方法,而且消除了在其他身份识别方法中可能存在的任何不确定性;例如,文件在利用绑定挂载的系统中可以有多个有效的路径名称。
SELinux 策略在一系列规则中使用这些上下文,它们定义进程如何相互交互以及与各种系统资源进行交互。默认情况下,策略不允许任何交互,除非规则明确授予了相应的权限。
注意
务必要记住,在 DAC 规则后检查 SELinux 策略规则。如果 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/ 中上下文的文件和目录(httpd_sys_content_t)。策略中没有允许规则适用于通常位于 /tmp/var/tmp/ 中的文件,因此不允许访问。因此,当使用 SELinux 时,即使 Apache 被破坏,一个恶意的脚本可以访问它,也无法访问 /tmp 目录。

图 1.1. 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 允许以 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/ 目录。

其它资源

如需更多信息,请参阅以下文档:

1.1. 运行 SELinux 的好处

SELinux 提供以下优点:
  • 所有进程和文件都被标记。SELinux 策略规则定义了进程如何与文件交互,以及进程如何相互交互。只有存在明确允许的 SELinux 策略规则时,才能允许访问。
  • 精细访问控制。传统的 UNIX 通过用户的授权、基于 Linux 的用户和组进行控制。而 SELinux 的访问控制基于所有可用信息,如 SELinux 用户、角色、类型以及可选的安全级别。
  • SELinux 策略由系统管理员进行定义,并在系统范围内强制执行。
  • 改进了权限升级攻击的缓解方案。进程在域中运行,因此是相互分离的。SELinux 策略规则定义了如何处理访问文件和其它进程。如果某个进程被破坏,攻击者只能访问该进程的正常功能,而且只能访问已被配置为可以被该进程访问的文件。例如:如果 Apache HTTP 服务器被破坏,攻击者无法使用该进程读取用户主目录中的文件,除非添加或者配置了特定的 SELinux 策略规则允许这类访问。
  • SELinux 可以用来强制实施数据机密性和完整性,同时保护进程不受不可信输入的影响。
但是,SELinux 本身并不是:
  • 防病毒软件,
  • 用来替换密码、防火墙和其它安全系统,
  • 多合一的安全解决方案。
SELinux 旨在增强现有的安全解决方案,而不是替换它们。即使运行 SELinux,也务必要继续遵循良好的安全实践,例如保持软件更新、使用难以猜测的密码或防火墙。
Red Hat logoGithubRedditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

© 2024 Red Hat, Inc.