首页 / 资讯中心 / 文章详情

Ubuntu忘记密码?GRUB恢复模式与Live USB重置全攻略

Ubuntu忘记密码?GRUB恢复模式与Live USB重置全攻略 ★ FEATURED ARTICLE
一台 Ubuntu 机器放了两三个月没开机今天要用的时候密码就是想不起来了。这事我在同行里听得实在太多自己也亲手处理过好几台。先说结论Ubuntu 密码忘记属于“小事一桩”只要没有开启全盘加密几十秒就能重置回来根本不用重装系统。这篇文章我会把两条最常用的重置密码路径从头到尾讲清楚——一条是从 GRUB 恢复模式直接改另一条是拿 Live U 盘启动后 chroot 进去改。最后再把我踩过的一些奇奇怪怪的坑翻出来晒一晒免得你下次照着搜来的教程折腾半天还进不了系统。1. 密码重置这事为什么能成先弄懂密码存在哪1.1 Ubuntu 的密码其实在 /etc/shadow 里很多新手第一反应是“系统都进不去了密码怎么改”。其实 Linux 的密码管理逻辑比你想的简单得多系统里每个用户的密码哈希值都存放在/etc/shadow这个文件里普通用户看不到也改不了但root有绝对权限直接操作它。真正负责“改密码”的命令叫做passwd它的本质就是以 root 身份去更新/etc/shadow里的那串哈希值同时做一些密码强度校验和过期策略处理。所以重置密码的核心思路就一条想尽一切办法获得一个 root 权限的 shell然后执行passwd 用户名。剩下的问题就只是“怎么在进不了桌面的情况下拿到 root shell”。理解了这一点你再看网上的各种教程就会非常通透——什么恢复模式、Live USB、内核参数本质上都是为同一个目标服务。我也建议你先停止焦虑花两分钟判断一下自己的场景再动手操作。1.2 三条重置路径的优缺点对比我实际用过且验证有效的方法主要有三条各有各的适用场景路径适用场景所需条件难度风险GRUB 恢复模式系统能开机GRUB 菜单能调出来无额外介质低低最推荐Live USB chroot系统进不去、GRUB 调不出、或需要修更多问题需要 U 盘和镜像中低最通用内核参数 init/bin/bashGRUB 能进但恢复模式选项失效需要会编辑 GRUB 启动项中稍高容易误操作第一条路径是最省事的因为不需要额外准备任何东西开机后直接操作。第二条路径是我处理陌生机器时的首选它相当于在一个隔离的急救环境里“外科手术式”地修改原系统兼容性最好。第三条路径属于偏门解法在一些老教程里能看到优点是快缺点是一旦 GRUB 参数抄错或者系统本身有问题容易卡在奇怪的地方。1.3 动手前先判断磁盘有没有加密这一步非常关键我甚至建议你把它放在所有操作之前。Ubuntu 安装时有两个容易混淆的加密选项一个是“加密整个磁盘”使用的通常是 LUKS另一个是“加密我的个人目录”使用的通常是 ecryptfs它们在忘记密码时的表现完全不同。如果你安装时勾选了 LUKS 全盘加密那么开机时会先出现一个紫色的密码输入界面让你输入“加密盘密码”来解开磁盘然后才会进入 GRUB 和系统登录界面。这时候如果你把这个加密密码忘了那后面一切重置用户密码的操作都毫无意义——因为磁盘密文根本解不开系统连文件都读不到更别提改/etc/shadow了。这种情况下唯一能救命的只有当初生成的恢复密钥文件或者你确实还记得密码。所以在动手执行任何重置操作之前先用lsblk -f看一眼你的磁盘分区里有没有crypto_LUKS类型如果有先确认你记得那个密码或找到恢复密钥再继续往下走。2. 最省事的方法GRUB 恢复模式下直接改密码2.1 怎么把 GRUB 菜单叫出来默认情况下 Ubuntu 的 GRUB 菜单是隐藏的开机直接进系统登录界面所以你要在恰当的时机按键把它调出来。这里有个容易踩坑的地方传统 BIOS 的机器一般是在开机后持续按住 Shift 键而 UEFI 的机器由于启动速度极快Shift 键经常来不及响应我一般建议尝试连续快速按 Esc 键或者同时按住 Shift Esc。你在屏幕上会看到几个选项去选第二项Advanced options for Ubuntu回车进入里面会列出当前系统内核的列表一般会有两行其中一行末尾带(recovery mode)选它。如果不小心错过了时机直接进了系统没关系重启再来多试几次总能逮到。如果是 UEFI 机器但按 Esc 没反应先进 BIOS 设置把“快速启动 / Fast Boot”关掉同时把“安全启动 / Secure Boot”暂时关掉GRUB 菜单会好调很多。2.2 进入恢复菜单拿到 root shell进入 recovery mode 之后你会看到一个蓝底白字的恢复菜单里面有很多选项resume、network、root 等等。选择root - Drop to root shell prompt按回车确认系统会把你丢进一个 root 用户的 shell提示符一般是rootubuntu:~#。进入后先别急着改密码有一件事必须立刻做mount -o remount,rw /为什么要先执行这一句因为 Ubuntu 的恢复模式出于安全考虑默认把根文件系统挂载成了只读模式。如果你不重新挂载为可写直接执行passwd会提示权限错误或者写入失败报错信息通常类似passwd: Authentication token manipulation error。很多网上教程没说这一步导致一堆人卡在这里把耐心磨光。执行完这条命令后你可以用mount | grep / 确认一下输出结果里有rw字样就说明根文件系统已经是可写状态了。2.3 用 passwd 重置用户密码现在你已经有了一个“能写文件系统的 root shell”重置密码的命令非常简单passwd 你的用户名比如你的登录用户叫alice那就执行passwd alice系统会提示输入两次新密码输入时屏幕不会显示任何字符这是正常的别以为是键盘坏了。成功后会输出passwd: password updated successfully。这里要提醒一个常见坑如果你直接敲passwd而不带用户名它默认改的是root的密码。Ubuntu 默认情况下 root 用户是锁定的很多人从没设置过 root 密码如果你误改了 root 密码反而可能留下一个你都不知道的口令。所以请一定记得带上你的普通用户名字。如果你确实想顺便给 root 设置一个密码那再执行sudo passwd root或者当前 shell 下直接passwd root也行。新密码建议至少 12 位包含大小写字母和数字千万别在整个团队都在用的机器上设置一个太简单的密码后续麻烦无穷。2.4 退出并恢复正常启动改完之后输入exit退出 root shell回到恢复菜单选择resume继续正常启动。系统会像什么都没发生过一样把你带回登录界面这时候输入你刚刚设置的新密码就能进系统了。如果这台机器配置了自动登录重启后可能直接进入桌面但这不代表密码没改成功——下次注销或锁定屏幕时你再试新密码就知道了。整个过程不用执行sync也不用担心密码没写进磁盘passwd命令本身会在更新/etc/shadow时同步落盘。唯一要注意的是如果在恢复模式里你还执行过其他操作比如删了文件、改了系统配置那请想清楚再退出恢复模式里没有图形界面也不存在“撤销”按钮。3. 通用方案Live USB 启动后 chroot 改密码3.1 制作并启动 Live U 盘GRUB 恢复模式虽然省事但不是万能的。有些机器 GRUB 损坏、菜单调不出来、或者恢复模式选项进去就黑屏这时候就需要 Live USB 这条兜底路线了。准备一个至少 4GB 的 U 盘去 Ubuntu 官网下载和你当前系统版本匹配的桌面版 ISO 镜像然后用系统自带的“启动盘创建器”或者常见的写盘工具把镜像写入 U 盘。写盘完成之后把 U 盘插到目标机器上通过启动快捷键一般是 F12、F2、F10 之类的不同品牌不太一样选择从 U 盘启动进入 Live 环境后选择“试用 Try Ubuntu”不要点安装。这里不需要联网也不需要硬盘上的任何配置就是一个完全独立的临时系统。旁边如果有另一台电脑建议在它上面把下面的命令提前准备好省得在 Live 环境里手忙脚乱。3.2 定位并挂载原系统的根分区进入 Live 桌面后打开终端首先查看磁盘布局lsblk -f这个命令会列出所有磁盘、分区、文件系统类型和挂载点。你要找的是原系统根分区一般是ext4类型大小和你安装时给根目录分配的空间吻合。如果你不确定可以再用sudo blkid查看分区的 UUID然后和安装系统时记录的信息对照。如果原系统有独立的/boot分区通常也是ext4大小 500MB 左右也要记下它的设备名。然后把原系统的根分区挂载到/mntsudo mount /dev/sda3 /mnt如果你的系统使用了 LVM 逻辑卷管理lsblk -f里会看到/dev/mapper/...这样的路径需要先激活卷组sudo vgscan sudo vgchange -ay激活后再用lsblk查看确切的逻辑卷路径一般类似/dev/mapper/ubuntu--vg-ubuntu--lv挂载到/mnt即可。这一步是很多教程糊弄过去的地方但实际遇到的机器里有不少是 LVM 布局抄错路径后面全是问题。3.3 绑定系统目录后 chroot 进去只把根分区挂到/mnt还不够直接chroot /mnt会遇到各种诡异问题因为 chroot 的隔离环境里看不到/dev、/proc、/sys这些虚拟文件系统而passwd生成密码哈希时需要从/dev/urandom读取随机数不挂载/dev会导致随机源异常甚至写入失败。所以我们需要把这几个关键目录绑定进去sudo mount --bind /dev /mnt/dev sudo mount --bind /proc /mnt/proc sudo mount --bind /sys /mnt/sys sudo mount --bind /run /mnt/run如果有独立的/boot分区这一步也要挂上sudo mount /dev/sda2 /mnt/boot然后进入原系统环境sudo chroot /mnt此时你的终端提示符会变成root主机名:/#说明你已经“置身”于原系统的文件系统里了。执行passwd 你的用户名输入两次新密码出现password updated successfully就完成了。这里和恢复模式的操作本质上完全一样区别只是换了一个进入 root shell 的通道。3.4 退出和卸载的正确顺序改完密码后先输入exit退出 chroot 环境然后按从底层到上层的顺序依次卸载挂载点顺序反了会提示target is busysudo umount /mnt/run sudo umount /mnt/sys sudo umount /mnt/proc sudo umount /mnt/dev sudo umount /mnt如果有挂载/boot记得在卸载/mnt之前先sudo umount /mnt/boot。全部卸载完重启电脑拔掉 U 盘进入正常的系统登录界面测试新密码。这个流程看着比恢复模式长但其实熟练了也就五分钟的事而且它几乎适用于所有 Linux 发行版学会一次终身受用。4. 实际操作中绕不开的那些坑4.1 文件系统依然只读passwd 报错这是两条方案里最常见的失败原因尤其是从恢复模式操作时。症状很明确执行passwd后系统返回passwd: Authentication token manipulation error或者Password change failed。本质就是/etc/shadow所在的分区正处于只读挂载状态写完的密码根本落不了地。解决办法也很直白在 root shell 中执行mount -o remount,rw /之后再用mount | grep / 确认rw已经生效。如果在 Live USB 方案里遇到类似问题可以尝试sudo mount -o remount,rw /mnt。如果这条命令报了Read-only file system那多半是文件系统本身有脏数据或硬件层面的写保护先用sudo dmesg | tail查看内核日志确认磁盘状态再考虑是不是需要先fsck修复文件系统。4.2 密码改好了登录后发现主目录变成全新的空目录这个坑非常隐蔽踩过一次你就会记一辈子。旧版 Ubuntu 的安装向导里有一个“加密我的个人文件夹Encrypt my home folder”的选项它把用户主目录用 ecryptfs 加密密码由登录密码派生出来的“包装口令wrap passphrase”保护。这种情况下你直接passwd改了登录密码登录虽然成功了但系统无法用新密码去解开之前加密的主目录表现就是你能进系统、能看到桌面壁纸但是打开文件管理器发现主目录空空如也或者全是系统默认配置。如果你遇到这种情况别急着格式化重装。可以尝试在系统里启动一个救援终端执行ecryptfs-recover-private来寻找并挂载被加密的旧主目录它会询问你旧的登录密码或者包装口令。说白了如果用户数据本身是用加密保护的重置登录密码并不能“顺便”解锁数据这与 LUKS 全盘加密一样真正的密码或恢复口令才是唯一钥匙。日常使用中如果你不确定自己开没开过这类加密可以在/home下看看该用户的目录权限再检查/home/.ecryptfs这个隐藏目录是否存在。4.3 GRUB 菜单怎么按都出不来总有一些机器顽固得让人想砸电脑按 Shift、按 Esc、长按、连按GRUB 菜单就是不出来。原因通常是 UEFI 固件的快速启动让键盘控制器初始化太晚按键根本没被 GRUB 收到或者显示适配器切换慢你的按键已经错过了检测窗口。这种时候别死磕了直接上 Live USB 是最务实的选择。如果你实在不想做 U 盘另一个思路是如果这台机器还装着另一个 Linux 系统、或者你手头有另一台机器的 root 权限可以通过grub-set-default、手动编辑grub.cfg或者重装 GRUB 来解决但操作复杂度远高于做一次 Live USB。我自己的原则是凡是遇到 GRUB 调不出来的机器一律用方案二处理省得浪费时间试按键时机。4.4 双系统环境下挂载错了分区用 Live USB 处理双系统机器时最大的风险是搞混分区。很多人的磁盘上一眼看去全是 ext4一个是 Ubuntu 的根分区一个是 Windows 的某个数据分区甚至还有一个做备份的 Linux 分区。如果你挂错了、在错误的分区里 chroot 并执行了passwd轻则白忙一场重则对不该动的系统产生不可预期的影响。怎么避免挂载前用lsblk -f看清楚每个分区的 UUID、卷标、大小和挂载点再对照原系统安装时的分区规划。如果还拿不准可以先只挂载一个候选分区到/mnt然后cat /mnt/etc/fstab看fstab里记录的根分区 UUID 和你挂载的分区是否一致。这是最可靠的判断方法因为/etc/fstab里明确写着系统自认为的根目录、家目录和交换分区分别在哪个 UUID 上。养成这个核对习惯可以帮你躲开大量低级错误。4.5 心跳改的密码是 root 而不是普通用户很多教程直接写“进入 root shell 后输入passwd”没有提醒用户这是改 root 密码。如果你照着做最后能进入系统该试试哪个密码大概率一脸懵。Ubuntu 的默认设计里root 用户是锁定的日常操作全靠 sudo 用户也就是说真正起作用的往往是某个普通用户的密码。所以无论用哪种方案请一定记得操作对象是普通用户的用户名。如果你已经误改了 root 密码还想把 root 重新锁回去可以在系统里执行sudo passwd -l root这会锁定 root 密码让 root 无法通过密码登录恢复 Ubuntu 的默认安全状态。4.6 resets after reboot密码明明显示成功却还是进不去有一种很冤的情况passwd命令执行成功了恢复模式下resume也能进入系统但登录时就是提示密码错误。先别怀疑自己手滑看看会不会是键盘布局问题。比如你设置了中文输入习惯但在纯英文环境下输入密码时某些字符比如、:在美式和欧式键盘布局下会打出完全不同的符号。最简单的排查方法在登录界面切到其他用户或虚拟控制台CtrlAltF2手动输入时先故意输错一次看提示再换一种键盘布局重试。实在不行把所有密码改成系统自带字符集里不会因布局变化的纯字母数字组合。5. 重置完成之后的收尾和防忘记建议5.1 先做一轮登录验证密码改完之后别急着关机走人花三十秒做一轮完整验证。重启进入正常系统在登录界面输入新密码确认能进桌面然后打开终端执行sudo -i再输入一次密码确认 sudo 权限正常。这一步的意义在于密码重置本质上只是改了/etc/shadow如果这台机器的 PAM 配置、keyring 或指纹登录等模块有额外要求你可能会遇到“登录进去了但 Gnome 钥匙环还在用旧密码”这类奇怪情况早点发现早点处理。如果你之前设置过开机自动登录重置密码后建议先注销一次用新密码登录一遍再决定要不要恢复自动登录免得哪天重启后进不去又得去折腾恢复模式。5.2 别再把密码交给“临时记忆”了处理完这次危机我强烈建议你顺手做几件小事把新密码写进密码管理器里不要放在便签纸上也不要放在桌面文本文件里如果你管理的机器不止一台把所有机器的用户名、密码策略、加密方式整理成一个只有自己能访问的清单如果这台机器以后要和别人共用换密码要提前告知别当了那个“默默改密码还谁都不说”的人。另外Ubuntu 系统里可以养成一个习惯修改任何密码、新增任何用户时把命令执行记录到 shell 历史里自己留存一份。别的不说至少下次有人问你“上次是不是改过 root 密码”时你还能查得到记录不至于一脸疑惑。5.3 物理机上的安全提醒这次教程也暴露了一个事实只要有人能物理接触你的机器并且磁盘没有全盘加密那么“登录密码”可以在一分钟内被重置掉。不要觉得“我设了复杂密码就安全了”密码防的是远程登录和普通用户防不住一个插着 U 盘、点几下键盘的人。所以我个人对重要机器的建议始终是要么开启 LUKS 全盘加密要么至少不要让别人轻易接触到机箱和电源键。如果你在办公环境或者实验室机器所在位置也要留意U 盘引导这个入口不能随便开着。这里再顺带说一句如果你确实开了全盘加密那个 LUKS 密码和用户密码通常是两码事。你按照本教程重置用户密码后开机时的磁盘解密密码还是原来的那个不用改也改不了因为 LUKS 密钥管理的工具是cryptsetup跟passwd一点关系都没有。想改 LUKS 密码得在启动前用它自己的工具操作这又是另外一个话题了。我自己这几年处理“Ubuntu 密码忘记”的经历最后总结下来就是两句话先判断加密再选路线有物理权限就没大问题怕的是自己连加密密码都忘了。如果你看完这篇还有其他被卡住的地方可以先按上面的排查思路把报错信息盯清楚再决定要不要换一条路——大多数失败都不是密码改不了而是绕了远路。希望这篇能帮你少走点弯路顺利把系统拿回来。
阅读完成 · 觉得有帮助?
咨询建站