情况是这样的,最近公司和华为进行合作,分配了一大批的鲲鹏云服务器,为了验证项目在国产服务器上的兼容性以及拿到华为的认证,于是将产品迁移到鲲鹏云上进行测试,数据库给分配了个16核32G的服务器,想想就十分给力,不过鲲鹏云是arm架构,生态比较少,各种安装都得编译,在华为小伙伴的支持下,虽然花了些时间,好在最终服务是顺利部署上去了,可喜可贺。
前几天早上同事告诉我服务登录不上去了,两个服务一个登录没反应,一个登录直接报错了,我想了想除了我其他人也不知道服务器信息啊,理论上不应该出问题啊,于是去后台查看日志,发现大量的sql异常,于是打开数据库,悲剧发生了!!!
怀着忐忑又激动的心情(没见过世面)
首先数据库表全没了,只留下一个warning表,还多了一个please_read_me_vvv的数据库
打开warning表
复制了warning里的内容去百度翻译了下,意识到是被勒索了!!!
To recover your lost Database and avoid leaking it: Send us 0.035 Bitcoin
(BTC) to our Bitcoin address 1GkZpdfQdUQasnt12P9pSnx8sohm4NgqNQ and contact us
by Email with your Server IP or Domain name and a Proof of Payment. If you are
unsure if we have your......
好在有备份,而且服务也是刚刚部署好,还没开始测试
但问题得解决啊,打算加强密码的强度
今天偶然调试,发现服务器上的etc/my.cnf的一个配置
skip-grant-tables
跳过数据库权限验证,远程登录mysql数据库任意密码都可以访问,你说我不被黑谁被黑,果断注释掉这个配置重启mysql
仔细想了想,我一直没发现问题所在,一方面是自己一直使用SSH通道进行连接,虽然mysql服务器配置了公网IP,但是连接的时候也一直没用,另一方面就是自己没有吃过亏,没意识到会发生这种情况。
之前开放了mysql的远程连接权限给所有的IP地址,现在也关闭掉,步骤如下:
* 使用root用户登录到数据库
* use mysql 选择mysql数据库
* revoke all privileges on *.* from 'root'@'%'; 撤回权限
* delete from user where User="root" and Host="%"; 删除用户
* flush privileges; 刷新
可以开启mysql远程连接权限给指定IP或者开放给所有IP设置一个复杂度比较高的密码,如下
你想root使用root从任何主机连接到mysql服务器的话。
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'root' WITH GRANT
OPTION;
如果你想允许用户myuser从ip为192.168.1.64的主机连接到mysql服务器,并使用root作为密码
GRANT ALL PRIVILEGES ON *.* TO 'root'@'192.168.1.64' IDENTIFIED BY 'root'
WITH GRANT OPTION;
输入命令:FLUSH PRIVILEGES;
希望大家引以为戒,不要让这种悲剧再次发生,部署的公网上的服务一定要注意并加强安全性。
今日推荐