522 字
3 分钟
apparmor
2025-07-27

AppArmor (Application Armor) 是 Linux 系统的强制访问控制 (MAC) 框架,通过路径名控制程序访问资源。相比 SELinux,AppArmor 配置更简单直观。

基本概念#

AppArmor 有三种模式:

  • enforce:强制执行策略,违规操作被阻止
  • complain:仅记录违规,不阻止操作
  • unconfined:不受 AppArmor 控制

基本命令#

查看状态:

sudo aa-status
apparmor_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 apparmor
journalctl | 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> - 用户临时文件
apparmor
https://blog.lpkt.cn/posts/apparmor/
作者
lollipopkit
发布于
2025-07-27
许可协议
CC BY-NC-SA 4.0