最新下载
热门教程
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
如何通过MySQL配置文件禁用符号链接访问防止越权读取?
时间:2026-09-03 20:04:48 编辑:袖梨 来源:一聚教程网
唯一有效配置项是skip_symbolic_links=yes且必须置于[mysqld]段,同步设置local_infile=0并回收FILE权限;have_symlink仅为只读状态标识,非可配置项,不能用于安全控制。
skip_symbolic_links=yes 是唯一有效配置项
禁用符号链接不能靠 have_symlink=NO,它只是只读状态标识,不是配置开关。真正起作用的只有 skip_symbolic_links=yes,且必须写在 [mysqld] 段下。MySQL 5.6 起已废弃 symbolic-links=0,8.0.33+ 版本会直接忽略它并静默启用符号链接。
常见错误包括:把配置写在 [client] 段、与 symbolic-links=0 共存导致覆盖、或改错配置文件路径(如改了 /etc/mysql/my.cnf 却实际加载的是 /etc/my.cnf)。
local_infile=0 必须同步关闭
即使 skip_symbolic_links=yes 生效,攻击者仍可通过 LOAD DATA LOCAL INFILE 绕过限制读取任意文件(比如 /proc/self/environ)。所以必须同步设置 local_infile=0,并确认 SHOW VARIABLES LIKE 'local_infile' 返回 OFF。
- 该参数也必须放在
[mysqld]段,写在其他段无效 - 重启后若仍能执行
LOAD DATA LOCAL INFILE '/etc/passwd',说明配置未加载或服务未重启 - 某些客户端(如 mysql 命令行)默认启用
--local-infile,需显式加--local-infile=0才能禁用
FILE 权限必须回收
skip_symbolic_links=yes 和 local_infile=0 只是拦住两条路径,但只要账号还拥有 FILE 权限,就可能通过其他方式绕过——比如创建函数、写入 UDF 或配合其他漏洞利用。
务必执行:
REVOKE FILE ON *.* FROM 'user'@'host';- 检查
SELECT * FROM mysql.user WHERE User='xxx' AND File_priv='Y'; - 删除匿名用户、默认 test 库用户等冗余账号
最小权限原则在这里不是建议,是防线最后一环。
验证不能只看 have_symlink
SHOW VARIABLES LIKE 'have_symlink' 返回 YES 不代表配置失败——它只表示系统支持符号链接,和 MySQL 是否允许使用无关。真正有效的验证方式是行为测试:
- 执行
CREATE TABLE t1 (id INT) DATA DIRECTORY='/tmp/testdir';,应报错ERROR 1030 (HY000): Got error 168 from storage engine - 执行
SELECT @@skip_symbolic_links;,返回值必须为1 - 确认
DATA DIRECTORY和INDEX DIRECTORY语法全部被拒绝,而非仅部分路径失效
配置生效与否,最终取决于是否阻断了实际的数据目录重定向行为,而不是某个状态变量的值。
相关文章
- 《我的勇者》阿兔回归礼包兑换码分享 09-03
- 简单聊聊缓存雪崩、穿透、击穿 09-03
- u深度U盘修复硬盘操作步骤 09-03
- TPLink TLWDR8620 52 无线路由器设置网速限制(带宽控制)指南 09-03
- 《我的勇者》神话之剑系列武器说明 09-03
- 《我的勇者》神话之剑系列武器属性说明 09-03