第 2 章 SELinux Contexts


进程和文件使用 SELinux 上下文标记,其中含有其他信息,如 SELinux 用户、角色、类型以及可选的级别。运行 SELinux 时,所有这些信息都用于做出访问控制决策。在红帽企业 Linux 中,SELinux 提供了基于角色的访问控制(RBAC)、类型强制(TE)和可选的多级别安全(MLS)的组合。
以下是显示 SELinux 上下文的示例。SELinux 上下文在运行 SELinux 的 Linux 操作系统上用于进程、Linux 用户和文件。使用以下命令查看文件和目录的 SELinux 上下文:
~]$ ls -Z file1
-rwxrw-r--  user1 group1 unconfined_u:object_r:user_home_t:s0      file1
SELinux 上下文遵循 SELinux user:role:type:level 语法。这些字段如下:
SELinux user
SELinux 用户身份是策略已知的身份,它授权用于一组特定的角色,以及特定的 MLS/MCS 范围。每个 Linux 用户都使用 SELinux 策略映射到 SELinux 用户。这允许 Linux 用户继承对 SELinux 用户的限制。映射的 SELinux 用户身份在该会话中进程的 SELinux 上下文中使用,以定义它们可以进入哪些角色和级别。以 root 身份输入以下命令,查看 SELinux 和 Linux 用户帐户之间的映射列表(您需要安装 policycoreutils-python 软件包):
~]# semanage login -l
Login Name           SELinux User         MLS/MCS Range        Service

__default__          unconfined_u         s0-s0:c0.c1023       *
root                 unconfined_u         s0-s0:c0.c1023       *
system_u             system_u             s0-s0:c0.c1023       *
输出可能因系统稍有不同:
  • Login Name 列列出了 Linux 用户。
  • SELinux User 列列出了 Linux 用户映射到的 SELinux 用户。对于进程,SELinux 用户限制可以访问哪些角色和级别。
  • MLS/MCS Range 列,是多级别安全(MLS)和 Multi-Category Security (MCS)使用的级别。
  • Service 列决定正确的 SELinux 上下文,其中 Linux 用户应该登录到系统。默认情况下,会使用星号(*)字符,代表任何服务。
role
SELinux 的一部分是基于角色的访问控制(RBAC)安全模型。该角色是 RBAC 的一个属性。SELinux 用户获得角色的授权,并且域对角色进行了授权。该角色充当域和 SELinux 用户之间的中介。可以输入的角色决定了可以输入哪些域;最后,这控制可以访问哪些对象类型。这有助于降低对特权升级攻击的漏洞。
type
type 是 Type Enforcement 的属性。类型定义进程的域,以及文件的类型。SELinux 策略规则定义类型如何互相访问,无论是访问某一类型的域还是访问其他域的域。只有在存在允许访问的特定 SELinux 策略规则时才允许访问。
level
级别是 MLS 和 MCS 的属性。MLS 范围是一组级别,如果级别不同,则编写为 低级级别,如果级别不同,则级别 较低 (s0-s0s0相同)。每个级别都是敏感度类别对,类别是可选的。如果有类别,则该级别被写为 敏感度:category-set。如果没有类别,它将被写为 敏感度
如果设置的类别是连续的序列,则可缩写它。例如,c0.c3c0,c1,c2,c3 相同。/etc/selinux/targeted/setrans.conf 文件将级别(s0:c0)映射到人类可读的表单(即 CompanyConfidential)。在 Red Hat Enterprise Linux 中,目标策略强制执行 MCS 和 MCS,它只是一个敏感度 s0。Red Hat Enterprise Linux 中的 MCS 支持 1024 个不同的类别: c0c1023.s0-s0:c0.c1023 是敏感度 s0,并授权所有类别。
MLS 强制执行 Bell-La Padula Mandatory 访问模型,用于标记安全保护配置文件(LSPP)环境。要使用 MLS 限制,请安装 selinux-policy-mls 软件包,并将 MLS 配置为默认 SELinux 策略。Red Hat Enterprise Linux 附带的 MLS 策略省略了不属于评估配置一部分的许多程序域,因此桌面工作站上的 MLS 不可用(不支持 X Window 系统),但上游 SELinux Reference Policy 中的 MLS 策略可以被构建,其中包括所有程序域。有关 MLS 配置的更多信息,请参阅 第 4.13 节 “多级别安全(MLS)”

2.1. 域转换

一个域中的进程通过执行具有新域 的入口点 类型的应用程序来转换到另一个域。入口点 权限在 SELinux 策略中使用,并控制哪些应用程序可用于进入域。以下示例演示了一个域转换:

过程 2.1. 域转换示例

  1. 用户想要更改其密码。为此,它们运行 passwd 实用程序。/usr/bin/passwd 可执行文件使用 passwd_exec_t 类型标记:
    ~]$ ls -Z /usr/bin/passwd
    -rwsr-xr-x  root root system_u:object_r:passwd_exec_t:s0 /usr/bin/passwd
    
    passwd 实用程序访问 /etc/shadow,它标有 shadow_t 类型:
    ~]$ ls -Z /etc/shadow
    -r--------. root root system_u:object_r:shadow_t:s0    /etc/shadow
    
  2. SELinux 策略规则指出,在 passwd_t 域中运行的进程可以读取和写入标有 shadow_t 类型的文件。shadow_t 类型仅应用于密码更改所需的文件。这包括 /etc/gshadow/etc/shadow 及其备份文件。
  3. SELinux 策略规则指出 passwd_t 域将其 入口点 权限设置为 passwd_exec_t 类型。
  4. 当用户运行 passwd 实用程序时,用户的 shell 进程将转换到 passwd_t 域。使用 SELinux 时,由于默认操作是拒绝的,并且存在允许(长于其他事情)在 passwd_t 域中运行的应用程序访问通过 shadow_t 类型标记的文件,因此允许 passwd 应用访问 /etc/shadow 并更新用户密码。
这个示例并不详尽,用作解释域转换的基本示例。虽然存在允许 passwd_t 域中运行的实际规则访问使用 shadow_t 文件类型标记的对象,但必须满足其他 SELinux 策略规则,然后才能过渡到新域。在本例中,Type Enforcement 可确保:
  • passwd_t 域只能通过执行标有 passwd_exec_t 类型的应用程序输入;只能从授权的共享库(如 lib_t 类型)执行;且无法执行任何其他应用。
  • 只有 passwd_t 等授权域才能写入标有 shadow_t 类型的文件。即使其他进程以超级用户特权运行,这些进程也无法写入标有 shadow_t 类型的文件,因为它们不在 passwd_t 域中运行。
  • 只有授权域才能转换到 passwd_t 域。例如, sendmail _t 域中运行的 sendmail 进程没有执行 passwd 的合法原因;因此,它永远不会过渡到 passwd_t 域。
  • passwd_t 域中运行的进程只能读取和写入授权类型,例如标有 etc_tshadow_t 类型的文件。这样可防止 passwd 应用程序在读取或写入任意文件中变得复杂。
Red Hat logoGithubRedditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

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

让开源更具包容性

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

關於紅帽

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

© 2024 Red Hat, Inc.