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