服务器|服务器数据库被恶意删除 还勒索比特币 数据库安全该怎么搞

今天 hxd和我说他搭建了个人博客 要和我加友链 于是就想着先看看我这尘封10000年的个人博客
服务器|服务器数据库被恶意删除 还勒索比特币 数据库安全该怎么搞
文章图片

登陆个人博客网站,发现只能显示静态页面,开始以为是mysql服务没有启动,查看后发现mysql服务启动正常,查询报错信息:
服务器|服务器数据库被恶意删除 还勒索比特币 数据库安全该怎么搞
文章图片

淦,这咋连不上,navicat远程也无法连接
【服务器|服务器数据库被恶意删除 还勒索比特币 数据库安全该怎么搞】服务器|服务器数据库被恶意删除 还勒索比特币 数据库安全该怎么搞
文章图片

服务器|服务器数据库被恶意删除 还勒索比特币 数据库安全该怎么搞
文章图片


看一下数据库内容
服务器|服务器数据库被恶意删除 还勒索比特币 数据库安全该怎么搞
文章图片

纳尼?? 数据表都被删了 看看这个readme
服务器|服务器数据库被恶意删除 还勒索比特币 数据库安全该怎么搞
文章图片

艹,被黑了,还好这个数据库里面没放什么内容,不然。。。
算了, 重新生成一下本地数据库表的sql语句
服务器|服务器数据库被恶意删除 还勒索比特币 数据库安全该怎么搞
文章图片

将本都文件放到服务器中,进入mariaDB中运行sql文件
服务器|服务器数据库被恶意删除 还勒索比特币 数据库安全该怎么搞
文章图片

服务器|服务器数据库被恶意删除 还勒索比特币 数据库安全该怎么搞
文章图片

删掉这个烦人的readme
服务器|服务器数据库被恶意删除 还勒索比特币 数据库安全该怎么搞
文章图片

查看所有数据库
服务器|服务器数据库被恶意删除 还勒索比特币 数据库安全该怎么搞
文章图片

发现README_CCC里面也有这个信息,删掉!
服务器|服务器数据库被恶意删除 还勒索比特币 数据库安全该怎么搞
文章图片

找到正在运行的后端进程
服务器|服务器数据库被恶意删除 还勒索比特币 数据库安全该怎么搞
文章图片

删掉,重新执行
结果还是无法连接
服务器|服务器数据库被恶意删除 还勒索比特币 数据库安全该怎么搞
文章图片

去数据库中查看root信息
服务器|服务器数据库被恶意删除 还勒索比特币 数据库安全该怎么搞
文章图片

地址出现错误 而且莫名其妙多了两个用户
服务器|服务器数据库被恶意删除 还勒索比特币 数据库安全该怎么搞
文章图片

不管了 全部删掉重新新增
生成本地user表的sql文件
服务器|服务器数据库被恶意删除 还勒索比特币 数据库安全该怎么搞
文章图片


/* Navicat MySQL Data TransferSource Server: localhost_3306 Source Server Version : 50541 Source Host: localhost:3306 Source Database: mysqlTarget Server Type: MYSQL Target Server Version : 50541 File Encoding: 65001Date: 2021-07-18 14:39:50 */SET FOREIGN_KEY_CHECKS=0; -- ---------------------------- -- Table structure for user -- ---------------------------- DROP TABLE IF EXISTS `user`; CREATE TABLE `user` ( `Host` char(60) COLLATE utf8_bin NOT NULL DEFAULT '', `User` char(16) COLLATE utf8_bin NOT NULL DEFAULT '', `Password` char(41) CHARACTER SET latin1 COLLATE latin1_bin NOT NULL DEFAULT '', `Select_priv` enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N', `Insert_priv` enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N', `Update_priv` enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N', `Delete_priv` enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N', `Create_priv` enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N', `Drop_priv` enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N', `Reload_priv` enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N', `Shutdown_priv` enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N', `Process_priv` enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N', `File_priv` enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N', `Grant_priv` enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N', `References_priv` enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N', `Index_priv` enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N', `Alter_priv` enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N', `Show_db_priv` enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N', `Super_priv` enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N', `Create_tmp_table_priv` enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N', `Lock_tables_priv` enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N', `Execute_priv` enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N', `Repl_slave_priv` enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N', `Repl_client_priv` enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N', `Create_view_priv` enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N', `Show_view_priv` enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N', `Create_routine_priv` enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N', `Alter_routine_priv` enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N', `Create_user_priv` enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N', `Event_priv` enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N', `Trigger_priv` enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N', `Create_tablespace_priv` enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N', `ssl_type` enum('','ANY','X509','SPECIFIED') CHARACTER SET utf8 NOT NULL DEFAULT '', `ssl_cipher` blob NOT NULL, `x509_issuer` blob NOT NULL, `x509_subject` blob NOT NULL, `max_questions` int(11) unsigned NOT NULL DEFAULT '0', `max_updates` int(11) unsigned NOT NULL DEFAULT '0', `max_connections` int(11) unsigned NOT NULL DEFAULT '0', `max_user_connections` int(11) unsigned NOT NULL DEFAULT '0', `plugin` char(64) COLLATE utf8_bin DEFAULT '', `authentication_string` text COLLATE utf8_bin, PRIMARY KEY (`Host`,`User`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='Users and global privileges'; -- ---------------------------- -- Records of user -- ---------------------------- INSERT INTO `user` VALUES ('localhost', 'root', '*81F5E21E35407D884A6CD4A731AEBFB6AF209E1B', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', '', '', '', '', '0', '0', '0', '0', '', '');

重启mysql 我的方法是
先 ps -ef|grep mysq查找所有mysql进程
服务器|服务器数据库被恶意删除 还勒索比特币 数据库安全该怎么搞
文章图片


然后全部kill掉kill -9 上方红色方框圈住的进程号
服务器|服务器数据库被恶意删除 还勒索比特币 数据库安全该怎么搞
文章图片

重新启动service mysql restart
当mysql版本为5.7以上时 用service mysqld restart 多了个“d”
服务器|服务器数据库被恶意删除 还勒索比特币 数据库安全该怎么搞
文章图片

连接成功!
服务器|服务器数据库被恶意删除 还勒索比特币 数据库安全该怎么搞
文章图片

那么,我们应该做些什么,才能防止数据库被恶意访问删除呢?或者是有什么手段可以快速恢复被删的文件? 开启Binlog日志
MySQL Server 的四种类型的日志:Error Log、General Query Log、Slow Query Log 和 Binary Log
Error Log 即 错误日志,记录 mysqld 发生的一些错误。
General Query Log 即 一般查询日志,记录 mysqld 正在做的事情,如客户端的连接和断开、来自客户端每条 Sql Statement 记录信息;如果你想准确知道客户端究竟传了什么内容给服务端,这个日志就非常管用了,当然了这货非常影响性能。
Slow Query Log 即 慢查询日志,记录一些查询执行较慢的 SQL 语句,这个日志非常常用,主要是给开发者调优用的。
Binary Log 简称 Binlog 即 二进制日志文件,这个文件记录了mysql所有的 DML 操作。通过 Binlog 日志我们可以做数据恢复,做主主复制和主从复制等等。对于开发者可能对 Binlog 并不怎么关注,但是对于运维或者架构人员来讲是非常重要的。
简而言之,Binlog 两个重要的用途——复制和恢复,很多十分好用的 MySQL 体验比如说增量备份,回滚至指定时间以及上面提到的主主和主从等等都依赖于 Binlog。
检查是否开启
服务器|服务器数据库被恶意删除 还勒索比特币 数据库安全该怎么搞
文章图片

ON表示开启 OFF表示未开启
修改 my.cnf 文件开启Binlog,一般来说都位于 /etc/my.cnf 这边,部分像 MariaDB 可能是修改/etc/my.cnf.d/server.cnf 文件
服务器|服务器数据库被恶意删除 还勒索比特币 数据库安全该怎么搞
文章图片

[mysqld] 下写入如下内容:
log_bin=/var/lib/mysql/bin-log log_bin_index=/var/lib/mysql/mysql-bin.index expire_logs_days= 7 server_id= 0002 binlog_format= ROW

服务器|服务器数据库被恶意删除 还勒索比特币 数据库安全该怎么搞
文章图片

解释一下:
log_bin = /var/lib/mysql/bin-log , 开启 Binlog 并写明存放日志的位置
log_bin_index = /var/lib/mysql/mysql-bin.index , 指定索引文件的位置。
expire_logs_days = 7 ,删除超出这个变量保留期之前的全部日志被删除
server_id = 0002 , 指定一个集群内的 MySQL 服务器 ID,如果做数据库集群那么必须全局唯一,一般来说不推荐 指定 server_id 等于 1。
binlog_format = ROW,设置方面提到过的三种 Binlog 的日志模式。
重启数据库
服务器|服务器数据库被恶意删除 还勒索比特币 数据库安全该怎么搞
文章图片

再次检测show global variables like 'log_bin';
服务器|服务器数据库被恶意删除 还勒索比特币 数据库安全该怎么搞
文章图片

成功开启
如何使用binlog恢复数据,参照博客
https://blog.csdn.net/Nino_sama/article/details/117200086
修改服务器安全组 将mysql访问ip由公共转为本地ip
服务器|服务器数据库被恶意删除 还勒索比特币 数据库安全该怎么搞
文章图片

修改root登陆密码
服务器|服务器数据库被恶意删除 还勒索比特币 数据库安全该怎么搞
文章图片

修改后台登陆密码
服务器|服务器数据库被恶意删除 还勒索比特币 数据库安全该怎么搞
文章图片


服务器|服务器数据库被恶意删除 还勒索比特币 数据库安全该怎么搞
文章图片

这里推荐一个在线加密解密的网站 https://www.cmd5.com
服务器|服务器数据库被恶意删除 还勒索比特币 数据库安全该怎么搞
文章图片

    推荐阅读