Nature 图表复现 | 扇形图
2026/3/26 13:19:25
现代 Linux 系统的安全防护不仅依赖传统权限模型(DAC),还需要更强的强制访问控制(MAC)机制。SELinux 与 AppArmor 是目前最主流的两大 MAC 框架,它们通过策略约束进程行为,从根本上降低系统被入侵后的破坏范围。本文将从原理、配置、策略管理、排错与最佳实践等方面,系统性介绍如何使用 SELinux 与 AppArmor 增强系统安全性。
| 项目 | SELinux | AppArmor |
|---|---|---|
| 控制模型 | 基于标签(Label) | 基于路径(Path) |
| 策略复杂度 | 高,学习曲线陡峭 | 低,易于编写 |
| 默认发行版 | RHEL/CentOS/Fedora | Ubuntu/Debian/SUSE |
| 安全性 | 更强、更细粒度 | 足够强但粒度略粗 |
| 策略管理工具 | semanage、setsebool、audit2allow | aa-status、aa-enforce、aa-complain |
| 适用场景 | 高安全要求、企业级生产环境 | 快速部署、开发环境、轻量级系统 |
sestatus getenforce临时切换:
setenforce1# Enforcingsetenforce0# Permissive永久修改/etc/selinux/config:
SELINUX=enforcing查看标签:
ls-Zps-Z修改文件标签:
semanage fcontext -a -t httpd_sys_content_t"/web(/.*)?"restorecon -Rv /web查看所有布尔值:
getsebool -a启用某项策略(如允许 Apache 访问网络):
setsebool -P httpd_can_network_connect on查看日志:
ausearch -m avc -ts recent自动生成策略:
audit2allow -aUbuntu 默认启用,可检查:
aa-status启用 AppArmor:
systemctlenableapparmor systemctl start apparmor/etc/apparmor.d/:主策略目录/etc/apparmor.d/local/:本地覆盖策略切换模式:
aa-enforce /etc/apparmor.d/usr.bin.nginx aa-complain /etc/apparmor.d/usr.bin.nginx生成模板:
aa-genprof /usr/bin/myapp手动编辑策略示例:
/usr/bin/myapp { /var/log/myapp/** rw, /etc/myapp/config r, network inet stream, }查看当前策略状态:
aa-status查看日志:
journalctl -t apparmor不建议同时启用两者,可能导致策略冲突。
semanage管理标签而非手动chconaa-genprof自动生成策略/etc/apparmor.d/local/SELinux 与 AppArmor 都是 Linux 世界中强大的安全模块,通过强制访问控制机制有效限制进程行为,降低系统被攻破后的风险。SELinux 提供更强的安全性与细粒度控制,而 AppArmor 则以易用性著称。根据系统环境与安全需求选择合适的方案,并结合最佳实践进行配置,可以显著提升系统整体安全性。