😤😤😤😤# 大佬们,请教个问题:
rm -rf 这个命令是用来强制删除 linux 文件的,但是坊间流传的数据库删库命令也是他,然而删除 mysql 数据库命令是 drop database xxx
所以这两个命令是不是被网友混淆了?
而且一般数据库都是云端的,本机远程连接,在 mysql 命令行执行 rm 命令也是无效的啊。。。
所以该怎么解释使用 rm -rf 删库跑路的段子?
难道我的数据库知识白学了?
因为我之前工作的一家公司是多台服务器独立 ip,而且分为生产服务器和测试服务器,数据库也是独立的。总监说买服务器,然后组长马上就买了,几万的样子,在阿里云。
平时我最多也就可以看到 git 仓库里面测试数据库的账号密码,所以说我以为大家都是比较规范的管理数据库(生产数据库服务器和部署代码的生产服务器独立运行 ),rm -rf 删库这种操作得有个前提就是数据库服务器所在的主机已经暴露了ssh 22端口,这个被危险分子拿到之后就比较危险了。
接下来咱们对比一下华住酒店的服务器和大厂服务器规范化:
拿到主服务器ip之后,使用神器 mobaxterm [推荐一波] 扫描开放端口, 发现华住首先作为企业网站都没有使用ssl证书,太落后了;
其次向外网开放了200以内的高危端口号,尤其是风险最高的22ssh 端口 和 3306 mysql 数据库端口。。。
再看看某度,只开放了80 和 443 http + https 端口用于网页访问。这个没有槽点。。。
1
429463267 OP 哪位大佬解释下?
|
2
zn 2018-09-21 21:02:38 +08:00
drop database 删数据库不能删掉数据库所处文件。
但是 rm -fr 删数据库所处文件一定能删掉数据库。 |
3
young6 2018-09-21 21:02:45 +08:00 via Android
数据库也得以一种方式持久化在磁盘上
|
4
cnbobolee 2018-09-21 21:05:47 +08:00
直接把数据库存储文件删除了
|
6
akira 2018-09-21 21:06:36 +08:00
而且一般数据库都是云端的
-------------------------------------- 这个假设错了哦。rm -rf 删库的,都是自建的数据库 |
7
CasualYours 2018-09-21 21:07:03 +08:00 via Android
太天真了,rm -rf 是可以删掉 linux 的
|
8
yingfengi 2018-09-21 21:07:43 +08:00 via Android
@429463267 你这样去深究就没意思了,就是个梗。
要这么说,我 ssh 用 3306 端口啊 |
9
429463267 OP @young6
也就是说这种情况是: 必须得有数据库所在物理主机的 21 端口权限,使用 shell 命令从物理上删除 mysql 存储文件? 那么使用云数据库的情况只有 3306 端口权限,rm 就不奏效了吧? |
11
429463267 OP |
12
fy 2018-09-21 21:12:10 +08:00 7
楼主感觉数据库知识白学了,我感觉我计算机知识白学了。
|
14
lihongjie0209 2018-09-21 21:13:34 +08:00
你把系统删了, 数据库还在?
|
15
musi 2018-09-21 21:16:10 +08:00 via Android
难道不是 rm -rf /
要不你试一下 看看能不能把数据库删掉 |
16
429463267 OP @lihongjie0209
我的理解是: 一般企业使用的云端数据库服务器,基本都是只开放相应的端口,比如 3306,这种情况下就无法通过 xshell 之类的远程终端登录 21 端口,所以 mysql 终端里面怎么执行 rm -rf ? |
17
changnet 2018-09-21 21:20:58 +08:00 via Android 2
楼主没分清楚 shell 指令和 sql 语句,以及他们执行的环境
|
18
429463267 OP @musi
我的理解是: 一般企业使用的云端数据库服务器,基本都是只开放相应的端口,比如 3306,这种情况下就无法通过 xshell 之类的远程终端登录 21 端口,所以 mysql 终端里面怎么执行 rm -rf ? |
19
429463267 OP |
20
RickyHao 2018-09-21 21:23:17 +08:00 via Android
楼主请去学一下计算机基础知识,用一下 Linux 再来提问吧…
|
21
zeroDev 2018-09-21 21:24:52 +08:00 via Android
建议题主自己试试
|
22
CasualYours 2018-09-21 21:27:40 +08:00 via Android
@429463267 这样肯定不会,然而出事的都是远程服务器,而且超级用户权限。这个 var 放在根目录挺碍眼的,rm,然后 gg
|
23
mikeguan 2018-09-21 21:28:49 +08:00 via Android 1
21 端口一般 FTP 用
22 端口一般 ssh 用 无法连接数据库服务器 如果需要运维操作怎么办?你的服务器只开 3306 端口可以 但是你需要确保你永远不需要登录操作 |
25
zn 2018-09-21 21:44:46 +08:00 via iPhone 1
@429463267 那是你觉得,你的想法很正确,然而你的想法有个致命缺陷,那就是太理想化了,以为所有企业都很专业很严格地管理、使用数据库。
现实中大部分企业都是自己在服务器上安装一个数据库,然后就这么用下去了。然后总会有手贱的人一不下心在服务器上运行了个 rm -fr /,然后就 gg 了。 |
26
izoabr 2018-09-21 21:51:27 +08:00
你可以弄个数据库,然后#rm -rf /
你会发现无忧无虑 |
27
429463267 OP |
28
429463267 OP |
29
celeron533 2018-09-21 21:59:30 +08:00 via Android
@429463267
Drop database 实在数据库管理控制台里做的,只能删除数据库,不影响数据库软件自身以及文件系统 rm rf 则是在数据库所在的操作系统做的事情,任何东西都可以一锅端,包括数据文件和数据库软件以及操作系统自身 如果 dba 能直接 ssh 到数据库服务器(不是 MySQL 控制台),然后 su rm rf 那就完蛋了 |
31
zn 2018-09-21 22:12:41 +08:00 via iPhone
@429463267 你应该还没工作吧,很多情况想得太理想化了。其实这样做的公司太多了因为服务器托管是要钱的,一年一万左右,两台就是两倍价格。所以很多公司就托管一台性能好的,什么都放上面跑,比你托管两台划算多了。这是性价比问题,不是穷不穷的问题。一个巨无霸汉堡 20 块,两个 30,你肯定买得起,可是你会买两个回来吃一个扔一个吗?
|
32
harde 2018-09-21 22:21:10 +08:00
|
33
harde 2018-09-21 22:23:39 +08:00
无论是不是多服务器,你数据库的服务器总是需要维护的。 那就会给 rm -rf /提供机会。
即使所谓的云数据库,你也很难保证云厂商的攻城狮不给你来个从删库到跑路。。。 |
34
Cu635 2018-09-21 22:29:16 +08:00
数据库怎么存放数据啊,不还是以文件形式存放在磁盘上嘛。只是文件内容不是明文而是二进制格式化的了。
|
35
MonoLogueChi 2018-09-21 22:30:09 +08:00 via Android 2
一切皆是文件
|
36
kslr 2018-09-21 22:33:12 +08:00
数据库机器也需要维护,那就有操作环境
|
37
young6 2018-09-21 22:36:21 +08:00 via Android
@429463267 ssh 是在端口 22 ;所以说用 rm -rf 删库的都是运维,开发一般没有存储数据库机器的 root 权限。不管用啥服务器,总需要有人维护,总有被 rm -rf 的风险。
|
38
xiqingongzi 2018-09-21 22:46:13 +08:00 via iPhone
你高看了云服务的普及程度。以及,云服务也需要人维护。只要有人 rm-rf,就没救。
|
39
luozic 2018-09-21 22:49:04 +08:00 via iPhone 1
root 用户上去干活,并且一般 rm 不都是 alias 到 mv 到备份文件夹?
|
40
mikeguan 2018-09-21 22:55:45 +08:00 via Android
@429463267 #28 数据库服务器也需要维护的 你的想法部署一次跑终身基本不可能 虽然需要登录操作数据库的情况很少 比如磁盘满了,你需要清日志,需要打安全补丁等也会需要登录的
|
41
NullPoint 2018-09-21 23:05:19 +08:00 via Android
温馨提示 备份也删掉
|
42
Judoon 2018-09-21 23:19:56 +08:00 via Android
数据库再怎么服务化,也基本是跑在 linux 上的,数据也是会要落盘的,你没权限 rm 不代表别人没有
|
43
fyibmsd 2018-09-21 23:25:05 +08:00 via iPhone
知道啥叫万物皆文件吗
|
44
likuku 2018-09-21 23:44:19 +08:00
云端的数据库也不是凭空悬在真空中啊...虽然只给你等麻瓜开放个 3306 之类的端口。
实际再怎么也是跑在一个系统里的,即便是容器 /虚拟机,它们底层承载还是有个系统的... 直接登入承载系统,rm -rf ...太慢了好嘛,直接 dd if=/dev/zero of=/dev/disk 就好,直接给裸磁盘写满空数据。 |
45
chiu 2018-09-21 23:54:12 +08:00
All is file
rm 能删万物 |
46
RobertYang 2018-09-22 00:11:48 +08:00 via Android
要不你先在生产环境试试?
|
47
Rehtt 2018-09-22 00:19:43 +08:00 via Android
数据库其实就是以文件的方式存在磁盘上的,而 rm -rf 是把磁盘上的文件都删了
|
48
zjp 2018-09-22 01:13:42 +08:00 via Android
还有一点,MySQL,PG 都能在客户端执行系统命令。没人用 root 跑数据库吧,rm -rf /执行不了,删除数据库文件的权限还是有的
|
49
littlewing 2018-09-22 01:20:36 +08:00
试一下在 MySQL Client 中敲 \! rm -rf /
|
50
jadec0der 2018-09-22 01:25:52 +08:00
DBA 登录服务器很正常,因为要排查问题需要看日志啥的
|
51
dangyuluo 2018-09-22 04:20:41 +08:00
drop 是可以通过 binlog 恢复的,只要你有耐心和运气。rm 真的就是回天乏术了
|
52
susecjh 2018-09-22 06:51:46 +08:00 via Android
基础感人
|
53
happyz90 2018-09-22 06:54:50 +08:00 via Android
@429463267 如果只开放 3306 用于数据库,那你想想最初安装和配置数据库是怎么在这台机器上操作的?同样的方式就可以在这台机器上执行 rm 了。
|
54
IvanLi127 2018-09-22 07:20:05 +08:00 via Android
云数据库难道不跑在服务器上?难道没人能操作云数据库的服务器?难道什么人都有资格操作数据库?删库跑路也得有点资格才行
|
55
aver4vex 2018-09-22 07:22:49 +08:00
数据库最终也是以文件的形式存在于系统中。这个没毛病老铁。
|
56
huluhulu 2018-09-22 08:50:24 +08:00 via iPhone
drop 只能删除 mysql 数据库,也可能只能删除一个数据库,但是 rm -rf /可以删除任何数据库,不管数量种类大小。
|
57
passerbytiny 2018-09-22 09:01:10 +08:00
你们是太小看数据库了,数据库本身是有一部分日志或容灾措施的,虽然不完善,但是有。
如果只是 drop,没备份也有一定的几率恢复过来。而 rm -rf,没备份的话,基本没可能救回来了。 另外,rm -rf 命令通常是用来清理临时文件的,使用频率非常高,但经常 drop database 的人,你能遇见几个。 |
58
GeruzoniAnsasu 2018-09-22 09:45:22 +08:00 via Android
知道是段子还能钻牛角尖钻到这个程度也是厉害
|
59
429463267 OP |
60
C2G 2018-09-22 09:57:04 +08:00 via Android
华住那个应该是 cdn 的吧。cdn 开放了 3306 和 22。
|
61
Hucai 2018-09-22 10:07:39 +08:00
你要是能够远程登录 mysql 服务器的 shell,rm 干掉 mysql 轻而易举
|
62
zzugyl 2018-09-22 10:15:08 +08:00 via Android
我干过 rm -rf 删除数据库。领导让我清理服务器,但是我没数据库权限,直接干掉所有数据部文件。后来领导求他记错了,数据库还在用😂
|
63
LoliconInside 2018-09-22 10:48:55 +08:00
shell 命令和 DDL 语句的区别。。。
|
64
karllynn 2018-09-22 10:49:04 +08:00
linux 一切皆文件啊,rm 一切
|
65
mytry 2018-09-22 10:49:52 +08:00
|
66
ymj123 2018-09-22 11:43:42 +08:00 via Android
mobaxterm 还有这种用途?不就是当远程连接工具来用吗?
|
67
xillwill 2018-09-22 15:12:15 +08:00
简单,rm -rf /*这个命令简单 易懂 Drop 命令首先严重性可能不如 rm -rf 其次 有点长 乱玩梗的人记不住
少开这种玩笑 现在看来算是有点无知。。。。 |
68
henglinli 2018-09-22 16:23:08 +08:00 via iPhone
就看看
|
69
KgM4gLtF0shViDH3 2018-09-22 17:29:33 +08:00 via iPhone
卧槽,我还不知道 mobaxterm 能扫描端口
|
70
429463267 OP @ymj123
@bestkayle tool 工具栏里面很多实用的神器 ![]( http://p7fcrq2e4.bkt.clouddn.com/201818221816-20180922_181656.png) |
71
bao3 2018-09-22 19:09:48 +08:00 via iPhone
rm 命令是删除文件,你的数据库不是以文件存储的?
|
72
flypei 2018-09-22 20:18:48 +08:00
有没有人发现最后百度那张图的:Scanning port #1683
|
73
best66 2018-09-22 20:42:30 +08:00
数据库不是文件吗...
|
74
lavenderkissyou 2018-09-22 21:10:47 +08:00
我天 权限真高
|
75
xfspace 2018-09-22 22:22:13 +08:00 via Android
huazhu.com 明显是蜜罐
|
76
Applenice 2018-09-23 01:35:27 +08:00
mobaxterm 还能这么用。。。学习了
|
77
newborn 2018-09-23 11:17:35 +08:00
就 mysql 而言,物理删库的命令是 rm -rf /var/lib/mysql/*
|
78
zjiwgod 2018-09-23 18:46:27 +08:00
直接删的数据库文件吧
|
79
mingyun 2018-10-05 12:59:37 +08:00
一直没执行过 rm -rf / 有点心痒
|