Comment on page
18.5.可用的 MAC 策略
FreeBSD 默认的内核选项包括 MAC。这意味着在 MAC 框架中的每个模块都可以用
kldload
作为运行时内核被加载。在测试完模块后,将模块名称添加到 /boot/loader.conf 中,这样它就会在启动时加载。每个模块都为那些选择自己编译内核的管理员提供了一个内核选项。FreeBSD 包含一组策略,这些策略可满足大多数安全要求。每项策略总结如下。最后三个策略支持整数设置来代替三个默认标签。
模块名称: mac_seeotheruids.ko
内核配置选项:
options MAC_SEEOTHERUIDS
引导选项:
mac_seeotheruids_load="YES"
mac_seeotheruids(4) 模块扩展了
security.bsd.see_other_uids
和 security.bsd.see_other_gids sysctl
可调控项。这个选项不需要在配置前设置任何标签,并且可以与其他模块透明地运行。加载模块后,可以使用以下
sysctl
可调参数来控制其功能:security.mac.seeotheruids.enabled
启用该模块并实现默认设置,这些设置拒绝用户查看其他用户拥有的进程和套接字。security.mac.seeotheruids.specificgid_enabled
允许指定的组豁免于此策略。要豁免特定的组,使用security.mac.seeotheruids.specificgid=XXX sysctl tunable
,用要豁免的数字组 ID 代替 XXX。security.mac.seeotheruids.primarygroup_enabled
用于将特定的主群组从该策略中豁免。当使用这个调整时,security.mac.seeotheruids.specificgid_enabled
可能不会被设置。
模块名称: mac_bsdextended.ko
内核配置选项:
options MAC_BSDEXTENDED
引导选项:
mac_bsdextended_load="YES"
mac_bsextended(4) 模块强制执行文件系统防火墙。它提供标准文件系统权限模型的扩展,允许管理员创建类似防火墙的规则集来保护文件系统层次结构中的文件、实用程序和目录。当尝试访问文件系统对象时,将迭代规则列表,直到找到匹配的规则或到达结束。此行为可以使用
security.mac.bsdextended.firstmatch_enabled
来更改。类似于 FreeBSD 中的其他防火墙模块,可以被系统在启动时使用 rc.conf(5) 变量创建和读取包含访问控制规则的文件。# ugidfw list
0 slots, 0 rules
默认情况下,没有定义规则,所有内容都是完全可访问的。创建一个禁止用户访问但不影响
root
用户访问的规则:# ugidfw add subject not uid root new object not uid root mode n
虽然这个规则实现起来很简单,但却是一个非常糟糕的主意,因为它阻止所有用户发布任何命令。一个更现实的例子是阻止
user1
对 user2
的主目录的所有访问,包括目录列表:# ugidfw set 2 subject uid user1 object uid user2 mode n
# ugidfw set 3 subject uid user1 object gid user2 mode n
为了对所有用户执行相同的访问限制,
not uid user2
可以用来代替 user1
。然而,root
用户不受这些规则的影响。