密码这种东西,忘掉它只需要一秒钟,想找回来却可能要折腾一晚上。尤其是自己搭的虚拟机,平时开个 root 会话挂在那里,几个月不碰,等真到要用的时候,屏幕上冷冰冰一句 su: authentication failure,或者 SSH 连上去被 Permission denied, please try again 弹回来,那一刻是真的有点上头。
不过好消息是:你自己的虚拟机,只要宿主机还在你手里,root 密码就永远不是真正的“丢失”,只能算“暂时想不起来”。这篇文章我用自己的实操经历,把虚拟机里重置 root 密码的几条路都梳理一遍,从最常用的 systemd 单用户模式,到内核参数直接干进 shell,再到救援盘兜底,最后聊几个我踩过的坑。所有操作都基于“这是你自己的虚拟机、你有宿主机控制权”这个大前提,目的就是让你在合法自用场景下,把系统重新拿回手里。
1. 先搞懂“破解”root密码的基本盘:你在和谁打交道
1.1 虚拟机比物理机“好说话”的根本原因
很多人第一次听到“破解虚拟机 root 密码”,第一反应是这东西是不是很黑科技。其实恰恰相反,虚拟机重置密码的难度,比物理机低了不止一个量级。原因很简单:物理机你还要考虑引导介质、U 盘启动、BIOS 安全启动这些乱七八糟的限制,而虚拟机里你能直接操作宿主机上的虚拟机配置文件,甚至能“强行”改启动参数、挂载救援镜像、删除重置引导状态。相当于你不仅拿到了机箱钥匙,还能直接把手伸进主板里拨开关。
拿 VMware Workstation 来说,虚拟机本质上就是一坨文件(.vmdk 虚拟磁盘、.vmx 配置文件、.vmem 内存快照等)。宿主机上你拥有这些文件的完全控制权,所以不管是改启动参数,还是挂载一个 Live CD 镜像文件进去当光盘启动,都是几个点击的事。VirtualBox 同理,它还能直接通过 VBoxManage 命令对虚拟机做更底层的控制。
1.2 重置密码的三个层面,别搞混了
在我展开讲具体步骤之前,先把“重置 root 密码”这件事拆成三个层面,因为很多人一上来就在错误的地方使劲:
- 引导层(GRUB):修改内核启动参数,让系统跳过正常的密码校验流程,直接给你一个 root shell。这是最快、最常用的一条路。
- 用户态层(单用户模式 / 救援模式):通过 systemd 的
rescue.target或者emergency.target进入一个最小化环境,在这个环境里用passwd命令重设密码。 - 离线层(Live CD / 挂载磁盘):完全不启动原系统,用另一个系统把原磁盘挂载上来,直接编辑
/etc/shadow或者 chroot 进去改密码。这是兜底方案,也是很多人不知道但其实最稳的方案。
这三条路其实都指向同一个本质:你需要在“不需要输入原密码”的前提下,获得对一个可写文件系统的访问权。理解了这一点,你后面看到各种五花八门的教程,就不会再被绕晕了——不管步骤怎么变,核心永远是这个。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 最常用的招式:通过 GRUB 编辑内核参数进入单用户模式
2.1 CentOS/RHEL 7/8/9 系的操作全流程
如果你用的发行版是 CentOS、RHEL、Rocky Linux、AlmaLinux 这类 Red Hat 系,那这套操作基本通用。我在 Rocky Linux 9 和 CentOS 7.9 上都实测过,流程完全一致。
第一步,重启虚拟机。在 VM 启动画面出现后,立刻用鼠标点进虚拟机窗口,不停按键盘上的方向键,目的是打断 GRUB 的自动倒计时,让菜单停住。这一步很多人会忽略,以为虚拟机不需要抢键盘,结果系统直接进正常引导了,又要重启一次。按的时机其实很宽松,只要在 GRUB 倒计时阶段按都来得及,我一般是开机后立刻连按方向键。
第二步,在 GRUB 菜单上,用方向键选中你要进入的内核条目(通常是第一项),然后按 e 键进入编辑模式。这时候你会看到一长串的启动参数,里面有一行是以 linux 或 linux16 开头的,这行就是内核引导参数的所在地。
第三步,找到这行中以 ro 结尾(或者 ro 后面还跟了 rhgb quiet)的位置。把光标移到行尾,先加一个空格,然后删掉 rhgb 和 quiet 这两个参数,再补上 rd.break 或者 init=/bin/bash。我把这两种方式对比一下:
| 参数 | 效果 | 优点 | 缺点 |
|---|---|---|---|
rd.break |
在 switch_root 之前中断,进入一个极小环境的 shell | 文件系统还没被正式挂载,干扰最小 | 需要手动重新挂载 /sysroot,多几步操作 |
init=/bin/bash |
让内核直接启动 bash,而不走 systemd | 挂载的是根文件系统,直接可以操作 | 有些系统根文件系统是只读挂载的,需要自己 mount -o remount,rw / |
我个人更推荐 rd.break,尤其在 RHEL 7/8/9 上,它进入的 shell 在 initramfs 阶段,环境非常干净,不太容易因为文件系统状态问题翻车。
第四步,关键动作。按 Ctrl+X 或者 F10 用修改后的参数启动系统。如果你用的是 rd.break,系统会停在 switch_root:/# 这个提示符下。这时候先执行:
bash复制mount -o remount,rw /sysroot
chroot /sysroot
这里必须解释一下为什么:rd.break 中断时,真正的根文件系统其实已经挂载到了 /sysroot 目录下,但它默认是只读的。你不重新挂载成可读写,后面 passwd 命令写入 /etc/shadow 必然失败。chroot 之
