Linux 安全模块使用

Linux 安全模块 (LSM) 框架提供了一种机制,允许新的内核扩展挂钩各种安全检查。 “模块”这个名字有点用词不当,因为这些扩展实际上并不是可加载的内核模块。 相反,它们可以在编译时通过 CONFIG_DEFAULT_SECURITY 进行选择,并且在给定的内核中构建了多个 LSM 的情况下,可以在启动时通过 "security=..." 内核命令行参数进行覆盖。

LSM 接口的主要用户是提供综合安全策略的强制访问控制 (MAC) 扩展。 示例包括 SELinux、Smack、Tomoyo 和 AppArmor。 除了较大的 MAC 扩展外,还可以使用 LSM 构建其他扩展,以在 Linux 本身的核心功能中无法提供这些微调时,为系统操作提供特定的更改。

Linux capabilities 模块将始终被包含。 其后可以跟任意数量的“次要”模块和最多一个“主要”模块。 有关 capabilities 的更多详细信息,请参阅 Linux man-pages 项目中的 capabilities(7)

可以通过读取 /sys/kernel/security/lsm 找到活动安全模块的列表。 这是一个逗号分隔的列表,并将始终包含 capability 模块。 该列表反映了进行检查的顺序。 capability 模块将始终排在第一位,其次是任何“次要”模块(例如 Yama),如果配置了一个“主要”模块(例如 SELinux),则紧随其后。

与“主要”安全模块关联的进程属性应使用 /proc/.../attr 中的特殊文件进行访问和维护。 安全模块可以在该目录下维护一个以该模块命名的特定子目录。/proc/.../attr/smack 由 Smack 安全模块提供,并包含其所有特殊文件。 直接位于 /proc/.../attr 中的文件保留为提供子目录的模块的遗留接口。