有一天,一个朋友让我更改他们忘记的 Linux 服务器的 root 密码。
我已经多次完成此过程并且没有任何问题,但是这次发生了一些奇怪的事情,我需要对此进行解释。
我做了什么 :
1.重新启动服务器并进入单一模式,再次要求我输入 root 密码以进行维护。
2.再次重启服务器并将其添加init=/bin/bash
到启动选项的末尾,然后很快得到了一个 shell(我想,我几乎完成了这项工作)。
3.我以前mount -o remount remount, rw/
能够写入磁盘。
4.passwd
然后我使用命令更改了 root 密码收到密码更新成功的消息。
5.重新启动系统(我按了 Ctrl+Alt+Del)。
6.尝试了新的 root 密码,它被拒绝,因为密码错误。我试了几次。没有运气。
7.再次执行上述步骤并修改密码文件,创建一个没有密码的新用户(new_user::0:0:root:/root:/bin/bash)
,保存文件并重试。再次报告密码错误!(没想到会要求输入密码,因为new_user
没有密码)
8.打开影子文件并输入我知道其值的哈希值new_user
。然后我保存了文件。我清楚地看到系统确认更改已写入文件,再次尝试。没有运气。
9.再次查看影子文件,又一次惊喜:我输入的值new_user
不在那里。我不明白为什么,因为我在Nano
编辑器中看到了文件已被修改的确认信息。
10.我重新启动了系统并再次检查了影子文件。在这里我意识到每次重新启动系统时,原始 root 用户的哈希都会发生变化 !!!
这可能是我无法更改 root 密码的原因,但这是为什么呢?每次我重新启动服务器时,似乎都必须处理一个新的哈希值(Coluld it be a lock or something on shadow file ?)
。我不明白发生了什么。
最终决定撤销更改,所以我转到文件passwd
并删除了我添加的行new_user
(再次确认更改),但重新启动服务器后,我检查了passwd
文件,发现用户仍然在那里。我无法写入影子文件,但有一次我写入 passwd 文件时,我无法将其删除。
请帮助我理解这个问题。
答案1
sync
-sync
修改后,重启前运行。更改可能只存在于磁盘缓存中,缺少适当的初始化会导致更改无法写回。- 只读磁盘故障:某些基于闪存的系统可能会发生故障,从而变成只读。我使用 SD 卡时就遇到过这种情况,但 SSD 也可能出现这种情况。但如果机器在正常启动时工作正常,则这种情况不太可能发生。