唯一有效配置项是skip_symbolic_links=yes且必须置于[mysqld]段,同步设置local_infile=0并回收FILE权限;have_symlink仅为只读状态标识,非可配置项,不能用于安全控制。
禁用符号链接不能靠 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)。
即使 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',说明配置未加载或服务未重启--local-infile,需显式加 --local-infile=0 才能禁用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';
最小权限原则在这里不是建议,是防线最后一环。
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 语法全部被拒绝,而非仅部分路径失效配置生效与否,最终取决于是否阻断了实际的数据目录重定向行为,而不是某个状态变量的值。
Tplink企业版路由器WiFi名称的默认设置介绍(Tplink企业版路由器WiFi名称的默认设置是什么)
Tplink路由器灯常亮无法上网的原因分析(如何解决Tplink路由器灯常亮无法上网的问题)
Tplink千兆企业级路由器自动重启的作用和优势介绍(如何设置Tplink千兆企业级路由器自动重启功能)
一根天线的tplink路由器有哪些(一根天线的Tplink路由器的特点和优势介绍)
tplink路由器外网访问不了nas(Tplink路由器外网访问NAS的原因分析)
Tplink无法搜到路由器的原因分析(如何解决Tplink无法搜到路由器的问题)