Linux SELinux 与 AppArmor 的核心差异
概览 两者都是 Linux 内核通过 LSM(Linux Security Modules) 框架实现的 强制访问控制(MAC) 机制,但侧重点不同:SELinux 以系统级的“标签/类型”为核心,策略表达能力强、细粒度与一致性更高;AppArmor 以“应用/路径”为核心,配置文件直观、上手和维护成本更低。常见发行版默认选择也不同:RHEL/CentOS/Fedora 倾向默认启用 SELinux,而 Ubuntu/openSUSE 通常默认启用 AppArmor。
关键差异对比
| 维度 | SELinux | AppArmor |
|---|---|---|
| 控制粒度与定位 | 系统级 MAC,面向主体/客体标签的全局策略 | 应用级 MAC,围绕进程/程序的配置文件 |
| 标识方式 | 给文件、进程等对象打上安全上下文标签(基于 inode) | 以文件路径匹配为主 |
| 策略语言与复杂度 | 类型强制(TE)、角色(RBAC)、MLS/MCS 等,规则体系复杂 | 基于配置文件的访问控制列表,语法直观 |
| 学习与调优 | 需理解标签/类型/域,配合工具逐步收敛策略 | 提供complain/学习模式,可先记录违规再生成/调整配置 |
| 文件系统依赖 | 依赖支持安全标签的文件系统(如 ext4 启用 xattrs) | 文件系统无关,对挂载类型更友好 |
| 默认与生态 | RHEL/CentOS/Fedora 默认启用,生态与工具链成熟 | Ubuntu/openSUSE 默认启用,预置大量应用配置 |
| 典型命令/工具 | getenforce、setenforce、sepolicy、audit2allow | apparmor_status、aa-complain、aa-enforce、apparmor_parser |
| 适用场景 | 高安全合规、细粒度最小权限、复杂多域环境 | 快速为关键应用(如 Nginx/MySQL)加“安全带”,容器/主机加固 |
上述要点分别来自对两者工作原理、发行版默认策略、管理命令与工具、以及文件系统依赖性的公开资料与运维实践总结。
如何选择
实践建议