1. 问题描述
事情起因:
对某个系统进行安全测试时,测试人员发现了任意文件删除漏洞,于是便删除了 /etc/passwd 以及 /etc/passwd- 两个文件。
导致结果:
网页上的系统仍然在正常运行,但是所有用户均无法通过SSH客户端连接,也就无法进行恢复操作。
2. 解决步骤
考虑到搜索这篇文章的你八成也是遇见了类似的问题。那就不说废话,直接上解决步骤:
2.1 如果只删除了 /etc/passwd
方法一:你还连接着服务器,可以执行命令
记住,千万不要退出!不要重启!
恭喜你,你这个情况处理起来比较简单。/etc/passwd- 是 /etc/passwd 的备份文件。那么你只需要将 /etc/passwd- 这个引子文件拷贝给 /etc/passwd 即可。
cp /etc/passwd- /etc/passwd
方法二:你无法登录系统,也无法执行命令
这个情况下,核心就是首先要先登录到系统里,然后按照第一种情况,从备份文件(/etc/passwd- )恢复。这里需要了解一下【单用户模式】。
对linux不太熟悉的小朋友科普一下,linux 分为多种模式:
0:关机
1:单用户模式
2:无网络支持的多用户模式
3:有网络支持的多用户模式
4:保留,未使用
5:有网络支持有X-Window支持的多用户模式
6:重新引导系统,即重启
正常情况, Linux 系统开机或重启后,能自动引导启动到多用户模式,并提供正常的网络服务。如果系统启动异常或需要进行系统维护时,就可以进入单用户模式对系统进行管理了。
特注:单用户模式,没有开启网络服务,不支持远程连接
进入单用户模式方法不尽相同,以下步骤仅做参考。
step1:重启机器。启动时长按shift键,进入grub菜单。
step2:选中高级项,按 e 进入编辑grub的界面
step3:找到Linux 开头的行(有recovery字样的),然后挪到 ro recovery nomodeset 那里,修改改为
rw single init=/bin/bash
step4:按ctrl x 退出,进入单用户模式
step5:按照情况一处理,执行cp /etc/passwd- /etc/passwd
, 退出重启
2.2 如果删除了 /etc/passwd ,以及 /etc/passwd-
太惨了……不过还有希望……
可以看一下备份里有没有这些文件,也就是 /var/backups 目录下。
方法三: 在 /var/backups 下有备份文件
step1: 如果你无法执行命令,请先进入参照1进入单用户模式。
step2: 如果你有多个硬盘,而且是单用户模式进来的,别忘了挂载上这些硬盘。
step3: 进入备份目录下,看有没有对应文件。
cd /var/backups
ls
step4: 如果你看到了 passwd.bak 。恭喜你,这个就是备份文件,复制过去即可。
cp passwd.bak /etc/passwd
cp passwd.bak /etc/passwd-
step5: 退出重启。(如果没有备份,就继续往下看吧)
方法四:文件恢复
如果在 /var/backups 下没有找到备份文件,这个情况最为棘手,可以尝试进行下文件恢复试试。
如果你的运维知识不够丰富的话,建议立马停手!不要在进行任何文件的写操作。抓紧找运维老师傅来进行恢复文件。
方法五:无中生有
如果无法进行文件恢复,或者找不到运维老师傅。那找一下有没有一模一样的系统,或者在虚拟机安装一个,直接拷贝过来对应文件!
当然并不是拷贝过来就可以用,因为用户未必一样,所以会有 “水土不服 ” 的问题。改造的话,你得先了解一下,这个文件到底是个什么东西。
这里推荐一篇博客,讲的还挺好的。–> 详解Linux中/etc/passwd文件
如果没有的话,那就自己创建一个吧……反正也就十几行代码,手敲出来就成了。
看完后,你会发现,/etc/passwd 和 /etc/shadow 有着千丝万缕的关系,那么就按照/etc/shadow 来仿写即可。
希望文章可以帮助到你~~