Red Hat Training
A Red Hat training course is available for Red Hat Enterprise Linux
第 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 用户列中列出了 Linux 用户映射至哪个 SELinux 用户。对于进程,SELinux 用户限制可以访问哪些角色和级别。MLS/MCS Range列是多级别安全(MLS)和多类别安全(MCS)使用的级别。Service列决定了正确的 SELinux 上下文,在该上下文中,Linux 用户应当登录该系统。默认情况下,使用星号(*)字符,它代表任何服务。
- role
- SELinux 的一部分是基于角色的访问控制(RBAC)安全模型。该角色是 RBAC 的一个属性。SELinux 用户获得角色的授权,并且域对角色进行了授权。该角色充当域和 SELinux 用户之间的中介。可以输入的角色决定了可以输入哪些域;最后,这控制可以访问哪些对象类型。这有助于降低对特权升级攻击的漏洞。
- type
- type 是 Type Enforcement 的属性。类型定义进程的域,以及文件的类型。SELinux 策略规则定义类型如何互相访问,无论是访问某一类型的域还是访问其他域的域。只有在存在允许访问的特定 SELinux 策略规则时才允许访问。
- level
- 级别是 MLS 和 MCS 的属性。MLS 范围是一对级别,如果级别不同,则写为 低级别-高级别 ,如果级别相同(
s0-s0与s0相同)。每个级别都是敏感度类别对,类别是可选的。如果有类别,则该级别被写为 敏感度:category-set。如果没有类别,它将被写为 敏感度。如果设置的类别是连续的序列,则可缩写它。例如,c0.c3与c0,c1,c2,c3相同。/etc/selinux/targeted/setrans.conf文件将级别(s0:c0)映射到人类可读形式(即CompanyConfidential)。在红帽企业 Linux 中,目标策略强制 MCS,在 MCS 中,只有一个敏感度s0。红帽企业 Linux 中的 MCS 支持 1024 个不同的类别:c0到c1023。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 系统);但是,可以构建包含所有程序域的 MLS 策略。有关 MLS 配置的详情请参考 第 4.13 节 “多级别安全(MLS)”。
2.1. 域转换
个域中的进程通过执行具有新域
入口点 类型的应用,过渡到另一个域。入口点 权限用于 SELinux 策略,并控制哪些应用程序可用于进入域。以下示例演示了一个域转换:
过程 2.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/passwdpasswd实用程序访问/etc/shadow,其标有shadow_t类型:~]$ls -Z /etc/shadow -r--------. root root system_u:object_r:shadow_t:s0 /etc/shadow - SELinux 策略规则规定,在
passwd_t域中运行的进程被允许读取和写入使用shadow_t类型标记的文件。shadow_t类型仅应用于密码更改所需的文件。这包括/etc/gshadow、/etc/shadow及其备份文件。 - SELinux 策略规则指出,
passwd_t域的入口点权限设置为passwd_exec_t类型。 - 用户运行
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_t 或类型标记的文件。这可防止shadow_tpasswd应用被欺骗为读取或编写任意文件。