第 6 章 使用多级别安全(MLS)
多级别安全(Multi-Level Security,简称 MLS)策略使用许可级别的概念,这个概念首先由美国国防人员设计。MLS 满足一组非常严格的安全要求,这基于在严格控制的环境中管理的信息(如军事)。
使用 MLS 非常复杂,不适合于一般用例场景。
6.1. 多级别安全(MLS)
多级别安全(MLS)技术使用信息安全级别将数据分为分级分类,例如:
- [Low] 非保密
- [low] 保密
- [high] 机密
- [Highest] 顶端机密
默认情况下,MLS SELinux 策略使用 16 敏感度级别:
-
s0
是最敏感的。 -
s15
是最敏感的。
MLS 使用特定的术语来代表敏感度级别:
- 用户和进程称为 主题(subjects),其敏感度级别被称为 安全权限(clearance)。
- 系统文件、设备和其他被动组件称为 对象(objects),其敏感度级别被称为安全级别(classification)。
为了实施 MLS,SELinux 使用 Bell-La Padula Model (BLP)模型。这个模型根据附加到每个主体和对象的标签指定系统中如何进行信息流。
BLP 的基本原则是"不能从上面读取,不能向下面写入”。这意味着用户只能读取自己的敏感度级别及更低级别的文件,数据只能从较低级别流入到更高级别,且不会从高级别流向低级别。
MLS SELinux 策略(RHEL 中的 MLS 实现)应用一个名为 Bell-La Padula with write equality 的经过修改的原则。这意味着,用户可以在自己的敏感度级别和更低级别中读取文件,但只能在自己的级别上写入。例如,这可以防止不明确的用户将内容写入 top-secret 文件中。
例如,默认情况下,具有安全许可级别 s2
的用户:
-
可以读取敏感度级别为
s0
、s1
和s2
的文件。 -
无法读取敏感度级别为
s3
及更高等级的文件。 -
可以修改敏感级别为
s2
的文件。 -
无法修改敏感级别不是
s2
的文件。
安全管理员可以通过修改系统的 SELinux 策略来调整此行为。例如,可以允许用户修改更低级别的文件,这需要将文件的敏感级别增加到用户的安全许可级别。
实际上,用户通常会被分配为具有一系列的安全许可级别,如 s1-s2
。用户可以读取级别低于用户的最大级别的文件,并可以写入该范围内的任何文件。
例如,默认情况下,用户有一个安全许可级别范围 s1-s2
:
-
可以读取具有敏感度级别
s0
和s1
的文件。 -
不能读取级别
s2
及更高等级的文件。 -
可以修改具有敏感度级别
s1
的文件。 -
无法修改敏感级别不是
s1
的文件。 -
可以将自己的安全许可级别更改为
s2
。
MLS 环境中非特权用户的安全上下文是:
user_u:user_r:user_t:s1
其中:
user_u
- 是 SELinux 用户。
user_r
- 是 SELinux 角色。
user_t
- 是 SELinux 类型。
s1
- 是 MLS 敏感度级别的范围。
系统始终将 MLS 访问规则与传统的文件访问权限合并。例如,如果具有安全级别 "Secret" 的用户使用 Discretionary Access Control(DAC)来阻止其他用户对文件的访问,即使"Top Secret"用户无法访问该文件。较高的安全许可不会自动允许用户浏览整个文件系统。
拥有顶级别的用户不会自动获得多级系统的管理权限。虽然他们可能有访问有关系统的所有敏感信息的权限,但这与有管理权限不同。
此外,管理权限不提供对敏感信息的访问权限。例如,即使某人以 root
身份登录,它们仍然无法读取 top-secret 信息。
您可以使用类别进一步调整 MLS 系统中的访问。使用多类别安全性(MCS),您可以定义项目或部门等类别,用户只能访问为其分配的类别中的文件。如需更多信息,请参阅 使用多类别 Security(MCS)获取数据保密性。