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

今天 hxd和我说他搭建了个人博客 要和我加友链 于是就想着先看看我这尘封10000年的个人博客

 


登陆个人博客网站,发现只能显示静态页面,开始以为是mysql服务没有启动,查看后发现mysql服务启动正常,查询报错信息:

淦,这咋连不上,navicat远程也无法连接

 

看一下数据库内容

纳尼?? 数据表都被删了 看看这个readme

艹,被黑了,还好这个数据库里面没放什么内容,不然。。。

算了, 重新生成一下本地数据库表的sql语句

 将本都文件放到服务器中,进入mariaDB中运行sql文件

 删掉这个烦人的readme

 查看所有数据库

发现README_CCC里面也有这个信息,删掉!

 

找到正在运行的后端进程

 删掉,重新执行

结果还是无法连接

 去数据库中查看root信息 

 

地址出现错误 而且莫名其妙多了两个用户

不管了 全部删掉重新新增

生成本地user表的sql文件

/*
Navicat MySQL Data Transfer

Source Server         : localhost_3306
Source Server Version : 50541
Source Host           : localhost:3306
Source Database       : mysql

Target Server Type    : MYSQL
Target Server Version : 50541
File Encoding         : 65001

Date: 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 

猜你喜欢

转载自blog.csdn.net/weixin_45660485/article/details/118864320
今日推荐