前言
昨天发了一篇docker里mysql崩溃导致删库的文章,今天早上10点又TM崩溃了。
一气之下不对啊 昨天也是10点左右,然后我重启容器后 连接上mysql看了一下
好家伙,不看不知道 一看吓一跳,库删的就剩下一个库 README_TO_RECOVER_A
勒索信息
'All your data is backed up. You must pay 0.009 BTC to 17dFU6EDwMoF7F9p9Kvfkf5Tgq2EqRNEQj In 48 hours, your data will be publicly disclosed and deleted. (more information: go to 勒索网站地址)'<
'After paying send mail to us: 邮箱地址 and we will provide a link for you to download your data. Your DBCODE is: 24Z2H' <
意思就是它把你数据删了 你要比特币赎回 还有时间限制。
解决思路
我看了下日志
2023-08-02T01:27:21.033661Z 233 [System] [MY-013172] [Server] Received SHUTDOWN from user root. Shutting down mysqld (Version: 8.0.31).
2023-08-02T01:27:22.108810Z 0 [System] [MY-010910] [Server] /usr/sbin/mysqld: Shutdown complete (mysqld 8.0.31) MySQL Community Server - GPL.
就是说 mysql服务收到了root发出的停止命令 但是为什么删库了 我不知道。
也就是说别人远程登录了mysql的root用户 把我库删掉了。
我求助互联网后 发现好多这种情况,都是禁止root的远程登录。
让root用户只能本地登录就行了。
限制root远程登录
我这都是测试数据 所以选择直接删doker容器吧,重建一个容器 然后禁用root远程登录。
重新创建mysql的docker容器
docker run -d --name mysqls -p 3306:3306 -e MYSQL_ROOT_PASSWORD=1234qwer -v /home/mysql/log:/var/log/mysql -v /home/mysql/data:/var/lib/mysql -v /home/mysql/conf:/etc/mysql/conf.d mysql:8.0.31
然后等待几秒 等容器里的mysql服务部署完毕
进入容器
docker exec -it mysqls bash
登录mysql服务
mysql -u root -p
切换到 mysql表
use mysql;
看一下当前用户
select user, host from user;
可以看到 有个 root % 和一个 root localhost
其中 root % 就是说明root的远程登录,root localhost 就是root的本地登录。
我们删掉 root % 即可
delete from user where user='root' and host='%';
返回 Query OK, 1 row affected (0.00 sec)
然后刷新 一定要刷新 不刷不生效 还是能登录。
flush privileges;
我们再查一次表 看到 root % 没了 就算成功了。
我这里用MySQL WorkBench 连接试了下 确实无法连接。
至此 这个漏洞算是补上了。还有很长的路要走啊!