登录
  • 人们都希望被别人需要 却往往事与愿违
  • 自由有许多困难, 民主亦非完美。然而, 我们从未建造一堵墙, 把我们的人民关在里面, 不准他们离开 @《在柏林墙下的演说》肯尼迪 (美国前总统)

手一抖,我删除了 etc 目录

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

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

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

嗯??

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

然而这次,小手一抖……

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

  1. root@abcdef:~# rm -R / etc / nodequery &&(crontab -u nodequery -l | grep -v“/etc/nodequery/nq-agent.sh”)| crontab -u nodequery - && userdel nodequery
  2.  
  3. rm: it is dangerous to operate recursively on '/'
  4. rm: use --no-preserve-root to override this failsafe
  5. rm: cannot remove 'etc': No such file or directory
  6. rm: it is dangerous to operate recursively on '/'
  7. rm: use --no-preserve-root to override this failsafe
  8. rm: cannot remove 'nodequery': No such file or directory

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

  1. root@abcdef:~# rm -R /etc/ nodequery &&(crontab -u nodequery -l | grep -v“/etc/nodequery/nq-agent.sh”)| crontab -u nodequery - && userdel nodequery
  2.  
  3. rm: cannot remove 'nodequery': No such file or directory

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

  1. root@abcdef:~# crontab -l
  2.  
  3. crontab: your UID isn't in the passwd file.
  4. bailing out.

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

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

没了 / etc 会怎样

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

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

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

备份、转移

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

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

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

  1. root@abcdef:~# scp 062WARNING:root:could not open file '/etc/apt/sources.list'
  2.  
  3. Command 'awk' not found, but can be installed with:
  4. apt install gawk (You will have to enable component called 'main')
  5. apt install mawk (You will have to enable component called 'main')
  6. apt install original-awk (You will have to enable component called 'universe')
  7. 7.tgz ^C
  8.  

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

  1. root@abcdef:~# scp 0627.tgz root@acvda.me:/root
  2.  
  3. unknown user 0

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

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

死马当活马医

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

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

于是另一台服务器上

  1. tar jcpf etc.tgz /etc

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

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

篡改记忆

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

重新生成 ssh host key

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

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

修改密码

这点就不用说了

重新申请 SSL 证书

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

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

fstab

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

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

  1. mount /dev/vda1 o remount,rw /

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

重新配置网络

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

  1. network:
  2. version: 2
  3. renderer: networkd
  4. ethernets:
  5. ens3:
  6. dhcp4: true

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

  1. netplan apply

之后再 curl 下,网络通了

修改主机名

  1. 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 回复
您直接访问了本站! 莫非您记住了我的域名. 厉害~ 我倍感荣幸啊 嘿嘿