情况概述

偶然获得了一台云服务器, 并在上面使用Docker搭建了MySQL数据库, 想着将平时做Demo用到的数据转过去, 结果一直犯懒没弄. 今天在登陆时发现数据库被黑了.

使用show databases命令后看到一个名为README_TO_RECOVER_A的库, 库中有张表, 表的内容为:

All your data is backed up. You must pay 0.01 BTC to xxx In 48 hours, your data will be publicly disclosed and deleted. (more information: go to xxx)After paying send mail to us: xxx@xxx and we will provide a link for you to download your data. Your DBCODE is: xxx

大概意思为: 我的数据已被他备份, 我需要在48小时内支付0.01BTC到他的账户, 否则他将公开披露并删除我的数据.

搜索了一下, 0.01BTC的价值大概是2K软妹币. 在白花花的银子面前我瞬间意识到了数据库安全这个问题

安全措施

  1. 首先不要像我一样使用Docker部署MySQL服务, 因为数据会在你停止/删除容器时跟着被删除
  2. 管理员密码一定不能图方便设个’root’, ‘admin’, ‘123456’
  3. 远程访问的端口号要改
  4. 数据一定要定时备份, 有条件的最好备份在异机/异地

反思

由于我是使用Docker搭建的MySQL, 而且没有任何损失. 所以发现问题时我直接将容器删掉了, 结果在写这篇博客时才想起来可以查看数据库连接日志获取一些信息来丰富这篇文章.

第一次在云服务器上部署MySQL, 图方便使用了Docker, 部署后才发现原来在容器删除或停止后数据也会被删除(因为容器内的文件系统是临时的, 存储在容器的生命周期内, 这也是为什么Docker容器可以快速部署和销毁). 之后又参照其他博客设置了持久化, 但还是对于数据究竟是否保存在硬盘中了还是没底. 这下不用担心了(笑

很愚蠢的为了图方便, 直接用root账户在外网裸奔. 为了连接方便, 密码直接设为了root(对的, 就这四个字母), 端口也没改, 直接开了远程连接.

在个人瞎搞的时候遇见这个问题, 而没有在实际工作中出现, 也算是不幸中的万幸了.

– END –