MySQL设置secure_file_priv为空仍无法读文件,如何关闭AppArmor对mysqld的保护?
问题说明
已将secure_file_priv设为空,目标文件存在内容,但MySQL 5.7.33-0ubuntu0.16.04.1执行LOAD_FILE('/tmp/flag')返回NULL。
- 以mysql用户执行
cat /tmp/flag可正常读取:$ su -c 'cat /tmp/flag' mysql flag{444} - 文件权限详情:
-rwxrwxrwx 1 mysql mysql 10 7 18 11:21 flag -rwxrwxrwx 1 mysql root 10 7 18 14:23 flag1 -rwxrwxrwx 1 kali kali 11 7 18 14:25 flag2 - 仅flag2无法通过
LOAD_FILE读取,sudo aa-status显示AppArmor已加载,/usr/sbin/mysqld处于强制模式。
关闭AppArmor对mysqld的保护方法
临时生效(重启后恢复)
- 将mysqld的AppArmor规则切换为投诉模式(仅记录行为,不阻止操作):
sudo aa-complain /etc/apparmor.d/usr.sbin.mysqld - 或者直接卸载当前mysqld的AppArmor配置:
sudo apparmor_parser -R /etc/apparmor.d/usr.sbin.mysqld
永久生效
方法1:修改规则允许特定文件
编辑/etc/apparmor.d/usr.sbin.mysqld配置文件,在规则列表中添加允许读取目标文件的条目(以/tmp/flag2为例):
/tmp/flag2 r,
保存文件后重启AppArmor服务:
sudo systemctl restart apparmor
方法2:完全关闭mysqld的AppArmor保护
- 重命名或删除mysqld的AppArmor配置文件:
sudo mv /etc/apparmor.d/usr.sbin.mysqld /etc/apparmor.d/usr.sbin.mysqld.disabled - 重启AppArmor服务使配置生效:
sudo systemctl restart apparmor
方法3:全局禁用AppArmor(不推荐)
若无需AppArmor保护任何系统程序,可直接禁用服务:
sudo systemctl stop apparmor sudo systemctl disable apparmor
内容的提问来源于stack exchange,提问作者wgf4242
相关产品推荐
相关产品推荐

