温馨提示×

Linux SELinux如何与AppArmor比较

小樊
40
2025-12-10 07:48:44
栏目: 智能运维

Linux SELinux 与 AppArmor 对比

概览 两者都是 Linux 内核的 LSM(Linux Security Modules) 强制访问控制(MAC)机制,用来在进程与系统对象之间实施最小权限。差异核心在于:SELinux 以标签/类型(inode 为基础)实施细粒度策略,功能强大但复杂度高;AppArmor 以路径为中心,策略更直观、上手更快,适合快速为应用编写与部署配置文件。

关键差异对比

维度 SELinux AppArmor
安全标签与识别 给进程与客体打安全上下文/类型(基于 inode),跨重命名、硬链接等保持稳定 文件路径识别客体,策略直观
策略模型与粒度 基于域(domain)-类型(type),可精细到进程、文件、端口、能力等多类客体 围绕应用 profile声明允许的路径、能力、网络等,粒度相对更贴近应用
规则与编译 策略/规则体系复杂,常见需工具链与策略模块管理 规则无需编译,文本 profile 直接加载
文件系统依赖 需要支持安全标签/扩展属性的文件系统 文件系统无关,对 NFS 等场景更友好
默认与发行版 RHEL/CentOS/Fedora 默认启用 SUSE/openSUSE、Ubuntu 常见默认启用
模式与运维 三种模式:Enforcing/Permissive/Disabled;排错常用 getenforce/setenforcesemanagerestoreconaudit2allow 两种模式:Enforcing/Complain;排错常用 apparmor_statusaa-enforce/aa-complainaa-genprofaa-unconfined
典型排错 查看 AVC 拒绝日志,修正类型/端口/上下文(如 semanage portrestorecon 查看 complain 日志,生成/调整 profile(如 aa-genprof
上手难度 学习曲线更陡,但上限高、可覆盖复杂场景 更易上手,适合快速落地常见服务

以上对比要点来自对两者工作机制、命令与发行版默认策略的综合梳理。

如何选择

  • 追求更强的细粒度与系统性安全(多服务、多租户、复杂合规场景):优先 SELinux。其基于类型与域的模型、端口/上下文等策略对象更完备,适合长期、体系化的安全治理。
  • 需要快速为应用编写/部署限制(运维效率优先、已有大量存量服务):优先 AppArmor。路径匹配与 complain/学习模式显著降低门槛,便于快速收敛风险。

常用命令与最小上手示例

  • SELinux
    • 查看/切换模式:getenforcesetenforce 0|1
    • 策略与端口:semanage port -l | grep sshsemanage port -m -t ssh_port_t -p tcp 9999
    • 上下文与修复:ls -Zps -Zrestorecon -R /var/www
    • 日志与自助修复:查看 /var/log/audit/audit.logAVC 拒绝;必要时用 audit2allow 生成模块
  • AppArmor
    • 状态与模式:apparmor_statusaa-enforce <profile>aa-complain <profile>
    • 生成与排查:aa-genprof <cmd>aa-unconfined
    • 配置路径:profile 位于 /etc/apparmor.d/,可在 Enforcing/Complain 间切换以辅助编写与验证

0