1. Linux安全模块(LSM)核心架构解析
Linux Security Modules(LSM)是Linux内核中用于实现强制访问控制(MAC)的安全框架。与传统的自主访问控制(DAC)不同,LSM允许系统管理员定义更细粒度的安全策略。我在实际部署中发现,理解LSM的钩子机制是掌握其工作原理的关键——内核在关键系统调用路径上预设了超过200个安全钩子,这些钩子会调用已注册的安全模块进行权限决策。
LSM采用"堆叠式"设计,这意味着可以同时加载多个安全模块。但需要注意,并非所有模块都兼容堆叠使用。例如SELinux和AppArmor就不建议同时启用,而eBPF-LSM则设计为可与其他模块共存。内核通过security_xxx()函数族暴露这些钩子,模块开发者只需实现特定的回调函数即可介入安全决策流程。
重要提示:从Linux 5.7开始,LSM框架引入了BPF挂钩点,这使得通过eBPF程序动态实施安全策略成为可能,这也是近年来eBPF-LSM兴起的技术基础。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 主流LSM模块深度对比
2.1 SELinux:基于标签的强制访问控制
SELinux采用类型强制(TE)策略,每个对象(文件、进程等)都有安全上下文标签。策略规则定义了主体(如进程)对客体(如文件)的访问权限。实际配置时常见以下格式:
bash复制# 查看文件安全上下文
ls -Z /etc/passwd
system_u:object_r:passwd_file_t:s0 /etc/passwd
# 查看进程上下文
ps -Z $$
unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023
SELinux策略编写涉及.te、.fc、.if等多种文件类型,编译后生成二进制策略模块。我在生产环境中总结出几个关键经验:
- 使用
audit2allow工具快速生成策略修正建议 - 开发环境可先设为permissive模式记录违规行为
- 关键服务如nginx需要单独定义域转换规则
2.2 AppArmor:基于路径的访问控制
与SELinux不同,AppArmor通过路径名而非inode来识别对象。其策略语言更易读,例如:
code复制# /etc/apparmor.d/usr.sbin
