搬瓦工 VPS AppArmor 强制访问控制教程

AppArmor(Application Armor)是 Linux 内核中的强制访问控制(MAC)安全模块,默认集成于 Ubuntu 和 Debian 系统中。与 SELinux 相比,AppArmor 采用基于路径的访问控制方式,配置更加直观易懂,非常适合初次接触 Linux 安全加固的用户。本文将详细介绍如何在搬瓦工 VPS 上配置和管理 AppArmor,为服务器应用建立安全沙箱。

一、AppArmor 基本概念

AppArmor 通过配置文件(Profile)定义每个应用程序可以访问的系统资源,包括文件、网络、能力(Capabilities)等。核心概念如下:

  • 配置文件(Profile):定义单个应用程序的访问控制规则,存放在 /etc/apparmor.d/ 目录下。
  • Enforce 模式:强制执行策略,违规访问将被拒绝并记录日志。
  • Complain 模式:宽容模式,违规访问仅记录日志但不拒绝,适合调试使用。
  • 能力(Capabilities):控制进程可以使用的 Linux 内核能力,例如绑定特权端口、修改文件所有者等。

二、安装与启用 AppArmor

2.1 Ubuntu / Debian 系统

Ubuntu 系统默认已启用 AppArmor,可以通过以下命令确认状态:

aa-status

安装管理工具:

apt update
apt install apparmor-utils apparmor-profiles apparmor-profiles-extra -y

2.2 确认内核支持

# 检查内核是否加载 AppArmor
cat /sys/module/apparmor/parameters/enabled
# 输出 Y 表示已启用

# 查看 AppArmor 详细状态
aa-status

三、配置文件结构

3.1 配置文件位置

# 主配置文件目录
ls /etc/apparmor.d/

# 本地自定义覆盖目录
ls /etc/apparmor.d/local/

# 抽象规则库(可被其他配置文件引用)
ls /etc/apparmor.d/abstractions/

3.2 配置文件语法

以下是一个典型的 AppArmor 配置文件示例:

# /etc/apparmor.d/usr.local.bin.myapp
#include <tunables/global>

/usr/local/bin/myapp {
  #include <abstractions/base>
  #include <abstractions/nameservice>

  # 可执行文件
  /usr/local/bin/myapp mr,

  # 允许读取配置文件
  /etc/myapp/ r,
  /etc/myapp/** r,

  # 允许读写数据目录
  /var/lib/myapp/ rw,
  /var/lib/myapp/** rw,

  # 允许写入日志
  /var/log/myapp/ rw,
  /var/log/myapp/** rw,

  # 允许读取 /tmp
  /tmp/ r,
  /tmp/myapp-* rw,

  # 网络访问权限
  network tcp,
  network udp,

  # 能力控制
  capability net_bind_service,
  capability setuid,
  capability setgid,
}

3.3 权限标志说明

  • r - 读取
  • w - 写入
  • a - 追加
  • m - 内存映射可执行
  • k - 文件锁定
  • l - 硬链接
  • ix - 继承执行(使用当前配置文件)
  • Px - 使用目标程序自身的配置文件执行
  • Ux - 无限制执行(不受 AppArmor 管理)

四、管理配置文件模式

4.1 切换模式

# 将配置文件设为 enforce 模式
aa-enforce /etc/apparmor.d/usr.sbin.nginx

# 将配置文件设为 complain 模式
aa-complain /etc/apparmor.d/usr.sbin.nginx

# 禁用某个配置文件
aa-disable /etc/apparmor.d/usr.sbin.nginx

4.2 重新加载配置

# 重新加载所有配置文件
systemctl reload apparmor

# 重新加载指定配置文件
apparmor_parser -r /etc/apparmor.d/usr.sbin.nginx

# 加载新配置文件
apparmor_parser -a /etc/apparmor.d/usr.local.bin.myapp

五、为 Nginx 创建 AppArmor 配置

5.1 自动生成配置文件

# 使用 aa-genprof 自动生成
aa-genprof nginx

此命令会启动交互式配置生成器,在另一个终端窗口中正常使用 Nginx,aa-genprof 会根据实际的系统调用生成配置文件。

5.2 手动创建 Nginx 配置文件

cat > /etc/apparmor.d/usr.sbin.nginx <<'EOF'
#include <tunables/global>

/usr/sbin/nginx {
  #include <abstractions/base>
  #include <abstractions/nameservice>
  #include <abstractions/openssl>
  #include <abstractions/ssl_certs>

  capability net_bind_service,
  capability setuid,
  capability setgid,
  capability dac_override,

  /usr/sbin/nginx mr,
  /etc/nginx/ r,
  /etc/nginx/** r,
  /var/log/nginx/ rw,
  /var/log/nginx/** rw,
  /var/www/ r,
  /var/www/** r,
  /run/nginx.pid rw,
  /var/lib/nginx/ r,
  /var/lib/nginx/** rw,

  network tcp,
  network udp,
}
EOF
apparmor_parser -r /etc/apparmor.d/usr.sbin.nginx

六、使用 aa-logprof 优化策略

当应用程序运行在 complain 模式下时,AppArmor 会记录所有本应被拒绝的操作。使用 aa-logprof 分析日志并更新策略:

# 将 Nginx 设为 complain 模式
aa-complain /etc/apparmor.d/usr.sbin.nginx

# 正常使用 Nginx 一段时间后,分析日志
aa-logprof

# 确认策略完善后切换到 enforce 模式
aa-enforce /etc/apparmor.d/usr.sbin.nginx

七、AppArmor 与 Docker

Docker 默认支持 AppArmor,并为容器应用默认策略。可以创建自定义策略:

# 查看 Docker 默认使用的 AppArmor 配置文件
docker inspect --format='{{.AppArmorProfile}}' container_name

# 使用自定义 AppArmor 配置文件运行容器
docker run --security-opt apparmor=my-custom-profile nginx

# 禁用容器的 AppArmor(不推荐)
docker run --security-opt apparmor=unconfined nginx

八、故障排查

8.1 查看日志

# 查看 AppArmor 拒绝日志
dmesg | grep apparmor

# 查看审计日志中的 AppArmor 记录
grep apparmor /var/log/syslog

# 使用 journalctl 查看
journalctl -k | grep apparmor

8.2 常见问题

如果应用程序无法正常运行,先切换到 complain 模式观察日志:

aa-complain /etc/apparmor.d/usr.sbin.nginx
systemctl restart nginx
# 观察 /var/log/syslog 中的 ALLOWED 记录
# 根据记录调整配置文件
aa-logprof
aa-enforce /etc/apparmor.d/usr.sbin.nginx

总结

AppArmor 是 Ubuntu 和 Debian 系统上强大而易用的强制访问控制工具,能够有效限制应用程序的权限范围,防止被攻破的应用危害整个系统。在搬瓦工 VPS 上建议为所有对外服务(如 Nginx、MySQL 等)配置 AppArmor 策略。更多安全加固方案可参考 SELinux 配置教程CrowdSec 安全引擎。选购搬瓦工 VPS 请参考 全部方案,购买时使用优惠码 NODESEEK2026 可享受 6.77% 的折扣,通过 bwh81.net 进入官网购买。

关于本站

搬瓦工VPS中文网(bwgvps.com)是非官方中文信息站,整理搬瓦工的方案、优惠和教程。我们不销售主机,不提供技术服务。

新手必读
搬瓦工优惠码

NODESEEK2026(优惠 6.77%)

购买时填入即可抵扣。