红帽SELinux资料-翻译---第二章-SELinux安全上下文

发布时间 2023-08-03 19:36:32作者: 94那抹微笑

 

第一章     SELinux安全上下文

进程和文件标有包含附加信息的SELinux上下文,例如SELinux 用户、角色、类型以及级别(可选)。运行 SELinux 时,所有这些信息都用于做出访问控制决策。在红帽企业Linux中,SELinux 提供了基于角色的访问控制(RBAC)类型强制(TE)多级安全性(MLS)(可选)。

下面是一个展示SELinux上下文的示例。SELinux 上下文用于进程、Linux用户和文件,在运行SELinux的Linux操作系统上。可以使用以下命令查看文件和目录的 SELinux 上下文:

 

SELinux 上下文遵循 SELinux user:role:type:level 语法。字段如下:

  • SELinux user

SELinux用户身份是策略已知的身份,它被授权用于一组特定的角色,以及特定的MLS/MCS 范围。基于SELinux策略,每个Linux用户都映射到一个 SELinux 用户,这允许Linux用户继承对 SELinux 用户的限制。这个被映射的SELinux用户标识在SELinux上下文中用于该会话中的进程,以便定义他们可以进入的角色和级别。以root身份输入以下命令以查看SELinux和Linux用户帐户之间的映射(您需要安装policycoreutils-python软件包):

 

输出可能因系统而异:

  “Login Name”列,列出了 Linux 用户。

  “SELinux User”列,列出了Linux 用户映射到哪个SELinux用户。对进程来说,SELinux用户限制了可访问的角色和级别。

  “MLS/MCS Range”列,是多级安全性 (MLS) 和多类别安全 (MCS)。

  “Service”列,确定正确的SELinux上下文,其中Linux用户应该登录到系统。默认情况下,使用星号(*)字符,即代表任何服务。

原文为:“The Service column determines the correct SELinux context, in which the Linux user is supposed to be logged in to the system. By default, the asterisk (*) character is used, which stands for any service.”,翻译可能不准确。

  • Role

SELinux的一部分是基于角色的访问控制(RBAC)安全模型。角色是RBAC的一个属性。SELinux用户被授权使用角色,角色被授权用于域。角色服务作为域和SELinux用户之间的中介。可以进入哪个角色决定了可以进入哪些域;最终,这将控制可以访问哪些对象类型。这帮助减少权限升级攻击的漏洞。

  • Type

类型是类型强制的一个属性。类型定义进程的域,或文件的类型。SELinux策略规则定义了类型如何相互访问,无论是一个域访问一个类型,或一个域访问另一个域。仅当存在特定的允许SELinux策略规则时才允许访问。

  • Level

级别是MLS和MCS的属性。一个MLS范围是一对级别(也就是由开始级别到结束级别的一个范围),如果(开始和结束)级别不同,则写为“低级别-高级别”;如果(开始和结束)级别相同,则为“低级别”(或“高级别”,反正相同)( S0-S0 与 S0 相同)。每个级别是一个敏感度类别对,类别是可选的。

如果有类别,则级别为写为“敏感度:类别集”。如果没有类别,则写为“敏感度”。

如果类别集是连续集合,则可以缩写。例如,c0.c3 与C0,C1,C2,C3相同。/etc/selinux/targeted/setrans.conf文件将级别(s0:c0)映射为人类可读的表格(即公司机密)。在红帽企业Linux中,目标策略强制实施MCS,而在 MCS 中,只有一个灵敏度:s0。红帽企业Linux 中的 MCS 支持 1024 种不同的类别:C0 到 C1023。S0-S0:C0.C1023是灵敏度S0,授权用于所有类别。

MLS 强制执行Bell-La Padula强制访问模型,并用于标记安全性保护配置文件(LSPP)环境。要使用MLS限制,需要安装 “selinux-policy-mls”软件包,并将MLS配置为默认的SELinux策略。红帽企业Linux附带的MLS策略省略了许多不属于评估项的进程域,因此,桌面工作站上的MLS是不可用的(不支持 XWindow系统);但是,来自上游SELinux参考策略的MLS策略可以构建包括所有程序域。有关MLS配置的更多信息,请参见第4.13节,“多级安全性(MLS)”。

原文为:“however, an MLS policy from the upstream SELinux Reference Policy can be built that includes all program domains.”,翻译可能不准确。

2.1 域转换

一个域中的进程通过执行一个具有新域入口点(entrypoint)类型的应用来进入这个新的域。SELinux 策略中的入口点(entrypoint)许可用于控制哪些应用程序可以进入一个域。下面是一个域转换的例子:

  1. 一个用户想要更改密码。为此,他要运行passwd程序。/usr/bin/passwd 可执行文件被标记为passwd_exec_t类型:

   

              passwd程序会访问/etc/shadow文件,它被标记为shadow_t类型:

   

  1. SELinux策略规则规定允许在passwd_t域中运行的进程读取和写入被标记为 shadow_t 类型的文件。shadow_t类型仅适用于密码更改所需的文件,包括/etc/gshadow、/etc/shadow和他们的备份文件。
  2. SELinux策略规则声明passwd_t域拥有passwd_exec_t类型的入口点(entrypoint)权限
  3. 当用户运行passwd程序时,用户的shell进程将转换为passwd_t域。使用SELinux,由于默认操作是拒绝,并且存在策略允许(以及其他一些内容)在passwd_t域中运行的进程访问shadow_t类型的文件,所以passwd应用程序是被允许访问/etc/shadow,并更新用户密码的。

此示例并非详尽无遗,只是一个用作解释域转换的基本示例。虽然有一个实际的规则允许在passwd_t域中运行的进程访问标记为shadow_t类型的文件,但是在进程可以转换为新域之前,依然有一些其他的SELinux规则需要设置好。在此示例中,需要确保以下几条:

  • passwd_t域只能通过执行passwd_exec_t类型的程序来进入;只能从授权的共享库执行,例如lib_t类型;并且无法执行任何其他应用程序。
  • 只有被授权的域(如 passwd_t)才能写入类型为shadow_t的文件。即使其他进程以超级用户权限运行,只要它们不在passwd_t域中运行,这些进程也无法写入类型为shadow_t的文件。
  • 只有被授权的域才能转换到passwd_t域。例如,sendmail程序在sendmail_t域中运行,它没有正当理由去执行passwd,因此,它永远无法转换到passwd_t域。
  • 在passwd_t域中运行的进程只能读取和写入被授权类型,例如etc_t或shadow_t类型的文件。这可以防止passwd应用程序被诱骗读取或写入任意文件。

2.2 进程的SELinux安全上下文

用“ps -eZ”命令,可以查看进程的SELinux安全上下文,下面是一个例子:

  • 查看passwd进程的 SELinux 上下文

1)      打开一个终端。

2)      执行passwd程序,然后不要输入新密码。

 

3)      此时打开一个新的终端,然后输入下面的命令,输出将是下面这样:

 

4)      然后再回到第一个终端窗口,按下“Ctrl+C”来结束passwd进程。

在这个例子中,当我们执行passwd程序时(这个程序文件是被标记为passwd_exec_t类型的),用户的shell进程转换成了passwd_t域,值得注意的是:进程的type被称为“域”,文件的type被称为“类型”。

要看所有进程的SELinux安全上下文,只要执行“ps -eZ”即可。注意,下面是输出的一部分,并且可能跟你的系统上执行的结果不一样。

 

       其中的“system_r”是用于系统进程的,比如守护进程。类型强制(TE)会将每个域都分离开。

2.3 用户的SELinux安全上下文

运行下面的命令可以查看与你的linux用户相关的安全上下文:

 

       在红帽企业Linux中,Linux用户的运行不受限制。这条SELinux上下文表Linux用户映射到SELinux 用户unconfined_u,以unconfined_r角色运行,并且在unconfined_t域中运行。s0-s0是一个 MLS 范围,在本例中,它与s0相同。用户有权访问的类别由c0.c1023 定义,即所有类别(c0到c1023)。