登录
  • 人们都希望被别人需要 却往往事与愿违
  • 没有哪种编程语言能阻止程序员写出糟糕的代码, 不管这种语言的结构有多么好@Larry Flon

手一抖,我删除了etc目录

Linux Benny小土豆 8365次浏览 3653字 15个评论
文章目录[显示]

我死了之后 会变成那些星星吗?
你想变成星星吗?
想啊,因为我的家人都在那里
这样啊 真想变成美丽的星星 想变成星星的话…必须先好好地活着才行啊
什么是「活着」?
活着,就是怀抱希望的意思
希望?
人若是失去了希望 就无法活下去
如果连希望本身都消失了呢?
希望不会消失的 是人们变得看不见希望而已

不干了,我开除了黑心公司。不好意思,走错片场了。我不是不干了,我没有开除了黑心公司。我是手一抖,删除了/etc目录……

嗯??

作为一名Linux老司机,我经常自吹自擂拥有n年Linux使用经验,root敢死队从未翻车过。实际上,除了n年前凌晨三四点重装服务器时忘记备份数据库之外,我还真没翻车过。

然而这次,小手一抖……

事情是这样的,nodequery挂了,我寻思着换一个监控服务,那就要先把原来的监控脚本删掉,可是我这么懒,又删除用户删除crontab删除文件的,我就直接在网上找了下删除的命令:

root@abcdef:~# rm -R / etc / nodequery &&(crontab -u nodequery -l | grep -v“/etc/nodequery/nq-agent.sh”)| crontab -u nodequery  - &&  userdel nodequery

rm: it is dangerous to operate recursively on '/'
rm: use --no-preserve-root to override this failsafe
rm: cannot remove 'etc': No such file or directory
rm: it is dangerous to operate recursively on '/'
rm: use --no-preserve-root to override this failsafe
rm: cannot remove 'nodequery': No such file or directory

我这一看,报错了,哎哟啊前面怎么有个空格呢,啊这样

root@abcdef:~# rm -R /etc/ nodequery &&(crontab -u nodequery -l | grep -v“/etc/nodequery/nq-agent.sh”)| crontab -u nodequery - && userdel nodequery

rm: cannot remove 'nodequery': No such file or directory

好像没问题了,确认一下crontab已经没了吧!

root@abcdef:~# crontab -l

crontab: your UID isn't in the passwd file.
bailing out.

哎哟我去?我的UID不在passwd里?什么,卧槽卧槽卧槽……

事情就是这么个事情,经过就是这么个经过,/etc目录被我干掉了!(╯‵□′)╯︵┻━┻

没了/etc会怎样

首先系统的各种配置是没了,ssh肯定也登不上去,因为sshd要检查/etc/ssh/sshd_config的配置的。别想了,VNC也不好用。此时这台服务器就像是行尸走肉一样……

但是好消息是,Nginx,PHP和MySQL还是运行着的,虽说Let’s Encrypt证书也丢了,但是Nginx还缓存着,所以网站其实还活着。

还有一个更好的消息,当前的shell还在!这个shell是我唯一的机会!别断网别断网就好……

备份、转移

这台服务器的用途比较单一,更可怕的是,主人还不是我,天啊我也会做出传说中删库跑路的事情吗!

冷静了几秒钟之后,趁着没断网赶紧打包备份网站文件,导出数据库,大不了重装。

文件打包完了,scp发给我的另一个服务器吧

root@abcdef:~# scp 062WARNING:root:could not open file '/etc/apt/sources.list'

Command 'awk' not found, but can be installed with:
apt install gawk (You will have to enable component called 'main')
apt install mawk (You will have to enable component called 'main')
apt install original-awk (You will have to enable component called 'universe')
7.tgz ^C

唉??bash completion也挂了?那我不补全了可以吧

root@abcdef:~# scp 0627.tgz [email protected]:/root

unknown user 0

啊对啊,因为sshd凉了,所以依赖于ssh的一些命令,比如scp也凉了……那我SFTP往回下载文件也不行啊……

啊那我cp到webroot下,另一台服务器赶紧wget,然后删除webroot下的文件……

死马当活马医

数据备份好了,那么现在该思考怎么恢复了,不能一辈子不重启,自己也没法ssh啊……赶紧登录下阿里云看看有没有快照——没有哦。

重装系统?那太麻烦了。本着死马当活马医的思想,试试移花接木吧——我把另一台配置基本一样的服务器的配置拷贝过来看看ssh能不能活。

于是另一台服务器上

tar jcpf etc.tgz /etc

一定要记得带p参数,这样才会保持权限。scp不管用,那也放到webroot下,赶紧wget然后删除,然后解压缩……

新开一个ssh连接,哇,活了……当然了host keys是另一台服务器的,密码也是,主机名也是……这就好像换头术哦!

篡改记忆

医学史上换头术难度极高,也可能有一些伦理问题,但是咱这来说,这就像是换了个身体,灵魂还是另一个服务器……还要做一些配置的

重新生成ssh host key

咱着让两台服务器的host key都一样,自己用起来太不好了,所以要重新生成一组

rm -v /etc/ssh/ssh_host_*
dpkg-reconfigure openssh-server

修改密码

这点就不用说了

重新申请SSL证书

由于整个letsencrypt目录也没了,所以也没办法revoke证书,直接删除/etc/letsencrypt然后apt install certbot,然后再重新申请一个证书好了

我还是年轻啊,我做完这些的时候我觉得差不多了,就一个reboot重启了。当然了这怎么够啊……fstab呢,网络呢!!很悲剧的,我ssh不上,还好VNC是好用的

fstab

于是我VNC登录上,看着这台服务器还叫着别人的名字,唉……

由于现在大家基本上是用UUID挂载的磁盘,很少有人直接指定设备名了,所以这里肯定有问题啦。解决办法很简单,remount为rw,改一下下

mount /dev/vda1 –o remount,rw /

这样根就是可以读写的了,然后看情况更改/etc/fstab

重新配置网络

另一台服务器使用的是静态IP,这台服务器使用的是DHCP,所以网络是肯定不通的。首先ifconfig确定下我的网卡叫ens3,由于我用的是Ubuntu 18.04,所以要去修改netplan的配置文件/etc/netplan/01-netcfg.yaml,写如下配置:

network:
  version: 2
  renderer: networkd
  ethernets:
    ens3:
        dhcp4: true

确定缩进也没问题,应用下配置

netplan apply

之后再curl下,网络通了

修改主机名

hostnamectl set-hostname abcde

检查其他配置与服务

这点就因人而异啦~

后遗症

毕竟咱这个/etc是别人的,所以有些地方肯定是有问题的。比如说……

文件和目录的所有者可能会改变

毕竟uid不同,所以遇到这种情况只能手动改改啦

某些服务可能启动不了

比如在我这里就是MySQL启动不起来。第一猜想是权限不够?chown了也不对

后来发现报错mysqld_safe --malloc-lib can not be read and will not be used

后来发现把my.cnf里的malloc-lib=/usr/lib/libtcmalloc.so注释了就好

然后突然想起来,这两台服务器似乎是曾经做的主从,于是现在农奴翻身把歌唱,大家都是奴隶了呗?

断掉的符号链接

有些/etc里的文件可能是符号链接到其他目录的,那就自己重新弄下吧。

损失了什么

在这接近两个小时(15:45-17:55,包括给人送文件和回家路上),总结下来,我只损失了一套SSL证书,大概半小时左右的网站宕机时间。

当然如果处置得当,宕机时间应该可以保证在一分钟之内的(重启验证是否恢复)。唉,还是年轻啊。

哦?

事后回想起来,直接不检查复制粘贴回车别人的命令真的很危险,这还不是恶意的那种,只是写错了,外加我手抖了一下。

恶意的命令是什么呢?

有种命令,复制的和粘贴的不一样哦,这个技术叫pastehijack哦。这时候有一个聪明的SSH工具就很重要了。

手一抖,我删除了etc目录

另外还有一种可能,假如我当初在/下,那这条命令一贴——凉凉。

行了我也不说啥了,不想引战,管他原创不原创转载不转载的,怪我自己粗心了。

 


文章版权归原作者所有丨本站默认采用CC-BY-NC-SA 4.0协议进行授权|
转载必须包含本声明,并以超链接形式注明原作者和本文原始地址:
https://dmesg.app/rm-etc.html
喜欢 (15)
分享:-)
关于作者:
If you have any further questions, feel free to contact me in English or Chinese.
发表我的评论
取消评论

                     

去你妹的实名制!

  • 昵称 (必填)
  • 邮箱 (必填,不要邮件提醒可以随便写)
  • 网址 (选填)
(15)个小伙伴在吐槽
  1. 有个问题,我在linux中的ssh环境下执行了rm -rf /*这个命令,然后...,ssh工具就寄了,这个工具是基于chromebook终端的ssh功能,现在这个工具表面上一切正常,但是一旦尝试ssh连接就会报255错误,(;´д`)ゞ,关键是这个功能好像还是基于docker虚拟的,想重置也不知道去哪{{{(>_<)}}}
    summit2023-12-20 09:28 回复
    • 你这……在这种情况下,包括ls 都没了,只有 shell 内建的命令还在(比如 echo),之前看到过一篇文章力挽狂澜😓但是我找不到了
      Benny小土豆2023-12-20 09:57 回复
  2. 这顿操作其实是炫技咯。
    行星带2019-09-27 22:16 回复
    • 哪有,瓜子都瞎掉了
      Benny小土豆2019-09-27 22:32 回复
  3. 删库跑路,完结撒花!?
    无用挂件2019-08-15 14:18 回复
    • 啪打飞!
      Benny小土豆2019-08-15 14:37 回复
  4. 参数加引号警告
    Chion2019-07-14 07:47 回复
  5. 你为什么要暴露那么多自己的信息,到底怕不怕被查水表!
    anomymous2019-06-28 23:36 回复
  6. 操作 666
    远哥制造2019-06-28 10:27 回复
  7. 手抖一时爽,一直手抖一直爽?
    EAimTY2019-06-27 21:49 回复
    • 不能天天这么爽啊?
      Benny小土豆2019-06-27 21:55 回复
  8. ?删库跑路 ???
    Y@ndere2019-06-27 21:10 回复
    • 不跑不啊跑~
      Benny小土豆2019-06-27 21:54 回复
  9. 大佬就是大佬
    弦上韫玉2019-06-27 20:21 回复
    • 一顿操作啊!
      Benny小土豆2019-06-27 20:29 回复