误删Linux etc目录下shadow文件的解决方案

由于本人之前在博客服务器上部署了XXX服务导致服务器IP被封,所以这次换了一个新IP后,打算彻底清除了服务器中该服务相关的文件以避免IP再次被封。但是由于本人手贱,将etc目录下的shadow文件及其备份文件全部误删,本文将介绍shadow文件被误删后的解决方案

abstract.jpeg

Linux下的密码系统

早期Linux系统中,密码是直接存储到/etc目录下的passwd文件中。后面基于安全考虑,将用户密码经过加密后存储到/etc目录下的shadow文件中,如下图所示,passwd文件中的用户密码则用x代替,而真正的密码则经加密后存储在shadow文件中

figure 1.jpeg

误删shadow文件的修复方法

本人就是在本地终端用root账号操作的,然后一不小心把shadow文件误删了。这时会发现无法使用账号密码从终端登录服务器了,因为此时Linux系统中已经没有了账号的密码信息,自然无法验证账号完成登录

由于这个时候正常的登录操作都无法成功。笔者就只能从云服务器的Web管理后台以root身份登录进去来开展修复工作了

1. 清除账号密码

root身份通过passwd命令清除账号的密码,即让账号无密登录。值得一提的是,-d选项是只有root用户才可以使用的选项

1
passwd -d [username]    # 通过 -d 选项清除指定账号的密码

2. 恢复shadow文件

虽然上一步,我们通过清除账号的密码可以让我们在本地终端上正常登录到服务器上了,但是很明显这不是一个长久之计,没有密码,安全风险非常大。所以,我们还是需要恢复shadow文件,实现凭密登录。方法其实很简单,通过 pwconv命令开启用户的投影密码就可以轻松完成:当shadow文件不存在时,其将根据/etc目录下的passwd文件来生成建立相应的shadow文件

1
pwconv # 开启用户的投影密码,生成shadow文件

3. 设置密码

为了防止意外发生,建议在设置用户密码前,先重启下服务器。重启之后,我们就可以再次使用passwd 命令来设置用户密码了。至此,我们就完成了误删shadow文件的修复工作,现在可以在本地通过终端来登陆服务器了

1
2
passwd  # 普通用户修改当前账号的密码
passwd [username] # 通过root用户修改指定账号的密码

Note:

Linux系统下的/etc目录用于存放系统管理、配置文件

0%