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>- 用户临时文件
 
  