在 RHEL/CentOS 7 中重置密码时使用 chroot 命令有何用途?

在 RHEL/CentOS 7 中重置密码时使用 chroot 命令有何用途?

我试图准确地理解密码重置过程在 CentOS/RHEL 7 中的工作原理,但我缺少一些基础知识。

一些 不同的 例子我认为这chroot /sysroot是必要的,但我不明白为什么或这一步具体是做什么的。措辞示例:

  • (来源 A)“5 – 现在使用此命令访问系统。”
  • (来源 B)“BOOM。您处于单用户模式。shell 提示符!--看起来像:/#
    type chroot /sysroot”
  • (来源 C)“然后使用 chroot 进入 chroot 监狱”

可以说,这些过程的解释有点稀疏。 :-( 有人可以详细说明一下吗?

答案1

您正在谈论重置丢失的程序密码。仅当 root 密码丢失时才需要此操作没有sudoroot 访问权限或类似的可用权限。

启动时,引导加载程序(通常是 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 文档。

相关内容