SELinux 与 AppArmor 的配置,增强系统安全性
现代 Linux 系统的安全防护不仅依赖传统权限模型(DAC),还需要更强的强制访问控制(MAC)机制。SELinux 与 AppArmor 是目前最主流的两大 MAC 框架,它们通过策略约束进程行为,从根本上降低系统被入侵后的破坏范围。本文将从原理、配置、策略管理、排错与最佳实践等方面,系统性介绍如何使用 SELinux 与 AppArmor 增强系统安全性。
一、SELinux 与 AppArmor 概述
🛡️ 1.1 SELinux(Security-Enhanced Linux)
- 由 NSA 开发,后由社区维护
- 基于 标签(Label) 的强制访问控制
- 策略复杂但安全性极高
- 广泛用于 RHEL、CentOS、Fedora 等发行版
🧩 1.2 AppArmor(Application Armor)
- 由 SUSE/Ubuntu 推广
- 基于 路径(Path) 的访问控制
- 策略简单、易上手
- 默认用于 Ubuntu、Debian、SUSE
二、SELinux 与 AppArmor 对比表
| 项目 | SELinux | AppArmor |
|---|---|---|
| 控制模型 | 基于标签(Label) | 基于路径(Path) |
| 策略复杂度 | 高,学习曲线陡峭 | 低,易于编写 |
| 默认发行版 | RHEL/CentOS/Fedora | Ubuntu/Debian/SUSE |
| 安全性 | 更强、更细粒度 | 足够强但粒度略粗 |
| 策略管理工具 | semanage、setsebool、audit2allow | aa-status、aa-enforce、aa-complain |
| 适用场景 | 高安全要求、企业级生产环境 | 快速部署、开发环境、轻量级系统 |
三、SELinux 配置与管理
🔧 3.1 查看 SELinux 状态
bash
sestatus
getenforce
🔄 3.2 设置 SELinux 模式
- Enforcing(强制):严格执行策略
- Permissive(宽容):不阻止行为但记录日志
- Disabled(关闭)
临时切换:
bash
setenforce 1 # Enforcing
setenforce 0 # Permissive
永久修改 /etc/selinux/config:
SELINUX=enforcing
🏷️ 3.3 管理文件与进程标签
查看标签:
bash
ls -Z
ps -Z
修改文件标签:
bash
semanage fcontext -a -t httpd_sys_content_t "/web(/.*)?"
restorecon -Rv /web
🔐 3.4 管理布尔策略(Booleans)
查看所有布尔值:
bash
getsebool -a
启用某项策略(如允许 Apache 访问网络):
bash
setsebool -P httpd_can_network_connect on
🛠️ 3.5 处理 SELinux 拒绝(denials)
查看日志:
bash
ausearch -m avc -ts recent
自动生成策略:
bash
audit2allow -a
四、AppArmor 配置与管理
📦 4.1 安装与启用
Ubuntu 默认启用,可检查:
bash
aa-status
启用 AppArmor:
bash
systemctl enable apparmor
systemctl start apparmor
📁 4.2 AppArmor 配置文件路径
/etc/apparmor.d/:主策略目录/etc/apparmor.d/local/:本地覆盖策略
🧪 4.3 模式切换
- enforce:强制执行
- complain:仅记录不阻止
切换模式:
bash
aa-enforce /etc/apparmor.d/usr.bin.nginx
aa-complain /etc/apparmor.d/usr.bin.nginx
✍️ 4.4 创建与编辑策略
生成模板:
bash
aa-genprof /usr/bin/myapp
手动编辑策略示例:
/usr/bin/myapp {
/var/log/myapp/** rw,
/etc/myapp/config r,
network inet stream,
}
🧹 4.5 查看与排错
查看当前策略状态:
bash
aa-status
查看日志:
bash
journalctl -t apparmor
五、SELinux 与 AppArmor 的部署策略
📌 5.1 选择哪一个?
- 企业级生产环境 → SELinux
- 快速部署、轻量级系统 → AppArmor
- Ubuntu 系统 → 默认 AppArmor
- RHEL 系统 → 默认 SELinux
🧩 5.2 混合使用?
不建议同时启用两者,可能导致策略冲突。
六、最佳实践(可直接纳入安全基线)
✔ 6.1 通用最佳实践
- 始终使用 Enforcing 模式(生产环境)
- 使用 Permissive 模式调试
- 定期审计日志
- 为关键服务编写最小权限策略
✔ 6.2 SELinux 最佳实践
- 使用
semanage管理标签而非手动chcon - 使用布尔值简化策略调整
- 定期备份策略模块
✔ 6.3 AppArmor 最佳实践
- 使用
aa-genprof自动生成策略 - 将自定义策略放入
/etc/apparmor.d/local/ - 使用 complain 模式调试新策略
七、总结
SELinux 与 AppArmor 都是 Linux 世界中强大的安全模块,通过强制访问控制机制有效限制进程行为,降低系统被攻破后的风险。SELinux 提供更强的安全性与细粒度控制,而 AppArmor 则以易用性著称。根据系统环境与安全需求选择合适的方案,并结合最佳实践进行配置,可以显著提升系统整体安全性。