红帽SELinux资料-翻译---第一章-介绍

 

 

 

 

红帽企业 Linux 7 SELinux

用户和管理员指南

 

 

翻译者:李天聪       


 

 

第一章     介绍

安全性增强型 Linux (SELinux) 提供了额外的系统安全层。SELinux从根本上回答了这个问题:“<subject>可以对<object>做<action>吗?”,例如:“一个网络用户主 可以 访问 服务器目录中的文件吗?

基于用户、组和其他权限的标准访问策略,称为“自由裁量”访问控制(DAC),它不能使系统管理员创建全面、精粒度的安全策略,例如将特定应用程序限制为仅能够查看日志文件,同时允许其他应用程序将新数据写入到日志文件。

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 和 /var/tmp/ 中的文件和目录的类型通常是tmp_t。Web 服务端口的类型上下文是http_port_t。

例如,有一个策略规则允许 Apache(以 httpd_t 域运行的Web服务进程)去访问/var/www/html/目录和其他 Web 服务目录(在这些目录下文件的类型通常是httpd_sys_content_t)。由于策略中没有规则允许httpd_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(8)手册页和由 apropos selinux 命令列出的手册页。
  • 安装selinux-policy-doc package,然后用“man -k _selinux”命令查看手册。有关更多信息,请参见第 11.3.3 节 “服务手册页”。
  • SELinux 图画书(https://people.redhat.com/duffy/selinux/selinux-coloring-book_A4-Stapled.pdf)
  • SELinux Wiki FAQ

 

1.1 运行 SELINUX 的好处

SELinux 具有以下优点:

  • 所有进程和文件都已标记。

SELinux 策略规则定义进程如何与文件交互,以及进程之间如何相互作用。仅当存在专门的允许规则时,SELinux才允许访问。

  • 精细访问控制。

超越的传统UNIX那一套基于Linux用户和组ID的权限控制,SELinux 访问决策基于所有可用信息,例如 SELinux 用户、角色、类型以及(可选)安全级别。

  • SELinux 策略是管理定义的,并在系统范围内强制执行。

这句话原文是:“SELinux policy is administratively-defined and enforced system-wide”,翻译可能不准确。

  • 改进了对权限升级攻击的缓解措施。

进程在域中运行,并且因此彼此分离。SELinux 策略规则定义进程如何访问文件以及其他进程。如果进程遭到入侵,攻击者只能访问该进程的正常功能,以及此进程有权访问的文件。例如,如果Apache HTTP服务遭到入侵,则攻击者无法使用该进程读取用户主目录中的文件,除非添加或配置了特定的 SELinux 策略规则以允许此类访问。

  • SELinux可用于加强数据机密性和完整性,以及保护进程防止来自不可信的输入。

 

然而,SELinux不是:

  • 杀毒软件,
  • 密码转换、防火墙或其他安全系统,
  • 一体化安全解决方案

SELinux 旨在增强现有的安全解决方案,而不是取代它们。即使在SELinux运行的时候,依然是需要继续遵循良好的安全规范,例如持续更新软件,使用难以猜测的密码或使用防火墙。

 

1.2 例子

以下示例演示了 SELinux 如何提高安全性:

  • 默认操作为“拒绝”。

如果不存在允许访问的 SELinux 策略规则,例如一个试图打开文件的进程,访问被拒绝。

  • SELinux可以限制Linux用户。

SELinux 策略中存在许多受限的 SELinux 用户。Linux 用户可以映射到受限的 SELinux 用户以将有利于安全的规则和机制应用与他们。例如,将一个Linux 用户映射到 SELinux的user_u用户,会导致 Linux 用户无法运行(除非另有配置)设置用户ID(setuid)应用程序,例如sudo和su,以及阻止它们执行家目录中的应用程序。如果已配置,这将阻止用户执行家目录中的恶意文件。请参见第 3.3 节 “受限和不受限制的用户”了解更多信息。

  • 增加了进程和数据分离的机制。

进程运行在其自己的域中,从而阻止进程访问其他进程使用的文件,以及阻止进程访问其他进程。例如,在运行 SELinux 时,除非另有配置,否则攻击者无法在破坏了Samba服务器后,将这个Samba服务器用作攻击向量来读取或写入其他进程使用的文件,例如 MariaDB 数据库。

  • SELinux 有助于减轻配置错误造成的损害。

域名解析服务器(DNS)通常在所谓的域传送(zone transfer)中相互复制信息。攻击者可以使用域传机制送来更新具有虚假信息的DNS服务器。当在Red Hat Enterprise Linux上将伯克利互联网名称域(BIND)作为 DNS 服务器运行时,即使管理员忘记限制哪些服务器可以执行域传送,默认的 SELinux 策略也会阻止区域文件(包含 DNS 服务器使用的信息(如主机名到 IP 地址映射)的文本文件)被由BIND命名的守护程序本身或其他进程 利用域传送机制进行更新。

原文是“the default SELinux policy prevents zone files from being updated using zone transfers, by the BIND named daemon itself, and by other processes”,翻译可能不是很贴切。

请参阅文章:

NetworkWorld.com

http://www.networkworld.com/article/2283723/lan-wan/a-seatbelt-for-server-software--selinux-blocks-real-world-exploits.html),

服务器软件的安全带:SELinux 阻止现实世界漏洞利用

http://www.networkworld.com/article/2283723/lan-wan/a-seatbelt-for-server-software--selinux-blocks-real-world-exploits.html ),有关 SELinux 的背景信息,以及利用SELinux 阻止过的各种漏洞的信息。

 

1.3 SELINUX架构

SELinux 是内置在Linux内核中的Linux安全模块(LSM)。内核中的SELinux子系统由安全策略驱动,该策略由管理员控制并在引导时加载。系统上所有与安全相关的内核级访问操作都将被SELinux截获,并在加载的安全策略的上下文中进行检查。如果加载的策略允许该操作,则继续。否则,操作将被阻止,并且进程会收到错误。

SELinux 决策(例如允许或不允许访问)被缓存。此缓存称为访问矢量缓存 (AVC)。由于使用了这些缓存决策,较少需要检查 SELinux 策略规则,这提高了性能。请记住,如果DAC规则首先拒绝了访问,将不会用到SELinux 策略规则。

1.4 SELINUX 状态和模式

SELinux可以在以下三种模式之一下运行:disabled、 permissive、enforcing。

  • Disabled模式

强烈建议不要使用disabled模式;系统不仅不执行 SELinux 策略,而且还不在标记任何持久对象(如文件),使得将来难以启用 SELinux。

原文是:“not only does the system avoid enforcing the SELinux policy, it also avoids labeling any persistent objects such as files, making it difficult to enable SELinux in the future.”,这跟我们实际上选择disabled模式之后的现象是不符的,文件的安全标记(安全上下文)还是有的,而且将来要开启selinux时,也没有很“难”。

  • Permissive模式

在permissive模式下,系统的行为就像 SELinux 正在执行加载的安全策略一样,包括标记对象和在日志中记录访问拒绝日志,但它实际上并不会阻止任何操作。虽然不建议用于生产环境,但permissive模式对于SELinux 策略的开发工作很有用。

  • Enforcing模式

Enforcing模式是默认和推荐的操作模式;在Enforcing模式下SELinux正常运行,在整个系统上强制实施加载的安全策略。

使用 setenforce 命令可以在enforcing模式和permissive模式之间进行切换。所做的更改设置强制在重新启动后不会保留。要更改为enforcing模式,请以linux的root用户输入“setenforce 1”命令。要更改为permissive模式,请输入 “setenforce 0” 命令。getenforce命令用于查看当前 SELinux 模式:

 

在红帽企业 Linux 中,您可以在系统运行时将单个域设置为enforcing模式或permissive模式。例如,要将httpd_t域改为permissive:

有关更多信息,请参见第 11.3.4 节 “许可域”。

注意:持久状态和模式的更改在第 4.4 节 “永久更改SELinux 状态和模式”。

1.5 附加资源

红帽身份管理 (IdM) 提供了一个集中式解决方案来定义 SELinux 用户映射。更多详细信息,请参阅 《Linux域身份、身份验证和策略指南中的定义SELinux 用户映射》(https://access.redhat.com/documentation/en-US/Red_Hat_Enterprise_Linux/7/html/Linux_Domain_Identity_Authentication_and_Policy_Guide/selinux-mapping.html)。

 

posted @ 2023-05-23 11:31  94那抹微笑  阅读(54)  评论(0编辑  收藏  举报