温馨提示×

Ubuntu中SELinux与AppArmor区别

小樊
39
2025-12-24 08:41:48
栏目: 智能运维

Ubuntu 中 SELinux 与 AppArmor 的差异与选型

概览与定位

  • SELinuxAppArmor 都是 Linux 内核的 强制访问控制(MAC) 机制,但设计哲学与实现路径不同。
  • Ubuntu 默认集成并启用 AppArmorSELinux 常见于 RHEL、Fedora、CentOS 等发行版。
  • SELinux 由 NSASCC 发起,2000 年开源2003 年并入上游内核;AppArmor 则以“为应用绑定配置文件、路径白名单式管控”见长。

核心差异对比

维度 AppArmor SELinux
控制模型 基于路径的访问控制,按可执行程序绑定配置文件(白名单) 基于安全标签(用户:角色:类型:级别),以**类型强制(TE)**为核心
默认与生态 Ubuntu 默认启用;openSUSE 亦默认;预置大量服务 profile RHEL/Fedora/CentOS 默认启用;提供 targeted / MLS 等策略
文件系统依赖 对文件系统无扩展属性依赖,部署与迁移更省心 需要支持扩展属性(xattrs)与正确的标签管理
策略编写与维护 规则无需编译,语法直观;有 aa-genprof / aa-logprof 辅助生成与调优 规则以 TE/策略模块 为主,常借助 audit2allow / semodule 编译与加载
模式与日志 两种模式:enforce(阻断违规)/ complain(仅告警,便于“学习”) 三种模式:enforcing / permissive / disabled;拒绝会记录 avc: denied
安全边界与绕过 路径可被重命名/移动而失效,边界相对更“弱”但易用 标签与 inode 绑定更稳固,对复杂场景的细粒度控制更强
典型命令 aa-status / aa-enforce / aa-complain / systemctl reload apparmor getenforce / setenforce / sestatus / semanage / audit2allow / semodule

在 Ubuntu 的默认状态与基本操作

  • 查看与切换 AppArmor
    • 查看状态:sudo apparmor_status
    • 切换模式:sudo aa-enforce /usr/sbin/nginxsudo aa-complain /usr/sbin/nginx
    • 重新加载:sudo systemctl reload apparmor
    • 发现未受限进程:sudo aa-unconfined
  • 查看与切换 SELinux(若已安装启用)
    • 查看状态:getenforce / sestatus
    • 临时切换:setenforce 0|1(Permissive/Enforcing)
    • 策略与日志:semanage / audit2allow / semodule;拒绝日志常见为 /var/log/messages 中的 avc: denied

选型建议

  • 追求开箱即用、运维成本低、以服务为边界的“够用安全”:优先 AppArmor(Ubuntu 原生支持、规则直观、complain 模式便于生成与调试)。
  • 需要更强的细粒度与体系化策略、面向多用户/多域/复杂合规场景:倾向 SELinux(标签体系与类型强制更强,但学习与管理成本更高)。
  • 无论选择哪种,建议先在 Permissive/Complain 模式完成观察与调优,再切至 Enforcing 模式上线。

0