AppArmor 常见问题和快速指南
- 2025-08-14 18:21:00
- 丁国栋
- 原创 4
AppArmor 是一种保护机制,这个保护机制让人又爱又恨,需要正确掌握和遇到问题时经常想到它。
例如你把 MySQL 的数据目录移动到了其他目录,而又把这个目录链接到 /var/lib/mysql,启动 MySQL 服务时依然报错 [Server] Can't create test file 或 OS errno 13 - Permission denied 或 [Server] Failed to create file 等,这都可能是 AppArmor 在拦截。
在这个例子中我们可以找到 /etc/apparmor.d/usr.sbin.mysqld 编辑添加我们需要允许 mysqld 访问的目录。
# Allow data dir access /var/lib/mysql/ r, /var/lib/mysql/** rwk, /data/mysql/ r, /data/mysql/** rwk,
在修改配置文件后,需要重新加载 AppArmor。
一般两种方法:
systemctl reload apparmor apparmor_parser -r /etc/apparmor.d/usr.sbin.mysqld如果不重新加载,AppArmor 可能依然会拦截。
---
AppArmor 它在拦截某个进程时,有时并不记录日志(这点令人不解)。例如我们以为可以使用命令 journalctl -u apparmor --no-pager
查看它的拦截日志,但并不能在这里找到。这时我们需要去查看内核日志,使用 dmesg 命令。
例如我们通过 dmesg 命令可以查找到以下信息:
audit: type=1400 audit(1755139115.947:235): apparmor="DENIED" operation="open" class="file" profile="/usr/sbin/mysqld" name="/data/mysql/auto.cnf" pid=10385 comm="mysqld" requested_mask="wrc" denied_mask="wrc" fsuid=107 ouid=107这样就很容易确认是 AppArmor 拦截的了。也可以直接使用
dmesg | grep 'apparmor="DENIED"'
来查找。
--
发表评论