522 字
3 分钟
apparmor
AppArmor (Application Armor) 是 Linux 系统的强制访问控制 (MAC) 框架,通过路径名控制程序访问资源。相比 SELinux,AppArmor 配置更简单直观。
基本概念
AppArmor 有三种模式:
- enforce:强制执行策略,违规操作被阻止
- complain:仅记录违规,不阻止操作
- unconfined:不受 AppArmor 控制
基本命令
查看状态:
sudo aa-statusapparmor_status
查看配置文件状态:
sudo aa-status --pretty
模式切换:
# 切换到 complain 模式sudo aa-complain /path/to/profile# 切换到 enforce 模式sudo aa-enforce /path/to/profile# 禁用配置文件sudo aa-disable /path/to/profile
配置文件结构
配置文件位于 /etc/apparmor.d/
,基本语法:
#include <tunables/global>
/usr/bin/program { #include <abstractions/base>
# 文件访问权限 /etc/passwd r, # 只读 /tmp/** rw, # 读写 /usr/bin/other-program Px, # 执行并切换配置文件
# 网络权限 network inet tcp, network inet udp,
# 能力权限 capability setuid, capability net_bind_service,
# 信号权限 signal send set=(term) peer=/usr/bin/target,}
权限类型
文件权限:
r
- 读取w
- 写入x
- 执行m
- 内存映射k
- 文件锁定l
- 创建硬链接
执行权限:
ix
- 继承当前配置文件执行Px
- 切换到目标程序配置文件Cx
- 切换到子配置文件Ux
- 不受限制执行
实用配置示例
Web服务器配置:
/usr/sbin/nginx { #include <abstractions/apache2-common>
capability setuid, capability setgid, capability net_bind_service,
/var/log/nginx/** w, /var/www/** r, /run/nginx.pid w,
network inet tcp, network inet6 tcp,}
开发和调试
生成配置文件:
# 自动生成基础配置文件sudo aa-genprof /usr/bin/program# 更新现有配置文件sudo aa-logprof
查看日志:
# 查看违规日志sudo dmesg | grep apparmorjournalctl | grep apparmor# 查看详细日志sudo aa-notify -p
调试模式:
# 设为 complain 模式进行测试sudo aa-complain /usr/bin/program# 执行程序触发访问# 检查日志并更新配置文件sudo aa-logprof# 确认无误后切换到 enforce 模式sudo aa-enforce /usr/bin/program
管理技巧
批量操作:
# 重新加载所有配置文件sudo systemctl reload apparmor# 重新加载特定配置文件sudo apparmor_parser -r /etc/apparmor.d/usr.bin.program
实用abstractions:
<abstractions/base>
- 基础系统访问<abstractions/nameservice>
- DNS解析<abstractions/ssl_certs>
- SSL证书访问<abstractions/user-tmp>
- 用户临时文件