服务器AppArmor配置:从启用、调整到排错的实操步骤

AppArmor 是 Linux 内核提供的一种强制访问控制机制,可以限制某个程序能读写哪些文件、能使用哪些网络能力。
如果你在 Ubuntu 或 Debian 服务器上运行 Nginx、MySQL、Docker,系统通常已经默认启用了 AppArmor。服务器 AppArmor 配置的核心思路是:先确认当前状态,再根据程序实际需要调整策略,最后验证是否生效,而不是直接关闭它。

本文适用于 Ubuntu 22.04/24.04 或 Debian 12 等使用 AppArmor 的服务器,操作需要 root 或 sudo 权限。
执行前建议先对关键配置做备份,避免误改导致服务无法启动。

先确认 AppArmor 是否在运行

登录服务器后,先检查内核模块和用户态工具是否就绪:

sudo aa-status
sudo systemctl status apparmor

如果 aa-status 输出类似 apparmor module is loaded,并列出 enforce、complain 模式下的进程数量,说明 AppArmor 正常工作。
若提示命令不存在,可安装:

sudo apt update
sudo apt install apparmor apparmor-utils

安装后再次执行 sudo aa-status。
预期结果是看到已加载的策略列表,例如 nginx、docker 等。

理解 enforce 与 complain 两种模式

AppArmor 对每个程序有两种主要工作模式:

  • enforce:按策略执行,违规操作会被拒绝,程序可能报错或功能异常。
  • complain:只记录违规行为,不拦截,适合调试规则。

查看某个程序的当前模式:

sudo aa-status | grep nginx

切换模式时,先切到 complain 观察日志,确认没有异常再切回 enforce:

sudo aa-complain /etc/apparmor.d/usr.sbin.nginx
sudo aa-enforce /etc/apparmor.d/usr.sbin.nginx

修改模式后无需重启 Nginx,AppArmor 会立即生效。

为 Nginx 添加自定义访问规则

当 Nginx 需要访问默认策略未允许的目录时,会出现权限拒绝。
例如你把网站根目录改到 /data/www,Nginx 可能无法读取。

先查看 Nginx 的策略文件路径:

ls /etc/apparmor.d/ | grep nginx

常见文件为 /etc/apparmor.d/usr.sbin.nginx。
编辑前备份:

sudo cp /etc/apparmor.d/usr.sbin.nginx /etc/apparmor.d/usr.sbin.nginx.bak
sudo vi /etc/apparmor.d/usr.sbin.nginx

在文件末尾的 } 之前添加允许规则,例如允许读写 /data/www 和日志目录:

/data/www/ r,
/data/www/** rwk,
/var/log/nginx/** rw,

保存后重新加载策略:

sudo apparmor_parser -r /etc/apparmor.d/usr.sbin.nginx

然后重启 Nginx 并访问站点,确认页面正常打开。

处理常见的权限拒绝报错

AppArmor 拒绝操作时,内核日志会记录 apparmor="DENIED"。
用下面命令实时查看:

sudo dmesg | grep -i apparmor
sudo journalctl -k | grep apparmor

如果看到类似 operation="open" denied_mask="r" name="/data/www/index.html",
说明需要为对应路径添加读权限。

另一种情况是服务启动失败但日志不明确。
可以临时把该程序切到 complain 模式,重现操作后再看日志:

sudo aa-complain /etc/apparmor.d/usr.sbin.nginx
sudo systemctl restart nginx

根据日志补充规则后,再切回 enforce 模式。不要长期停留在 complain 模式,否则安全限制等于没有生效。

避坑与验证

调整 AppArmor 时容易踩的坑:

  • 直接执行 sudo systemctl stop apparmor 或卸载 AppArmor,虽然省事,但会失去一层安全防护。
  • 修改策略后忘记执行 apparmor_parser -r,规则不会重新加载。
  • 规则路径写错,例如漏掉末尾的 / 或 **,导致通配不生效。
  • 多个策略文件冲突时,以实际加载的 profile 为准,可用 sudo aa-status 确认。

验证配置是否生效,可以故意访问一个未授权的路径,观察是否被拒绝,同时在 dmesg 中查看是否有对应 DENIED 记录。
如果服务功能正常且日志无异常拒绝,说明配置基本可用。

总结:
服务器 AppArmor 配置应先确认状态,
再用 complain 模式收集日志,
按需补充路径规则,
最后切回 enforce 并验证。
如果你的服务器运行的是宝塔面板或其他自编译环境,
策略文件位置可能不同,
建议先用 aa-status 定位实际 profile 名称再操作。

分享到:
上一篇
服务器Hosts文件配置教程:域名解析指向与生效验证
下一篇
服务器Swap分区优化:从创建到调优的完整操作
1
系统公告

泽御云中秋国庆双节活动上线:新购8折,拼团3.99元起

尊敬的用户:
泽御云“月满中秋·礼贺国庆”双节活动现已开启,活动时间为2026年9月23日至10月10日。 活动期间可享以下福利:
1. 常规云服务器新购使用优惠码“泽御中秋国庆同乐”,符合条件的订单享8折优惠。
2. 香港精品云服务器5人拼团低至3.99元,部分4核4G套餐3人拼团年付388元,续费同价。
3. 新用户购买年付云服务器,符合活动规则可赠送2个月使用时长。
4. 老用户续费季度赠15天,续费年度赠2个月;活动期间升级配置免收配置迁移手续费。
5. 推荐好友成功下单,符合条件的推荐人可获赠7天服务器使用时长。
6. 活动期间享宕机补偿标准翻倍、简单网站迁移协助及技术工单优先处理权益。
温馨提示:优惠码不适用于拼团套餐、活动轻量产品、年付订单及续费订单;拼团套餐为独立特价活动,不与赠时类福利叠加。赠送时长不可折现、退款或跨账户转移,具体规则以活动页面说明为准。
服务中心
客服
在线客服
24小时为您服务
咨询
联系我们
联系我们,为您的业务提供专属服务。
24/7 技术支持
如果您遇到寻求进一步的帮助,请过工单与我们进行联系。
24/7 即时支持
泽御云
售前客服
泽御云
泽御云
售后客服
泽御云
技术支持
评价
您对当前页面的整体感受是否满意?
😞
非常不满意
😕
不满意
😐
一般
🙂
满意
😊
非常满意