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
特性 | AppArmor | SELinux |
---|---|---|
配置方式 | 基于文件路径 | 基于安全上下文(标签) |
学习曲线 | 较低(规则更直观) | 较高(需理解标签和策略语言) |
默认启用 | Ubuntu、Debian、OpenSUSE | RHEL、Fedora、CentOS |
适用场景 | 桌面/服务器应用 | 高安全需求环境(如政府、军事) |
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 中轻量级且易用的安全模块,适合通过配置文件限制应用程序权限。在虚拟化、容器和高安全需求场景中尤为有用。遇到权限问题时,结合日志和规则调整(而非直接关闭)是最佳实践。