Ubuntu22运行mysql_secure_installation保留root的auth_socket方案
保留auth_socket认证完整执行MySQL安全加固的方法
mysql_secure_installation的报错本质是交互流程默认强制要求为root用户设置密码,没有适配auth_socket认证无需密码的场景,不需要修改root认证插件,按以下步骤操作即可完成全部加固项:
前置校验
先执行以下命令登录MySQL,确认root用户当前认证插件配置:
sudo mysql
在MySQL命令行执行查询:
SELECT user, host, plugin FROM mysql.user WHERE user='root' AND host='localhost';
返回结果中plugin字段值为auth_socket即为符合预期,执行exit退出MySQL命令行。
非交互执行安全加固
MySQL 8.0.29版本自带的mysql_secure_installation支持通过参数跳过密码修改环节,直接执行以下命令即可完成全部安全配置,全程不会触发SET PASSWORD报错:
sudo mysql_secure_installation \ --auth-socket=root \ --skip-change-root-password \ --remove-anonymous-users \ --disallow-root-remote-login \ --remove-test-db \ --reload-privilege-tables
各参数对应加固项和交互流程完全一致:
--auth-socket=root:告知脚本root用户使用auth_socket认证,无需存储服务端密码凭据--skip-change-root-password:跳过root密码修改流程,从根源避免报错--remove-anonymous-users:删除所有匿名用户--disallow-root-remote-login:禁止root账号从远程地址登录--remove-test-db:删除默认test测试库及相关访问权限--reload-privilege-tables:刷新权限表让配置立即生效
结果验证
命令执行完成后,重新通过sudo mysql登录,执行以下查询确认配置生效:
- 认证插件校验:重复前置校验的查询语句,确认root@localhost的plugin值仍为
auth_socket - 匿名用户校验:执行
SELECT user, host FROM mysql.user WHERE user='';,返回空结果即为正常 - 远程登录限制校验:执行
SELECT user, host FROM mysql.user WHERE user='root' AND host NOT IN ('localhost', '127.0.0.1', '::1');,返回空结果即为正常 - 测试库校验:执行
SHOW DATABASES LIKE 'test';,返回空结果即为正常
低版本兼容方案
如果使用的MySQL版本不支持上述非交互参数,直接手动执行等价SQL即可,加固效果完全一致:
sudo mysql -e " DELETE FROM mysql.user WHERE User=''; DELETE FROM mysql.user WHERE User='root' AND Host NOT IN ('localhost', '127.0.0.1', '::1'); DROP DATABASE IF EXISTS test; DELETE FROM mysql.db WHERE Db='test' OR Db='test\\_%'; FLUSH PRIVILEGES; "
内容的提问来源于stack exchange,提问作者Cheradenine Zakalwe
相关产品推荐
相关产品推荐

