我死了之后 会变成那些星星吗?
你想变成星星吗?
想啊,因为我的家人都在那里
这样啊 真想变成美丽的星星 想变成星星的话… 必须先好好地活着才行啊
什么是「活着」?
活着,就是怀抱希望的意思
希望?
人若是失去了希望 就无法活下去
如果连希望本身都消失了呢?
希望不会消失的 是人们变得看不见希望而已
不干了,我开除了黑心公司。不好意思,走错片场了。我不是不干了,我没有开除了黑心公司。我是手一抖,删除了/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 root@acvda.me:/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 工具就很重要了。
另外还有一种可能,假如我当初在/
下,那这条命令一贴——凉凉。
行了我也不说啥了,不想引战,管他原创不原创转载不转载的,怪我自己粗心了。