温馨提示×

Linux环境下MySQL安全配置指南

小樊
42
2025-12-14 02:24:25
栏目: 云计算

Linux环境下 MySQL 安全配置指南

一 基线加固

  • 运行安全初始化脚本:执行mysql_secure_installation,依次完成设置root密码、移除匿名用户、禁止远程 root 登录、删除test数据库等。完成后重启服务使配置生效。
  • 绑定地址最小化:编辑配置文件(常见路径:/etc/mysql/my.cnf/etc/mysql/mysql.conf.d/mysqld.cnf/etc/my.cnf),在**[mysqld]下设置bind-address=127.0.0.1**,仅监听本地回环,如需远程访问再按需改为服务器内网/公网地址。
  • 禁用危险功能与示例库:在**[mysqld]中设置local-infile=0**禁用本地文件读取;删除不再需要的示例数据库(如 test)。
  • 运行身份与文件权限:确保 mysqld 以mysql低权限系统账号运行(配置user=mysql),数据目录与配置文件属主为mysql:mysql,权限最小化(如数据目录750/700,配置文件644)。
  • 清理敏感痕迹:清空或软链**~/.mysql_history**,避免密码等敏感信息落盘;排查并禁止使用MYSQL_PWD环境变量。

二 身份与密码策略

  • 强密码策略:启用validate_password插件并设置强度与长度(示例:策略MEDIUM/STRONG、最小长度12),要求包含大小写字母、数字与特殊字符。
  • 密码有效期与历史:为用户设置PASSWORD EXPIRE INTERVAL 90 DAY等策略,强制周期性更换;结合应用发布流程进行滚动更新。
  • 登录失败保护:适度调低max_connect_errors(如100),降低暴力破解成功率。
  • 认证插件与传输:MySQL 8.0 默认使用caching_sha2_password;对外网或跨机房访问,建议启用SSL/TLS加密(配置ssl-ca/ssl-cert/ssl-key)。

三 网络与访问控制

  • 最小暴露面:默认仅本地访问;确需远程时,将bind-address改为内网地址(如192.168.1.10),避免0.0.0.0全网监听。
  • 精细授权:按“最小权限原则”创建应用专属账号,避免使用root远程运维;示例:仅允许应用所在网段访问指定库。
  • 防火墙与端口:仅放行必要来源 IP 与端口(默认3306);如使用云平台安全组,同样遵循白名单原则。
  • 加密传输:对外网或不可信网络,强制客户端使用SSL/TLS连接。

四 日志审计与可观测性

  • 错误日志:启用并监控log_error,确保异常可追踪;日志文件路径与权限应安全可控。
  • 查询与慢查询:按需开启general_logslow_query_log,定位性能与可疑行为;慢查询阈值建议2 秒起并随业务调整。
  • 审计能力:企业版可启用audit_log记录登录与语句;社区版可通过应用与网络层日志联动实现审计闭环。
  • 安全审计要点:定期核查是否存在空密码账号、过度授权(如FILE/PROCESS/SUPER/GRANT等高危权限)、以及不再使用的账号与主机。

五 备份恢复与持续运维

  • 备份策略:使用mysqldump定期全量备份,建议每日定时执行并保留多份/异地副本;压缩与校验和有助于可靠性。
  • 恢复演练:定期验证备份可用性与恢复流程,确保RPO/RTO达标。
  • 补丁与版本:保持MySQL版本与补丁为最新稳定版,及时修复已知漏洞。
  • 监控与告警:对连接数、复制延迟、错误日志关键字、磁盘空间等设定阈值告警,结合Zabbix/Nagios/Prometheus等工具落地。

常用安全配置示例

  • 仅本地监听与禁用本地文件读取
    • 配置:bind-address=127.0.0.1;local-infile=0
  • 强密码策略(示例)
    • 安装与设置:INSTALL PLUGIN validate_password SONAME ‘validate_password.so’;
      SET GLOBAL validate_password.policy=‘STRONG’;
      SET GLOBAL validate_password.length=12;
  • 应用账号最小权限(示例)
    • 创建与授权:CREATE USER ‘app’@‘192.168.1.%’ IDENTIFIED BY ‘Str0ngP@ss!’;
      GRANT SELECT,INSERT,UPDATE,DELETE ON appdb.* TO ‘app’@‘192.168.1.%’;
      FLUSH PRIVILEGES;
  • 开启 SSL/TLS(示例)
    • 服务端配置:ssl-ca=/etc/mysql/ca.pem; ssl-cert=/etc/mysql/server-cert.pem; ssl-key=/etc/mysql/server-key.pem
    • 客户端连接:mysql --ssl-ca=/path/ca.pem --ssl-cert=/path/client-cert.pem --ssl-key=/path/client-key.pem -h host -u app -p
  • 定时备份(示例)
    • 0 2 * * * /usr/bin/mysqldump -u backup -p’YourStrongBackupPass’ --single-transaction --routines --triggers --databases appdb > /backup/appdb_$(date +%F).sql

注意:涉及生产变更前请在测试环境验证,并确保有回滚方案完整备份;对外网开放数据库存在重大安全风险,务必结合IP 白名单、SSL/TLS、最小权限与审计共同落地。

0