近日服务器收到攻击,数据库被清空并插入了一个表,内容如下:
warning | bitcoin_address | |
---|---|---|
To recover your lost Database and avoid leaking it: Send us 0.1 Bitcoin (BTC) to our Bitcoin address 1J6jLduCXbPyxt5EMTs7iHwdafANy4ThJc 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 data, contact us and we will send you a proof. Your Database is downloaded and backed up on our servers. Backups that we have right now: xxx,xxx,xxx . If we dont receive your payment in the next 10 Days, we will make your database public or use them otherwise. | 1J6jLduCXbPyxt5EMTs7iHwdafANy4ThJc | [email protected] |
造成的原因因为mysql账号密码被暴力破解和允许远程访问,需要做一些紧急处理
本机登陆
// 服务器中国登陆数据库
$ mysql -u 你的账号 -p
$ 你的密码
查看用户
有一个特殊的数据库,数据库名为mysql,表名为user,它存储了服务器数据库有用户信息和访问权限。
// 选用mysql系统表
$ use mysql;
// 查询全部的用户和host
$ select user,host form user;
host
为允许访问的主机地址,'%
代表全部允许,如果发现host
的信息为%
,那这就是问题所在了,把它全删了。
$ delete from user where host = '%';
这时候任何远程访问都会被禁止,无法在本机外访问了。
刷新一下缓存,让配置生效
$ flush privileges;
$ select user from user;
如果发现不认识的账号,一定要删了,如只保留根角色
// 删除一切非根用户
$ delete from user where user != 'root';
除了这一步之外,我们还需要去db表
相应删除
// 删除一切非根用户
$ delete from db where user != 'root';
同样记得刷新缓存,让配置生效
$ flush privileges;
password()
。这里已更新root账号的为例// 更新密码
$ update user set password = password('你的新密码');
新密码一定要复杂,可以考虑闭着眼睛敲(记得复制出来,要不忘了)。
更新完后还是记得更新缓存(当然可以最后再刷新缓存)。
$ show global variables like 'port';
Variable_name | port |
---|---|
port | 3306 |
退出mysql命令行模式。
如果我们计划把端口改成3305,先检查一下端口是否被占用
netstat -tunlp |grep 3305
如果没有任何输出那就证明没有被占用。
紧接着我们打开mysql的配置文件,在/etc/my.cnf。
修改3306端口为一个新的端口
vim /etc/my.cnf
[mysqld]
port=3305
如果[mysqld]
下没有port
参数,加一个即可。
保存退出vim。
然后我们重启mysql服务
$ systemctl restart mysqld
是mysqld
,不是mysql
。
然后发现3306已经连不上了,需要用新端口才可以。
上述操作会导致远程无法连接,如果又想安全又想方便,可以通过限制ip的方式,首先我们创建一个用户,给该用户分配有限的权限,然后设置一个复杂的密码,最后加上ip限制就可以了,下面是详细做法。
$ create user zhangsan identified by '123456';
如果创建成功,会默认创建一个%
ip限制的用户,如果创建失败,先删除用户再创建即可。
zhangsan
用户后,我们还需要为其分配数据库,处于安全考虑,一般只分配部分数据库,比如把ABC数据库的全部权限都分配给zhangsan,执行如下:$ grant all privileges on ABC.* to zhangsan@'%' identified by '123456';
ABC.*
代表ABC数据库下的全部权限%
为默认不限制host。
此时zhangsan用户只能查看到ABC数据库下的
的内容。
$ update user set host = '你的ip' where user = 'zhangsan';
此时只允许指定ip通过。
$ flush privileges;
针对此事项,建议做以下调整,以防范黑客攻击:
1、服务器的管理员密码具备一定复杂度,建议使用字母、数字、字符组合的密码。
2、服务器关闭远程访问(或关闭外网的远程访问),调整远程访问默认的端口号。
3、mysql的root用户密码具备一定复杂度,建议使用字母、数字、字符组合的密码。
4、mysql不允许任意远程端连接,建议仅对协同系统所在的IP地址放开连接。
5、mysql不使用默认的3306端口,建议修改为其他端口。(mysql的配置文件:Windows为my.ini、Linux为my.cnf,修改其端口号)
6、mysql设置定时备份,并将数据备份包备份在异机(或异地)。