答案1
您正在谈论重置丢失的程序根密码。仅当 root 密码丢失时才需要此操作和没有sudo
root 访问权限或类似的可用权限。
启动时,引导加载程序(通常是 GRUB)加载 2 个文件:内核和 initramfs(也称为 initrd)文件。 initramfs 文件包含一个最小的文件系统,其中包括激活真实根文件系统、其磁盘控制器以及激活它所需的其他功能所需的任何工具和内核模块(例如:LVM、磁盘加密、多路径和/或软件 RAID)。
引导rd.break
选项告诉引导序列在系统仍在使用 initramfs 时停止,但真正的根文件系统已经挂载在/sysroot
.通常,下一步是执行ivot_root操作,切换/sysroot
到真正的根文件系统,从那里开始执行内容,然后从内存中删除initramfs。
通过在 initramfs 中停止,我们可以访问紧急 shell。但 initramfs 的可用命令数量非常有限,并且编辑 initramfs/etc/passwd
文件不会有任何效果,因为整个 initramfs 无论如何都会被真正的根文件系统取代。
根文件系统最初以只读模式安装,以便允许文件系统检查。第一步是以读写方式重新安装它,以允许更改密码。
该chroot /sysroot
命令的意思是:“启动一个新的 shell,该 shell 的/sysroot
目录将显示为/
。”在该 chrooted shell 中,/etc/passwd
和/etc/shadow
将引用真实根文件系统中的真实密码文件,并且/bin/passwd
将与系统正常运行时使用的命令相同。由于这个 chrooted shell 是从紧急 shell 启动的,因此您已经拥有完全的 root 访问权限,并且您可以使用该passwd
命令为任何人设置新密码,而无需先询问旧密码 - 包括设置新的 root 密码。
该过程完成后,第一个exit
命令将退出 chrooted shell 并返回到初始紧急 shell,该 shell 仍将真正的根文件系统视为/sysroot
.第二个exit
命令将把控制权返回给启动脚本,每当使用紧急 shell 时,启动脚本通常会触发重新启动。
这是您需要的解释吗?
答案2
在单用户模式下,文件系统以/sysroot
只读(默认)或读写模式安装(如果ro
替换为rw init=/sysroot/bin/sh
.
现在我们需要在重置 root 密码之前将根文件系统更改为/sysroot
使用。chroot /sysroot
这是关于此的官方 RedHAT 文档。