记一次mysql数据库被勒索(下)
背景:
nextcloud的mysql数据库被黑,删库勒索。参考:记一次mysql数据库被勒索(上)
mysql数据库恢复成功,nextcloud还是无法连接。参考:记一次mysql数据库被勒索(中)
正文:
经过一番研究,发现nextcloud在第一次数据库配置成功后,会创建一个oc_root的帐号,之后就会使用oc_root帐号来连接数据库。
而oc_root的密码,并不是在配置的时候设置的管理员root的密码,貌似是nextcloud自己生成的。
加密算法应该跟这里面的passwordsalt 有关系,重新配置数据库,这个盐值就会变化。
而之前手贱,想通过配置新数据库,来恢复nextcloud,又没有把config.php文件备份下来。
结果,现在的nextcloud所用的密码,无法连接原来的mysql数据库了。。T_T
以上结论是经过反复试验得出的,不一定严谨~~
于是,就想到一个方法:
1, 使用nextcloud连接新的数据库,重新生成oc_root帐号和config.php文件;
2,从新的数据库里面,获取oc_root创建的SQL,导入到旧数据库里面;
3,手动修改config.php文件,将dbhost指向旧数据库;
※ 这个方法能行的通,前提就是加盐算法,只用于oc_root连接数据库,其他数据表里面没有使用这个盐,赌一把了~~
试验过程:
1,启动新mysql的docker容器;
2,删除nextcloud的config.php文件,并在configh目录下touch CAN_INSTALL 文件;
3,浏览器刷新nextcloud,输入新的mysql容器IP,其他配置保持与旧数据库一致;
※ 需要提前将nextcloud管理员帐号对应的目录重命名,否则会提示用户名已经存在。
4,等nextcloud的数据库配置完成,查看创建oc_root用户的SQL文:
还是通过binlog来:
# mysqlbinlog /var/lib/mysql/binlog.000002 > /var/lib/mysql/2.sql
找到创建帐号、设置权限的SQL语句
5, 在旧的数据库中执行以下操作
删除原来的oc_root帐号:delete from user where user='oc_root';
创建新的oc_root帐号:
在创建oc_root@%时,会报 ERROR 1396 (HY000): Operation CREATE USER failed for 'oc_root'@'%' 的错误。
需要,先进行drop user 操作:
mysql> drop user 'oc_root'@'%';
Query OK, 0 rows affected (0.14 sec)
mysql> flush privileges;
Query OK, 0 rows affected (0.03 sec)
再进行权限设置(也是从binlog里面拷贝出来的):
GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP, REFERENCES, INDEX, ALTER, CREATE TEMPORARY TABLES, LOCK TABLES, EXECUTE, CREATE VIEW, SHOW VIEW, CREATE ROUTINE, ALTER ROUTINE, EVENT, TRIGGER ON `nextcloud`.* TO 'oc_root'@'%';
改完权限,记得要flush privileges,才可以生效。
6,修改nextcloud 的config.php文件,将dbhost改为旧数据的IP
浏览器中刷新一下nextcloud页面,终于出现久违的登陆框。
用之前的帐号登陆,也可以显示之前的文件内容了,大功告成!
========================================================================
这次勒索事件,给我上了很重要一课:
1,公网是很危险的地方,随时有各种人用各种工具在扫描你的机器;
2,密码设置复杂一些,防火墙不能关闭,端口能不开放就不开放;
3,数据库、重要文件,及时做备份;
记一次mysql数据库被勒索(下)的更多相关文章
- 记一次mysql数据库被勒索(中)
背景在上一篇文章里面已经提过了. 现在面临的问题是nextcloud没有mysql数据库,用不起来了. 因为文件没丢,一种方法是启动新的mysql数据库,把文件重新提交一次. 为了程序员的面子,没有选 ...
- 记一次mysql数据库被勒索(上)
家里搞了台旧电脑做NAS,安装了nextcloud,选择了mysql做为数据库. 当时也没有想太多,mysql数据库密码随便设置了个123456,用的一切正常. 然后,听说可以找电信申请换个公网IP的 ...
- MySQL数据库InnoDB引擎下服务器断电数据恢复
说明: 线上的一台MySQL数据库服务器突然断电,造成系统故障无法启动,重新安装系统后,找到之前的MySQL数据库文件夹. 问题: 通过复制文件的方式对之前的MySQL数据库进行恢复,发现在程序调用时 ...
- 初码-Azure系列-记一次MySQL数据库向Azure的迁移
初码Azure系列文章目录 还在继续给客户迁移不同的系统到Azure,这一次是一个系统的MySQL数据库要迁移,将迁移过程记录一下 原系统环境 数据库版本:MySQL Community Editio ...
- mysql数据库在Linux下安装与配置
mysql是一种开放源代码的关系型数据库系统(RDBMS),使用最常用的数据库管理语言--结构化查询语句(SQL)进行数据库管理. 由于mysql的开源,因此任何人都可以在General Publ ...
- MySQL 数据库在 Windows 下修复 only_full_group_by 的错误
本机上新安装了个MySQL数据库,在插入数据的时候一直提示这个错误: [Err] 1055 - Expression #1 of ORDER BY clause is not in GROUP BY ...
- 记一次mysql数据库失而复得过程
背景: 由于是自己买的vps搭建的博客,用的是军哥的一键lnmp源码编译安装的,文章也就几篇,对备份并不太重视,想着等服务器快到期的时候备份一下不就行了. 后来在该服务器上测试lnmp分别编译编译安装 ...
- 记一次Mysql数据库Kill完之后启动不起来的解决方案
在Mysql运行的时候,有时候会stop不了,这时候我们就会想直接把他的进程kill掉. 但是,有时候kill完了之后,在去start它就会直接抛异常了... ERROR! The server qu ...
- mysql数据库在linux下的导出和导入及每天的备份
mysql数据库的导出,导入 1. 导出数据库为sql文件 mysqldump 数据库名 -uroot -p > xxx.sql 导出数据表结构和数据 eg. mysqldump cloud ...
随机推荐
- Shell基本语法---case语句
case语句 格式 case 变量 in 值1 ) 执行动作1 ;; 值2 ) 执行动作2 ;; 值3 ) 执行动作3 ;; .... * ) 如果变量的值都不是以上的值,则执行此程序 ;; esac ...
- 题解 洛谷 P5163 【WD与地图】
首先将操作倒序,把删边转化为加边.先考虑若边是无向边,条件为连通,要怎么处理. 可以用并查集来维护连通性,对每个连通块维护一颗权值线段树,连通块的合并用线段树合并来实现,线段树同时也支持了修改点权. ...
- Zookeeper ----- 系统模型
数据模型 Zookeeper的数据模型与文件系统非常相似,唯一不同的它的每个节点(ZNode)都可以存放数据,无论父节点还是子节点. 事务ID 即前面提到的ZXID.对每个事务请求,Zookeeper ...
- 【Vue组件通信】props、$ref、$emit,组件传值
1.什么是组件通信 组件间如何通信,也就成为了vue中重点知识,组件通信,涉及到组件之间数据的传递.类似NET POST/GET参数传递. Vue基本的三种传递方式** (props.\(ref.\) ...
- 如何从Python负零基础到精通数据分析
一.为什么学习数据分析 1.运营的尴尬:运营人需要一个硬技能每个初入行的新人都会察觉到,运营是一个似乎并没有自己的核心竞争力和安全感的工作.因为每天的工作好像都被各种琐事所围绕,而只有一个主题是永恒不 ...
- Redis在Linux下的安装
一.下载地址 ①redis中文网下载地址:http://www.redis.cn/ ②百度云网盘下载地址:https://pan.baidu.com/s/1UQcF9V3lwA0fxquM_JFMZw ...
- 史蒂夫-乔布斯(Steve Jobs)斯坦福大学演讲稿(中英对照)
这是苹果公司和Pixar动画工作室的CEO Steve Jobs于2005年6月12号在斯坦福大学的毕业典礼上面的演讲稿. Thank you. I'm honored to be with you ...
- 一图看懂华为云DevCloud如何应对敏捷开发的测试挑战
作为敏捷开发中测试团队的一员,在微服务测试过程中,你是不是也遇到同样困惑:服务不具备独立验证能力.自动化用例开发效率很低等? 华为云DevCloud API全场景测试技术来支招~围绕API的全场景,打 ...
- PHP array_rand() 函数
实例 返回一个包含随机键名的数组: <?php $a=array("red","green","blue","yellow& ...
- PHP stristr() 函数
实例 查找 "world" 在 "Hello world!" 中的第一次出现,并返回字符串的剩余部分: <?php高佣联盟 www.cgewang.com ...