MySQL 加固需先确认实际加载的配置文件路径,再禁用 local_infile、symbolic-links 等高危选项,限制 bind-address,最小化用户权限,检查日志与监听状态,并兼顾业务可用性。

确认 MySQL 实际加载的配置文件路径
MySQL 启动时会按固定顺序读取多个配置文件,如果改了 /etc/my.cnf 却没生效,很可能是它根本没被加载——而是加载了 /etc/mysql/my.cnf 或 ~/.my.cnf。不先搞清“哪个文件在起作用”,后续所有加固都是空中楼阁。
- 运行
mysql --help | grep "Default options",看输出里列出的路径顺序(注意:最后加载的配置项会覆盖前面的) - 用
mysqld --verbose --help | grep "basedir\|datadir\|socket"快速验证关键路径是否按预期生效 - 启动时加
--defaults-file=/path/to/my.cnf强制指定,可绕过优先级干扰,用于快速验证修改效果 - 常见坑:Docker 容器中常挂载配置到
/etc/mysql/conf.d/xxx.cnf,但该目录不在默认列表里——得靠!includedir /etc/mysql/conf.d/才能生效,漏写这行就等于白配
检查高危配置项是否已禁用
很多漏洞不是代码缺陷,而是默认开启的危险功能被攻击者直接利用。比如 local_infile=1 配合 SQL 注入就能读取服务器任意文件;skip-symbolic-links=0 则可能被用来绕过数据目录限制。
- 必须关闭:
local_infile=0(防恶意LOAD DATA LOCAL INFILE)、symbolic-links=0(等价于skip-symbolic-links,防符号链接攻击) - 必须限制:
bind-address=127.0.0.1(除非真需远程访问,否则绝不监听 0.0.0.0) - 建议关闭:
secure_file_priv若设为空或/,等同于开放文件操作权限;应设为明确目录如/var/lib/mysql-files/ - 别信“我只开内网端口就安全”——只要
bind-address是0.0.0.0,哪怕防火墙拦着,容器网络或本地提权后仍可能直连
验证用户权限是否最小化
90% 的数据库横向移动和数据窃取,源于一个过度授权的账号。比如 SELECT 权限本身不危险,但配上 FILE 或 PROCESS,就足以导出密码哈希、查看其他连接甚至写 Webshell。
- 查所有用户:
SELECT User, Host FROM mysql.user;,重点盯'root'@'%'、''@'localhost'(空用户名)、'admin'@'192.168.%'这类明显非默认的账户 - 查高危权限:
SELECT User,Host,Super_priv,File_priv,Process_priv,Grant_priv FROM mysql.user WHERE File_priv='Y' OR Super_priv='Y'; - 删无用账号:
DROP USER 'test'@'localhost';(注意:MySQL 5.7+ 不支持DROP USER ''@'localhost',得先用DELETE FROM mysql.user WHERE User=''; FLUSH PRIVILEGES;) - 权限回收后务必执行
FLUSH PRIVILEGES;,否则变更不生效——这是最常被跳过的一步
检查日志与监听状态是否暴露风险
没开慢查询日志,不代表没记录敏感操作;没看到 3306 端口在 netstat 里,也不代表 MySQL 没在监听——SELinux、systemd socket 激活、或 Docker 网络映射都可能掩盖真实状态。
- 确认监听地址:
ss -tlnp | grep :3306,看Local Address:Port列是127.0.0.1:3306还是*:3306 - 检查错误日志是否启用:
SHOW VARIABLES LIKE 'log_error';,路径若在/tmp或 Web 可读目录下,错误信息可能被直接下载 - 通用日志(
general_log)绝不能长期开启,临时审计后立刻关:SET GLOBAL general_log = 'OFF'; - 云环境特别注意:安全组允许 3306 ≠ 应用层安全,得配合
bind-address+ 用户 Host 限制做双重过滤,否则一个配置失误就等于裸奔
真正卡住人的往往不是“不知道要关什么”,而是关了之后服务起不来——比如 secure_file_priv 改严了,备份脚本的 LOAD DATA 就失败;bind-address 锁死了,监控程序连不上。安全基线不是越严越好,得贴着业务实际走一遭。










