mysql安装后进行系统安全加固与配置优化

14次阅读

mysql 5.7+ 安装后须立即重置root密码、禁用空密码登录、删除匿名用户和test库、限制root远程访问、创建最小权限应用账号、启用密码策略与TLS加密。

mysql安装后进行系统安全加固与配置优化

修改 root 默认密码并禁用空密码登录

MySQL 5.7+ 安装后若未显式设置密码,root@localhost 可能处于无密码或临时密码状态(临时密码在 /var/log/mysqld.log 中),这直接构成高危入口。必须立即重置并拒绝空密码认证。

  • 先用临时密码登录:mysql -u root -p,输入日志中找到的临时密码
  • 执行:
    ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'YourStrongPass123!';
  • 刷新权限:FLUSH PRIVILEGES;
  • 确认空密码用户已清除:
    select user,host,authentication_string FROM mysql.user WHERE authentication_string = '' OR authentication_string IS NULL;

    ,若有结果需手动 DROP USERSET PASSWORD

删除默认匿名用户与 test 数据库

MySQL 初始化时可能创建 ''@'localhost' 这类匿名用户,且保留 test 数据库——两者均无实际用途,却常被扫描工具利用为攻击跳板。

  • 删匿名用户:
    DROP USER ''@'localhost';
  • 删 test 库(若存在):
    DROP DATABASE IF EXISTS test;
  • 移除 test 相关权限记录:
    DELETE FROM mysql.db WHERE Db LIKE 'test%' OR Db LIKE '_test%'; FLUSH PRIVILEGES;
  • 验证:SELECT user,host FROM mysql.user; 应仅剩明确授权的用户;SHOW DATABASES; 不应含 test

限制 root 远程访问并创建最小权限应用账号

生产环境 root@localhost 必须禁止从任意主机连接(即禁用 root@'%'),所有业务操作应通过专用账号完成,且该账号只拥有对应数据库的必要权限(如仅 SELECT,INSERT,UPDATE)。

  • 检查远程 root:SELECT host,user FROM mysql.user WHERE user='root' AND host!='localhost';,如有则 DROP USER 'root'@'xxx';
  • 新建应用账号(示例):
    CREATE USER 'app_user'@'10.20.30.%' IDENTIFIED WITH mysql_native_password BY 'AppPass456!';
  • 授最小权限:
    GRANT SELECT,INSERT,UPDATE ON myapp_db.* TO 'app_user'@'10.20.30.%'; FLUSH PRIVILEGES;
  • 避免使用 GRANT ... ON *.*WITH GRANT OPTION,除非有强审计需求

启用强制密码策略与连接加密

默认 MySQL 允许弱密码且明文传输认证信息,必须通过配置层加固。关键参数需写入 /etc/my.cnf[mysqld] 段并重启服务。

  • 启用密码复杂度:
    validate_password.policy=STRONG validate_password.length=12 validate_password.mixed_case_count=1 validate_password.number_count=1 validate_password.special_char_count=1
  • 强制 TLS 连接(要求客户端支持):
    require_secure_transport=ON ssl_mode=REQUIred ssl_cert=/var/lib/mysql/server-cert.pem ssl_key=/var/lib/mysql/server-key.pem
  • 禁用本地文件导入(防恶意读取):local_infile=OFF(同时需在客户端连接时加 --local-infile=0
  • 重启后验证:SHOW VARIABLES LIKE 'require_secure_transport'; 应为 ONSTATUS;SSL: 行应显示 Cipher in use

实际部署中,ssl_certssl_key 文件必须由可信 CA 签发或自建私有 CA 生成,不能使用 MySQL 自带的测试证书;validate_password 插件需提前确认已安装(SHOW PLUGINS;validate_password 状态),否则配置会静默失效。

text=ZqhQzanResources