如何查看AppArmor是否阻止了MySQL的违规操作?
美国、香港服务器
如何查看AppArmor是否阻止了MySQL的违规操作?
12-20 来源:
要查看 AppArmor 是否阻止了 MySQL 的违规操作,核心是检查系统日志中的 AppArmor 拦截记录,同时可结合进程行为验证,以下是具体方法:
一、 核心方法:查看 AppArmor 拦截日志
AppArmor 会将所有拒绝操作(DENIED)、投诉记录(COMPLAIN) 写入系统日志,默认存储路径为 /var/log/syslog(Ubuntu/Debian 系统),部分场景也会写入 /var/log/auth.log 或 /var/log/kern.log。
1. 直接过滤 MySQL 相关的拦截日志
执行以下命令,筛选所有与 MySQL 相关的 AppArmor 拦截记录:
bash
运行
# 查看 DENIED 记录(强制模式下的拦截行为)
sudo grep -i "apparmor=DENIED" /var/log/syslog | grep -i mysqld
# 查看 COMPLAIN 记录(投诉模式下的违规提醒,未实际拦截)
sudo grep -i "apparmor=COMPLAIN" /var/log/syslog | grep -i mysqld
2. 日志内容解读(关键字段)
一条典型的 AppArmor 拦截日志示例如下:
plaintext
Oct 20 10:30:00 ubuntu kernel: [12345.678901] audit: type=1400 audit(1729400000.123:45): apparmor="DENIED" operation="open" profile="/usr/sbin/mysqld" name="/root/test.txt" pid=6789 comm="mysqld" requested_mask="w" denied_mask="w" fsuid=112 ouid=0
关键字段说明:
字段 含义 作用
apparmor="DENIED" 操作被拒绝 确认 AppArmor 拦截了该行为
profile="/usr/sbin/mysqld" 触发规则的进程配置 确认是 MySQL 进程被拦截
operation="open" 被拦截的操作类型 如 open(文件读写)、connect(网络连接)、exec(命令执行)
name="/root/test.txt" 被拦截的目标资源 确认 MySQL 尝试访问的敏感路径 / 文件
requested_mask="w" 进程请求的权限 r= 读、w= 写、x= 执行、k= 锁定
pid=6789 触发拦截的进程 PID 可通过 ps -p 6789 确认进程详情
3. 实时监控日志(动态观察违规行为)
若需要实时查看 MySQL 的违规操作,可使用 tail 命令跟踪日志:
bash
运行
# 实时监控 DENIED 记录
sudo tail -f /var/log/syslog | grep -i "apparmor=DENIED.*mysqld"
此时模拟 MySQL 违规操作(如尝试写入 /root 目录),终端会实时输出拦截日志。
二、 辅助验证:模拟违规操作触发拦截
为了确认日志监控的有效性,可主动模拟 MySQL 的违规行为,验证 AppArmor 是否拦截:
切换到 MySQL 运行用户
MySQL 进程默认以 mysql 用户运行,执行以下命令切换身份:
bash
运行
sudo -u mysql bash
执行违规操作
根据 AppArmor 配置中的禁止规则,执行越权操作,例如:
bash
运行
# 尝试写入敏感目录 /root(配置中已禁止)
touch /root/mysql_test.txt
# 尝试执行 shell 命令(配置中禁止访问 /bin/bash)
/bin/bash
检查日志是否生成拦截记录
退出 mysql 用户,执行日志过滤命令,若能看到 DENIED 记录,说明 AppArmor 拦截生效。
三、 排查无拦截日志的常见原因
若模拟违规操作后未生成拦截日志,可能是以下问题导致:
AppArmor 未处于强制模式
检查 MySQL 的 AppArmor 模式,确保为 enforce:
bash
运行
sudo aa-status | grep mysqld
若显示 complain,需切换到强制模式:
bash
运行
sudo aa-enforce /usr/sbin/mysqld
sudo systemctl restart mysql
配置文件未加载或语法错误
重新加载配置文件并检查语法:
bash
运行
sudo apparmor_parser -v -r /etc/apparmor.d/usr.sbin.mysqld
若出现 syntax error,需修正配置文件中的格式错误(如缺少逗号、路径错误)。
违规操作未命中禁止规则
检查 AppArmor 配置文件,确认禁止规则是否覆盖了当前的违规操作。例如:
若尝试写入 /tmp 目录但未被拦截,可能是配置中未添加 deny /tmp/** rw 规则;
若尝试访问外部网络未被拦截,可能是配置中未限制 network 权限。
四、 日志持久化:配置 AppArmor 日志集中存储(可选)
若服务器日志轮转频繁,可配置 AppArmor 日志单独存储,避免拦截记录被覆盖:
编辑 rsyslog 配置文件:
bash
运行
sudo nano /etc/rsyslog.d/99-apparmor.conf
添加以下内容,将 AppArmor 日志定向到 /var/log/apparmor.log:
ini
# 记录 AppArmor 所有日志
:programname, isequal, "apparmor" /var/log/apparmor.log
:programname, isequal, "kernel" /var/log/apparmor.log
# 避免日志重复写入 syslog
& stop
重启 rsyslog 服务生效:
bash
运行
sudo systemctl restart rsyslog
后续查看 MySQL 拦截日志时,直接过滤该文件:
bash
运行
sudo grep -i "mysqld" /var/log/apparmor.log
三二互联专业提供香港VPS,美国VPS主机,香港云服务器租用等业务香港美国到大陆CN2 GIA速度最快