For the complete documentation index, see llms.txt. This page is also available as Markdown.

19.3.了解 MAC 标签

MAC 标签是可应用于系统中主体和对象的安全属性。在设置标签时,管理员必须理解其影响,以防止系统出现意外或不良行为。对象上可用的属性取决于加载的策略模块,因为策略模块会以不同的方式解释其属性。

对象上的安全标签作为安全访问控制决策的一部分,由策略使用。某些策略中,标签包含了做出决策所需的所有信息;而在其他策略中,标签可能作为更大规则集的一部分处理。

标签策略有两种类型:单标签和多标签。默认情况下,系统将使用单标签。管理员应该了解每种策略的优缺点,以便实施符合系统安全模型要求的策略。

单标签安全策略仅让每个主体或对象使用一个标签。由于单标签策略在整个系统中强制实施一套访问权限,它提供了较低的管理开销,但降低了支持标签的策略的灵活性。然而,在许多环境中,单标签策略可能就足以满足需求。

单标签策略与 DAC(自主访问控制)有些相似,root 配置策略,将用户归入适当的类别和访问级别。显著区别在于,许多策略模块也可限制 root。对对象的基本控制将下放给组,但 root 可随时撤销或修改这些设置。

在适当的情况下,可通过将 multilabel 传递给 tunefs(8) 在 UFS 文件系统上设置多标签策略。多标签策略让每个主体或对象能拥有其自己的独立 MAC 标签。只有当策略实现标签功能时,才需要决定使用多标签还是单标签策略,例如 bibalomacmls。一些策略,如 seeotheruidsportaclpartition,根本不使用标签。

在分区上使用多标签策略并建立多标签安全模型可能会增加管理开销,因为文件系统中的每个项目(包括目录、文件甚至设备节点)都有一个标签。

以下命令将在指定的 UFS 文件系统上设置 multilabel。此操作只能在单用户模式下执行,对交换文件系统则无此要求:

# tunefs -l enable /

注意

一些用户在根分区上设置 multilabel 标志时遇到问题。如果是这种情况,请查阅 MAC 框架故障排除

由于多标签策略是按文件系统设置的,因此如果文件系统布局设计良好,则可能不需要多标签策略。例如,考虑 FreeBSD Web 服务器的安全 MAC 模型。这台机器对默认文件系统中的所有内容使用单标签 biba/high。如果 Web 服务器需要以 biba/low 运行以防止向上写入能力,它可安装到单独的 UFS /usr/local 文件系统,该文件系统设置为 biba/low

19.3.1. 标签配置

几乎所有标签策略模块的配置都将使用基本系统工具执行。这些命令提供了简单的接口,用于配置对象或主体,或者用于操作和验证配置。

所有配置都可使用 setfmacsetpmac 来完成,其中 setfmac 用于设置系统对象的 MAC 标签,setpmac 用于设置系统主体的标签。例如,要将 biba MAC 标签设置为 high,应用于 test

# setfmac biba/high test

如果配置成功,命令提示符将返回而没有错误。常见的错误是 Permission denied,通常发生在设置或修改受限对象的标签时。其他情况可能会产生不同的失败。例如,文件可能不是尝试重新标记该对象的用户拥有的,或者对象可能不存在,或者对象可能是只读的。强制性策略将使进程不能重新标记文件,可能是由于文件、进程或提议的新标签值的某个属性。例如,如果以低完整性运行的用户尝试更改高完整性文件的标签,或者以低完整性运行的用户尝试将低完整性文件的标签更改为高完整性标签,则这些操作将失败。

系统管理员可使用 setpmac 来覆盖策略模块的设置,为调用的进程分配不同的标签:

对于当前正在运行的进程(例如 sendmail),通常使用 getpmac 代替。此命令需要传递进程 ID(PID),而不是命令名。如果用户试图操作不在其访问范围内的文件,受加载的策略模块规则约束,则会显示 Operation not permitted 错误。

19.3.2. 预定义标签

一些支持标签功能的 FreeBSD 策略模块提供了三个预定义标签:lowequalhigh,它们的含义如下:

  • low 被认为是对象或主体可能具有的最低标签设置。将此标签设置在对象或主体上,将阻止它们访问标记为 high 的对象或主体。

  • equal 设置主体或对象为禁用或不受影响,仅应放置在被视为免受策略影响的对象上。

  • high 赋予对象或主体在 Biba 和 MLS 策略模块中可用的最高设置。

这些策略模块包括 mac_biba(4)mac_mls(4)mac_lomac(4)。每个预定义标签都会建立不同的信息流指令。请参考模块的手册页,以确定通用标签配置的特征。

19.3.3. 数字标签

Biba 和 MLS 策略模块支持可设置的数字标签,用于表示精确的层级控制级别。此数字级别用于将信息划分或排序到不同的分类组中,只能访问该组或更高级别的组。例如:

这可解释为“Biba 策略标签/等级 10:隔离区 2、3 和 6:(等级 5 …)”

在此示例中,第一个等级将被视为有效等级及其有效的隔离区,第二个等级是低等级,最后一个是高等级。在大多数配置中,这种精细的设置并不需要,因为它们被认为是高级配置。

系统对象只有当前的等级和隔离区。系统主体反映了系统中可用权限的范围;标签也应用于网络接口,用于访问控制。

主体和对象对中的等级和隔离区用于构建称为 支配 的关系,在这种关系中,主体支配对象,对象支配主体,或者两者都不支配对方,或者两者都支配对方。当两个标签相等时,就会发生“双方支配”的情况。由于 Biba 的信息流特性,用户具有一组对应于项目的隔离区的权限,但对象也有一组隔离区。用户可能需要使用 susetpmac 来缩小其权限范围,以便访问他们不受限制的隔离区中的对象。

19.3.4. 用户标签

用户需要具有标签,以便其文件和进程能与系统上定义的安全策略正确交互。这些配置位于 /etc/login.conf 中,使用登录类配置。每个使用标签的策略模块将实现用户类设置。

要设置将由 MAC 强制实施的用户类默认标签,可添加 label 条目。下面是包含每个策略模块的 label 条目示例。请注意,在实际配置中,管理员永远不会启用所有策略模块。建议在实施任何配置之前,先审阅本章的其余部分。

虽然用户不能修改默认值,但在登录后,他们可在策略约束下更改自己的标签。上面的示例告诉 Biba 策略,进程的最低完整性是 5,最大完整性是 15,默认有效标签为 10。进程将以 10 运行,直到它选择更改标签,可能是由于用户使用 setpmac,这将由 Biba 限制在配置的范围内。

login.conf 的任何更改后,必须使用 cap_mkdb 重建登录类能力数据库。

许多站点有大量的用户,需要多个不同的用户类。因为这可能变得难以管理,所以需要深入规划。

19.3.5. 网络接口标签

可在网络接口上设置标签,以帮助控制数据在网络中的流动。使用网络接口标签的策略,其功能与针对对象的策略相同。例如,Biba 中设置为高完整性的用户将不能访问标签为 low 的网络接口。

设置网络接口上的 MAC 标签时,可将 maclabel 传递给 ifconfig

此示例将 bge0 接口的 MAC 标签设置为 biba/equal。当使用类似于 biba/high(low-high) 的设置时,应该用引号将整个标签括起来,以防止返回错误。

每个支持标签的策略模块都有可调参数,可用于禁用网络接口上的 MAC 标签。将标签设置为 equal 将产生类似的效果。请查看 sysctl 输出、策略手册页以及本章其余部分中的信息,了解有关这些可调参数的更多信息。

最后更新于