AppArmor(Application Armor)是 Linux 内核的一个安全模块
AppArmor(Application Armor)是 Linux 内核的一个安全模块,用于通过限制应用程序的权限来增强系统安全性。它通过定义每个程序可以访问的文件、网络端口、进程等资源,实现最小权限原则(Principle of Least Privilege),从而减少潜在的攻击面。
1. AppArmor 的核心概念
-
基于路径的访问控制:
AppArmor 的规则基于文件路径(而非传统的 SELinux 的标签系统),配置更直观。 -
配置文件(Profile):
每个受保护的应用程序都有一个对应的配置文件(通常位于/etc/apparmor.d/
),明确允许或禁止其访问特定资源。 -
两种模式:
-
Enforce(强制模式):拒绝违反规则的访问并记录日志。
-
Complain(投诉模式):仅记录违规行为但不阻止(用于调试)。
-
2. AppArmor 的作用
-
限制应用程序行为:
例如,禁止 Apache 访问用户家目录,或限制 MySQL 只能读写特定数据库文件。 -
防御零日漏洞:
即使应用程序存在漏洞,AppArmor 也能阻止攻击者利用漏洞访问无关资源。 -
容器安全:
在 Docker/LXC 等容器环境中,AppArmor 可限制容器的权限(如阻止容器访问宿主机设备)。
3. AppArmor vs SELinux
4. 常见操作命令
检查状态
sudo apparmor_status
输出示例:
apparmor module is loaded.X profiles are loaded.X profiles are in enforce mode.X profiles are in complain mode.
禁用/启用
-
临时禁用:
sudo systemctl stop apparmor
-
永久禁用(不推荐):
sudo systemctl disable apparmor
切换模式
-
将配置文件设为投诉模式(仅记录不阻止):
sudo aa-complain /path/to/profile
-
重新设为强制模式:
sudo aa-enforce /path/to/profile
日志查看
AppArmor 的日志通常记录在 /var/log/syslog
或 /var/log/audit/audit.log
(取决于系统配置):
sudo grep \"apparmor\" /var/log/syslog
5. 实际案例
问题场景
-
某次启动 KVM 虚拟机时,AppArmor 阻止了
libvirtd
访问磁盘镜像:audit: type=1400 audit(1620000000.123:456): apparmor=\"DENIED\" operation=\"open\" profile=\"/usr/sbin/libvirtd\" path=\"/var/lib/libvirt/images/vm.qcow2\"
解决方案
-
查看当前规则:
sudo cat /etc/apparmor.d/usr.sbin.libvirtd
-
修改规则(添加允许访问的路径):
sudo nano /etc/apparmor.d/usr.sbin.libvirtd
在文件中添加:
/var/lib/libvirt/images/** rw,
-
重新加载配置:
sudo apparmor_parser -r /etc/apparmor.d/usr.sbin.libvirtd
6. 注意事项
-
不要盲目禁用 AppArmor:
虽然禁用可以快速解决问题,但会降低系统安全性。建议优先调整规则。 -
调试技巧:
遇到权限问题时,先将相关配置文件设为complain
模式,通过日志定位具体拒绝项。 -
与容器配合:
Docker 默认使用 AppArmor 限制容器,自定义规则需放在/etc/apparmor.d/docker/
。
总结
AppArmor 是 Linux 中轻量级且易用的安全模块,适合通过配置文件限制应用程序权限。在虚拟化、容器和高安全需求场景中尤为有用。遇到权限问题时,结合日志和规则调整(而非直接关闭)是最佳实践。