ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

虚拟机忘记密码?PE引导与单用户模式重置Windows/Linux密码

虚拟机忘记密码?PE引导与单用户模式重置Windows/Linux密码 群里隔三差五就有人问一句“虚拟机破解密码怎么做”点进去一看截图多半是卡在登录界面。聊到最后基本都是同一个答案不是要去动别人的系统而是自己那台 Windows 或 Linux 虚拟机密码忘了里面还有没来得及保存的脚本、配置、数据库连接信息舍不得直接删掉重建。这篇文章我要聊的正是这个场景——在你自己拥有并授权的虚拟机里利用虚拟化层提供的便利把遗忘的登录凭据重置掉。我不会去谈任何针对他人系统的破解手段也没有必要正经的运维和开发环境里绝大多数“虚拟机破解密码”的需求本质都是密码恢复。适合看这篇内容的包括忘了虚拟机管理密码的个人用户、给团队维护测试虚拟机的开发同学以及刚开始用 VMware Workstation 或 VirtualBox、担心哪天把自己锁在门外的虚拟机新手。1. 先搞清楚“破解密码”到底要解决什么问题1.1 你可能遇到的三类真实场景第一类Windows 虚拟机的本机登录密码不记得了。常见于很久之前随手建了个 Win10 虚拟机当时图省事设了一个临时密码结果放了两三个月再打开时怎么输都不对。更尴尬的是这台虚拟机里可能还开着自动启动的数据库服务数据都在里面不能直接删了重来。第二类Linux 虚拟机的 root 密码或者某个普通用户密码想不起来。做开发的同学经常这样测试环境一堆 Ubuntu、CentOS密码随手设成 root、123456后来为了安全改过一次但改完没记录过阵子再登录就彻底对不上号了。第三类同事交接虚拟机时没给密码。这种我遇到过好几次原本负责环境的人离职了把 VM 文件留在共享存储上可密码没人知道。但请注意这里有个前提你确实拥有这台虚拟机的管理权限公司把它分配给你管理你只是为了继续接手这个环境而不是去黑别人的机器。所以先想明白我们要做的是“重置密码”不是也没必要去研究什么底层抓密码的技术。虚拟机能做到这件事核心原因是虚拟化层把你的系统整个“包”起来了可以随便挂载工具盘、改启动参数、回滚状态这比物理机要灵活得多。1.2 为什么虚拟机里做密码恢复比物理机容易关键差别有三个。第一可以随意换引导介质。物理机想重置密码要么拆机、要么做启动U盘流程麻烦虚拟机只需要在设置里把 ISO 镜像挂到 CD/DVD 驱动器重新启动就直接从工具盘引导了。第二可以修改内核启动参数。Linux 物理机想进单用户模式开机过程一闪而过经常来不及按按键虚拟机里可以在 GRUB 菜单慢慢敲甚至把启动参数截下来研究清楚再继续。第三快照和整体备份。这是物理机完全比不了的优势操作前拍一个快照改坏了直接回滚整个过程毫无压力。虚拟机磁盘本身就是一个文件还可以先整体复制一份做备份安全性远超物理机。1.3 必须划清的边界提示以下所有操作都只适用于“你自己创建、团队分配给你管理、或已获得明确授权处理的虚拟机”。用同样的方法去重置别人机器的密码无论对象是谁、动机是什么都属于越权行为。我写这篇内容只为了应对遗忘密码这种正经需求请一定确认自己有权限再动手。这个边界不是客套话而是“虚拟机破解密码”这个主题里最容易被忽略的一点。网上很多教程把手段讲得天花乱坠但从不提权限边界最后被误用的案例太多了。作为从业者我觉得有责任把丑话说在前面。2. 动手前的准备工具、镜像与后悔药2.1 需要准备的三样东西第一样是虚拟机软件本身。VMware Workstation 17、VirtualBox 都行我日常用得最多的是 VMware Workstation Pro因为挂载 ISO、编辑虚拟机设置、拍快照这些操作都在图形界面里点几下就能完成对新手友好。VirtualBox 同样能做只是路径稍有差异核心思路没区别。第二样是引导用的系统镜像。Windows 虚拟机需要准备一个 Windows PE 类型的启动镜像PE 里一般自带密码重置工具或者你另外下载一个独立的 NT 密码编辑工具放进去。Linux 虚拟机更简单准备一个对应发行版的 Live CD 镜像就行比如 Ubuntu 24.04 LTS Desktop ISO也可以直接用同版本的系统安装盘选“试用”模式。第三样是磁盘空间。虚拟机本来就要占空间再加上一个 ISO 和一份备份文件建议预留至少 20GB 的可用空间避免操作到一半发现盘满了。注意下载 PE 或 Live 镜像请务必去官方渠道或可信站点不要随便用来路不明的“装机工具”尤其是号称“一键破解密码、无限修复”的那种里面塞没塞后门谁也说不清。2.2 快照不是可选项是必选项我一再强调所有密码重置操作动手前第一件事就是拍快照。在 VMware 里操作很直接先关闭虚拟机然后在菜单栏点击“虚拟机 → 快照 → 拍摄快照”给快照起一个容易认的名字比如“重置密码前备份”加上描述说明一下当前状态。为什么快照这么重要因为密码重置的本质是修改系统认证文件——Windows 里是 SAM 文件Linux 里是 /etc/shadow。这两个文件一旦写错结果不只是“密码改不回来”还可能出现账户被禁用、管理员组被破坏、系统启动直接失败等问题。有了快照你随时可以回到操作前的状态重新再来没有快照那就要折腾很久去修复一个本来很简单的问题。2.3 整体备份磁盘文件除了快照我还建议在操作前把虚拟机的磁盘文件复制一份到别的位置。VMware Workstation 虚拟机目录里的 .vmdk 文件就是你的整个磁盘VirtualBox 里则是 .vdi。直接复制文件时要先确保虚拟机处于关机状态否则文件可能不一致。也许有人觉得快照已经够了为什么还要整个复制一份因为快照是“挂”在当前虚拟机上的万一后面误操作把虚拟机删了、或者快照链本身出问题那才是真没救了。磁盘文件备份是最后一道保险放那儿不动安心不少。3. Windows 虚拟机密码重置PE 路线为主3.1 使用 PE 引导并重置密码这是目前最通用、成功率最高的 Windows 密码恢复方式。整体思路是让虚拟机先从 PE 启动然后在 PE 环境里直接修改系统磁盘上的 SAM 数据库把对应用户的密码清空或重置。具体操作步骤我拆开讲。第一步编辑虚拟机设置把 PE 的 ISO 镜像挂载到 CD/DVD 驱动器并确保开机时从该设备启动。在 VMware 里可以在“虚拟机设置 → CD/DVD (SATA) → 使用 ISO 镜像文件”中完成。启动时如果直接进了原系统说明引导顺序不对可以重启后在出现 VMware Logo 时快速按 F2 进入 BIOS 设置把 CD/DVD 启动顺序调到最前。第二步从 PE 启动后系统会进入一个精简的桌面环境。不同 PE 工具界面有差异但基本都内置了“密码修改”“密码重置”这类功能通常需要单独打开。第三步在密码重置工具里选择系统盘里的 SAM 文件。路径一般是C:\Windows\System32\config\SAM。注意PE 环境下盘符可能与正常系统不同要根据卷标和目录结构判断哪一个是系统盘别选到 PE 自己的虚拟盘。第四步工具会列出 SAM 中的用户列表选中目标账户选择“清空密码”或“修改密码”。我倾向于直接清空这样重启进入系统后可以重新设置一个自己记得住的新密码。第五步修改完成后重启虚拟机。重启前记得把 ISO 从虚拟光驱里卸载或者修改引导顺序回到硬盘优先。正常启动后用空密码或新密码登录然后立刻去“设置 → 账户”里重新设置正式密码。3.2 额外思路命令提示符替换法除了 PE 路线还有一种经常被提到的旧方法——命令提示符替换法江湖上常叫“粘滞键后门”。它的原理很简单Windows 登录界面按 5 次 Shift 会触发粘滞键sethc.exe如果把 sethc.exe 替换成 cmd.exe那么在这时候就能打开一个命令提示符窗口在里面执行net user 用户名 新密码就能改掉密码。操作流程是这样的用 Windows 系统安装光盘或恢复环境引导按下 ShiftF10 打开命令提示符先用dir c:\确认系统盘盘符Windows RE 环境下可能是 D:然后依次执行copy /b C:\Windows\System32\sethc.exe C:\Windows\System32\sethc.exe.bak copy /b C:\Windows\System32\cmd.exe C:\Windows\System32\sethc.exe重启进入系统在登录界面按 5 次 Shift窗口弹出后执行net user Administrator 你要设置的新密码我之所以说它是“额外思路”是因为这个方法在现代 Windows 10/11 上已经没那么好用一是系统文件保护机制经常拦截 sethc.exe 的替换二是杀毒软件会把这种替换行为直接当风险处理三是如果系统盘启用了 BitLocker 加密离线修改系统文件这条路基本走不通。所以现在的首选方案我依然推荐 PE 工具。3.3 Windows 重置的几个坑说几个实操中容易踩的坑。第一BitLocker 加密的问题。如果虚拟机启用了 BitLockerSAM 文件是加密存储在磁盘上的PE 工具理论上读不到真实内容强行改密码大概率失败。遇到这种情况你得先解决磁盘解锁问题而这又需要恢复密钥。所以在日常使用中如果虚拟机里存了重要数据我不建议随手就开 BitLocker除非你有完整的恢复密钥备份。第二分清 UEFI 和 Legacy BIOS。新版的虚拟机默认可能是 UEFI 引导PE 镜像也要用支持 UEFI 的版本否则启动时会卡住。如果 PE 进入后看不到硬盘大概率是启动模式不对去虚拟机设置里把固件类型调整成兼容模式再试。第三不要修改默认账户的禁用状态。PE 工具里可以“启用/禁用账户”有些教程会让你直接启用 Administrator 账户但如果你不小心把自己常用的标准账户禁用了登录进去会发现权限乱七八糟还不如老老实实只改密码。4. Linux 虚拟机密码重置单用户模式和 Live 环境4.1 通过 GRUB 加参数进入紧急模式Linux 虚拟机密码重置的思路和 Windows 完全不同不需要用第三方工具修改密码文件而是直接利用系统内核本身的启动机制。最常见的做法是修改 GRUB 启动参数让系统临时进入单用户或紧急模式在这个模式下不需要密码就能拿到 root shell然后直接修改密码。以 CentOS/RHEL/Fedora 这类 systemd 发行版为例操作如下第一步重启虚拟机在 GRUB 菜单出现时按键盘上的e进入编辑模式。第二步找到以linux或linuxefi开头的那一行这一行包含了内核启动参数。在这一行的末尾先敲一个空格然后加上rd.breaklinux /vmlinuz-... root/dev/mapper/... ro ... rd.break第三步按CtrlX或F10启动。系统会进入一个基于 initramfs 的紧急 shell提示符类似switch_root:/#。此时根文件系统被挂载在/sysroot且处于只读状态需要先改成可写mount -o remount,rw /sysroot chroot /sysroot第四步进入真实的系统环境后直接修改 root 密码passwd root如果系统启用了 SELinux 强制模式建议同时创建一个重新标记文件否则重启后可能因为安全上下文问题导致登录异常touch /.autorelabel第五步输入两次exit退出 chroot 和 initramfs系统会自动重启。启动过程会比平时慢一些因为 SELinux 在做重新标记属正常现象耐心等待即可。4.2 更简单的 init/bin/bash 方式除了rd.break还有另一个更直接的参数init/bin/bash。它的意思是在内核启动的最后阶段不启动 systemd直接拉起一个 bash。同样是进入 GRUB 编辑在linux那行末尾加init/bin/bash启动后你会直接看到一个 root shell不过此时根文件系统多半还是只读的先重新挂载mount -o remount,rw / passwd root这里有个前提要注意如果根文件系统本身就是 LVM 逻辑卷系统启动到该阶段时 LVM 通常已经被内核初始化好了所以可以直接操作。如果遇到看不到逻辑卷或无法挂载的情况还是回到rd.break或者用下面的 Live 方式不要死磕这一种。4.3 通过 Live 系统 chroot 修改密码另一种思路是“外部介入”用一个独立的 Linux Live 系统启动虚拟机然后把原系统的磁盘挂载到一个目录里再通过 chroot 进入原系统修改密码。这个方法更保险尤其适合根文件系统情况比较复杂、或者 GRUB 已经损坏的场景。具体步骤如下第一步在虚拟机设置里挂载 Ubuntu 或对应发行版的 Live ISO比如 Ubuntu 24.04 LTS Desktop 镜像从光盘启动并选择Try Ubuntu进入桌面环境。第二步打开终端查看磁盘分区情况lsblk一般能看到原系统的根分区比如/dev/sda2。如果系统用了 LVM你可能看到的是类似/dev/mapper/ubuntu--vg-ubuntu--lv这样的设备名。第三步挂载根分区到 /mntsudo mount /dev/sda2 /mnt如果/boot是独立分区也要挂载上sudo mount /dev/sda1 /mnt/boot第四步chroot 进入原系统sudo chroot /mnt passwd 你的用户名如果是修改某个普通用户而不是 root就直接使用用户名想改 root 密码则执行passwd root。第五步退出并重启exit sudo reboot重启时记得把 Live ISO 移除让它从硬盘正常启动。4.4 SELinux、磁盘加密和 cloud-init 等特殊情况这几个特殊情况我单独拿出来说因为真的坑过不少人。SELinux 的问题我在 4.1 里提过一次。如果你用的是 RHEL/CentOS/Fedora并且在 chroot 或紧急模式里改了密码重启后大概率会被 SELinux 拦截现象是输入正确密码依然无法登录或者反复回到登录界面。解决办法就是操作完顺手执行touch /.autorelabel让系统在下次启动时自动修正安全上下文。磁盘加密场景要复杂得多。如果当初安装系统时选择了全盘加密LUKS那在rd.break模式下根本看不到明文系统更别说改密码了。这种情况下你必须先掌握 LUKS 的密码或恢复密钥在启动引导阶段先解锁磁盘才能进到下一步。需要说明的是如果连 LUKS 密码也忘了那就不是重置系统密码能解决的问题了这层加密本身就是保护数据的忘了就等于彻底丢失访问能力。cloud-init 覆盖密码的情况在云镜像里很常见。用 openstack、Proxmox 模板或者官方云镜像创建的虚拟机首次启动时 cloud-init 可能接管用户配置把你辛辛苦苦改好的密码在启动阶段又覆盖回默认值。遇到这种情况改完密码之后要检查一下/etc/cloud/cloud.cfg里的配置或者干脆用系统自带的管理工具如passwd后立即登录一次确认没有再次变化。5. 常见问题与排错实录5.1 密码重置失败速查表说到这儿我把实操中遇到最多的问题整理成一个速查表方便你对症下药。现象可能原因解决方法PE 工具里找不到 SAM 文件磁盘未正确识别、BitLocker 加密确认系统安装盘先解锁 BitLocker换支持 UEFI 的 PEWindows 清空密码后无法登录误禁用管理员账户、账户被工具改动回滚快照重来用 PE 把账户重新加回管理员组Linux 改完密码重启又变回原样cloud-init 覆盖、操作时忘了重新挂载 rw检查 cloud-init 配置确认mount -o remount,rw /Linux 重置密码后被 SELinux 拦截忘记生成.autorelabel重新进入紧急模式执行touch /.autorelabel后重启修改密码时报“只读文件系统”根分区没有以 rw 方式重新挂载执行mount -o remount,rw /或/sysroot虚拟机意外断电后启动提示异常上次非正常关机正常选择启动进入系统后拍新快照5.2 我踩过的几个坑先说一个最便宜的教训有一次帮同事重置一台 CentOS 虚拟机密码全部操作都搞完了重启却发现连系统都进不去。排查了半天发现是 GRUB 参数里多加了一个不认识的参数把引导搞崩了。还好动手前拍过快照回滚之后重新操作十分钟解决。从那以后我再也不省拍快照这一步。另一个容易忽略的问题是 VMware 的“虚拟机上次意外关机”提示。密码重置过程中如果虚拟机不小心被强制断电下次开机 VMware 会问你是“我已移动该虚拟机”还是“已复制该虚拟机”之类的问题有时界面会卡一下。遇到这种情况不用慌按提示选择“继续启动”基本都能进进去后再重新拍快照做标记即可。再有就是分区识别问题。给一台 LVM 布局的 Linux 虚拟机做 Live 重置时我照着笔记挂载/dev/sda2却一直失败后来才发现它根本不是根分区真正的根逻辑卷在/dev/mapper/centos-root。现在我的习惯是无论什么发行版都先用lsblk -f看一遍文件系统类型和挂载点再决定往哪个设备上挂载千万别凭记忆猜。5.3 收尾工作不能省密码重置成功后很多人觉得万事大吉直接把虚拟机关了。我建议你多留几分钟做三件小事。第一拍一个新快照命名里带上日期和“密码已重置”这样的关键词。以后如果再出问题你知道哪个快照是安全状态。第二把新密码记录到密码管理器里或者至少写进团队共享的密码库。密码重置这件事最怕的就是“改完又忘”下次再重置一轮纯属浪费时间。第三检查一下虚拟机里的加密功能、登录验证方式等策略。比如 Windows 重置完空密码后是否开了 Windows Hello 相关选项Linux 改了 root 密码是否还需要更新/etc/shadow的相关策略。这些细枝末节看起来不起眼却决定着你下一次访问虚拟机是否顺利。再补一个和我操作习惯直接相关的小技巧我会在宿主机上单独建一个iso-tools目录里面固定存放 PE 镜像、常用 Linux Live ISO、以及一份记录常用虚拟机账号密码的加密笔记。这样每次遇到进不去的虚拟机直接挂载现成镜像按笔记流程走正常情况 10 分钟以内就能恢复访问。密码重置这活做熟了就是个标准流程真正拉开差距的是细节里的认真和习惯上的稳妥。
返回列表