资讯动态

Linux忘记root密码怎么办?GRUB单用户模式与Live介质chroot重置全攻略

发布时间:2026/10/13 12:06:36 来源:尧图企业网站定制
开机画面停在登录框root 密码怎么都想不起来输错三次之后整个人都清醒了。这个场景我估计不少运维都遇到过小到一台吃灰的虚拟机大到刚接手的业务服务器总有一个瞬间你需要面对重置root密码这件事。我第一次遇到是在接手一台旧机器的时候交接文档里只写了业务账号root 密码跟着上一位同事的记忆一起消失了当时没有 Live 介质没有带外管理权限硬是靠 GRUB 编辑参数把系统救回来的前前后后折腾了大半天。这篇文章就把我验证过的两条重置路径完整写出来一条是 GRUB 单用户模式一条是 Live 介质 chroot 方案顺带把实际踩过的坑都整理成问题清单。刚入行的同学可以直接照着步骤操作老手也可以看看有没有忽略的细节。另外提醒一句重置 root 密码属于标准系统恢复操作适用场景是忘记密码、交接不清、账号被策略锁死这些合法管理需求动手前务必确认你确实有这台设备的处置权限。1. 先想清楚再动手重置密码前的几个关键判断1.1 重置root密码到底解决什么问题很多人把重置 root 密码理解成绕过安全机制这个定位会误导你后续所有决策。它实际上解决的是管理员凭据丢失后的系统恢复问题本质上是拿回本属于自己的管理权限。常见触发场景有这么几类密码忘了。长时间不登录 root脑子里的印象和实际密码可能早就对不上号了。密码过期。某些环境配置了 /etc/shadow 里的密码时效策略root 密码超过有效期后直接无法登录控制台也会显示密码过期。交接不清。接手旧系统时前任没有留下可用的 root 凭据这种在二手服务器、离职移交场景里特别常见。策略误伤。比如 PAM 模块配置失误把 root 账号也锁死了系统本身没问题但登录被堵住。搞清楚了这一层你就不会再把重置和入侵混为一谈。重置的路径无非是通过物理控制台或虚拟化控制台在系统完成正常登录流程之前介入修改本地认证数据库也就是 /etc/shadow让 root 账号重新拥有合法密码。整个过程依赖的是你对这台设备的物理或虚拟化控制权而不是对系统漏洞的利用。1.2 动手前先确认的四件事盲目的后果就是白折腾。第一次做这种操作前建议花两分钟确认以下四个方面每一项都可能决定你用哪条方案。第一确认你有控制台级别的访问方式。SSH 是救不了你的root 密码都不在了SSH 登录根本没有入口。你需要的是物理键盘加显示器或者云平台/虚拟化平台的 VNC、IPMI、iLO 这类带外控制台。只要能看到机器开机自检画面和 GRUB 菜单后续操作才有戏。第二确认系统有没有启用全盘加密比如 LUKS。如果 /boot 单独分区、root 文件系统是加密的单用户模式改密码的路径会被加密层卡住。这种情况下你没有 LUKS 口令就进不了 root 文件系统更谈不上改密码。所以先回忆一下装系统时有没有设置过加密口令。第三确认 SELinux 的状态。多数时候改完密码直接重启就能进但如果系统是强制模式修改后的 /etc/shadow 文件上下文可能不对登录时会被策略拦下来。这个细节我在后面专门讲。第四想清楚是否需要恢复现场。如果是生产环境重置密码这种操作会触发系统重启你得评估业务影响窗口。如果只是普通测试机或者回收的机器那就随意多了。确认完这四点基本就能决定你走哪条路了。如果系统能正常引导到 GRUB优先用单用户模式如果连引导都进不去或者需要顺便修复系统其他问题那就准备 Live 介质走 chroot。2. 方案一GRUB 引导菜单切入单用户模式2.1 单用户模式的原理为什么它能在不知道密码时接管系统理解原理之前先看一个关键事实正常登录流程要经过 PAM 认证而单用户模式根本不走完整登录流程。GRUB 引导时可以通过附加内核参数改变系统的启动行为让内核在初始化完成后直接启动一个 root shell跳过密码验证。历史上这是init/bin/bash这类参数的功劳。老一点的 SysVinit 系统里单用户模式会直接 drop 到 root shell。到了 systemd 时代行为发生了一些变化systemd.unitrescue.target可以进入救援模式但在某些版本、某些发行版上救援模式未必会给你干净可用的 root 登录输入密码环节仍然可能卡住你。所以现在的通行做法是绕过 systemd 的完整初始化过程。RHEL/CentOS 系常用rd.break参数它会让 initramfs 在真正切换到 root 文件系统之前停下来给你一个临时的 shellUbuntu/Debian 系则常用single或直接init/bin/bash。这些参数的本质相同在认证逻辑介入之前接管系统后面的事就好办了。另外一个必须提前知识铺垫的点是启动进入单用户模式后root 文件系统通常是只读挂载的。这是因为跳过初始化流程后文件系统没有经过完整的读写挂载检查。所以下一步操作前先把它重新挂载为读写模式否则passwd会直接报Read-only file system错误。2.2 RHEL/CentOS 系操作rd.break 路径我在 CentOS 7/8 系列上实测多遍最稳的路径是 rd.breakStep 如下重启系统在 GRUB 菜单出现时按e进入编辑界面。如果 GRUB 菜单一闪而过可以反复按方向键或者 Esc 把它稳住。找到以linux16CentOS 7或linuxCentOS 8开头的那一行这一行就是内核引导参数行。把光标移到这一行末尾空格后追加参数rd.break按 Ctrlx 启动。系统会进入 initramfs 阶段的紧急 shell提示符通常是switch_root:/#或者类似形式。这时 root 文件系统已经挂载在/sysroot下但处于只读状态。执行mount -o remount,rw /sysroot切换进真正的文件系统chroot /sysroot此时已经在目标系统里了重置密码passwd root如果系统启用了 SELinux一定要执行这一条否则重启后可能出现上下文错误导致登录异常touch /.autorelabel连续执行两次exit退出 chroot 和 initramfs shell系统会自动继续启动流程。也可以直接reboot -f强制重启。整个过程看起来简单但有几个细节容易翻车。追加参数的位置如果写错了行比如加到了quiet那行等于什么都没做有些人图省事用rd.break加在linux16行末尾之外的地方系统可能直接忽略。另外chroot /sysroot之后改密码时不要手滑打错两次新密码这个环境里没有找回的余地。还有一个高效技巧如果你确认想同时改成已知密码可以用echo 新密码 | passwd --stdin root一条命令完成但要注意--stdin某些新版本提示不推荐使用实际功能还在脚本化用没问题交互式操作还是老老实实敲两次更能避免错误。2.3 Ubuntu/Debian 系操作recovery 或 single 路径Ubuntu/Debian 系因为 GRUB 菜单默认隐藏进入方式稍有不同。Ubuntu 18.04 之后的版本开机时长按 Shift 键BIOS 传统模式或 EscUEFI 模式可以强制显示 GRUB 菜单然后选 Advanced options for Ubuntu再选带有 (recovery mode) 的那个内核条目。进入 recovery 菜单后选择 root — Drop to root shell prompt。此时系统会挂载 root 文件系统为只读需要先重新挂载为读写mount -o remount,rw /然后直接passwd root如果 recovery 模式因为某些原因进不去也可以回到 GRUB 编辑模式选中正常内核条目按e编辑在linux引导参数行末尾追加single init/bin/bash按 Ctrlx 启动。启动后同样先执行mount -o remount,rw /再改密码。需要注意 Ubuntu 默认 root 账号没有密码平时都是用 sudo 管理所以重置完成后你得到的 root 密码后续登录方式要自己心里有数。有人改完密码之后还是习惯用 sudo 用户登录root 密码长期不用这个没问题但别把刚设置的手动清除了。2.4 版本差异提示systemd 时代的坑刚开始做这种事情的时候我在一台老系统上试过追加single参数结果 systemd 确实进入了救援目标但并没有给我想要的 root shell而是重新打印了一堆启动日志最后还是停在了登录提示符。后来才发现这是 systemd 版本行为差异导致的。具体来说systemd 的 rescue.target 在部分版本里会默认要求输入 root 密码它并不是绕过认证的万能法器。所以现在我的习惯是RHEL/CentOS 系列直接用rd.breakUbuntu/Debian 系列直接init/bin/bash。这两个参数都绕过了完整的 systemd 启动流程成功率高得多。还有一个容易忽略的点如果系统开启了 GRUB 密码保护编辑引导参数时会要求先输入 GRUB 用户名和口令你不知道就没有下一步。这种情况下单用户模式这条路就被堵死了只能找带外管理、重新安装底层虚拟化平台里的引导介质或者走 Live 介质方案。另外如果机器本身已经配置了 core dump 相关的内核参数或者特殊的 console 参数比如consolettyS0追加 rd.break 之后输出可能跑到串口去了。笔记本键盘上看着像没反应实际系统在等你操作。用物理控制台时留意一下有没有这种情况必要时在参数里显式补一个consoletty0。3. 方案二Live 介质启动 chroot 重置3.1 什么场景需要用到 Live 介质单用户模式虽然快但并不是万能。我总结下来遇到下面几类场景就该掏出 Live 介质了系统引导已经完全损坏GRUB 都进不去或者内核启动直接 panic。有 GRUB 密码保护无法编辑引导参数。系统文件系统有损坏启动经常失败需要先 fsck 再处理密码。不只是要改 root 密码还需要修改 /etc/passwd、/etc/sudoers、/etc/pam.d 下的策略文件单用户模式里修起来手忙脚乱。机器上有多套系统需要跨系统改密码。所谓 Live 介质就是拿一个包含完整操作系统的 U 盘或光盘启动不依赖目标硬盘里的系统。你可以用市面上的各种桌面 Linux 发行版制作启动盘也可以用服务器运维里常见的救援镜像。关键是启动后能访问目标硬盘上的文件系统然后通过 chroot 切换进去用目标系统自己的命令完成密码重置。3.2 完整操作流程与每一步的理由我拿最常用的 Live 启动流程为例拆解假设你的目标机器硬盘上是 Linux系统盘是 /dev/sdaroot 分区是 /dev/sda2实际请用 lsblk 确认。第一步插入 Live 介质开机选择从 U 盘或光盘启动。如果机器默认不识别进入 BIOS/UEFI 启动菜单通常是 F12 或 F2手动选择启动项。第二步进入 Live 桌面后打开终端先看磁盘分区结构lsblk fdisk -l /dev/sda这里要确认两件事哪个分区是 /boot哪个分区是 /root 根分区。如果机器用了 LVM显示会复杂一些会看到类似/dev/mapper/centos-root这样的设备路径同样能 mount。第三步挂载根分区到 /mntmount /dev/sda2 /mnt如果提示文件系统损坏先执行fsck -y /dev/sda2第四步这也是很多人容易忽略的把 /dev、/proc、/sys 这些虚拟文件系统 bind 到 /mnt 下。原因是 chroot 之后passwd命令运行起来可能依赖设备节点和内核接口少了这些目录会出现各种奇怪报错。我习惯一次性做完mount --bind /dev /mnt/dev mount --bind /proc /mnt/proc mount --bind /sys /mnt/sys第五步进入 chroot 环境chroot /mnt此时你的 shell 已经切到目标系统内部hostname 可能显示变成了目标系统的名字。执行passwd root按提示输入新密码两遍即可。如果你还需要顺便修别的比如改 /etc/sudoers、查看 /etc/passwd都在这个环境里操作方法跟平时一台正常运行的服务器一样。第六步退出并重启exit umount /mnt/dev /mnt/proc /mnt/sys umount /mnt reboot拔掉 Live 介质让系统从硬盘正常启动。这次启动后 root 密码就是你刚才设置的那个。这套流程里bind mount 那一步不是可选的。我第一次做时图省事直接 mount 根分区就 chroot结果跑passwd报了跟 PAM 库相关的一串错误折腾了半天把 /dev 挂进去之后问题立刻消失。3.3 SELinux 相关的收尾步骤如果目标系统启用了 SELinux 且处于 enforcing 模式用 Live 介质改完密码后重启前多半需要处理文件安全上下文。原理很简单你在 Live 环境里通过 chroot 修改了 /etc/shadow但 Live 环境可能没有完整应用目标系统的 SELinux 策略因此 /etc/shadow 的上下文标签可能没有被正确维持。处理方式最省心的是在 chroot 环境里执行touch /.autorelabel这会触发系统下次启动时对全部文件执行一次自动 relabel缺点是启动过程会多花几分钟但保证干净。如果机器配置比较严格也可以只对 shadow 文件恢复上下文restorecon -v /etc/shadow建议没有十足把握时直接选.autorelabel一次到位。另外如果改完密码后系统能正常登录但登录后 /var/log/messages 或 journal 里报一堆 AVC 拒绝记录大概率就是当时跳过了这一步补跑一次 relabel 即可。4. 常见问题与排错实录4.1 改完密码进不去优先排查这几处密码明明改成功了重启后却依然登不进去这种问题最让人崩溃。按照我的排查顺序先看这几处第一确认 /etc/shadow 里 root 条目的状态。终端执行passwd -S root输出里L表示锁定P表示正常密码NP表示无密码。如果显示锁定即使密码正确也会被拒绝。解除锁定passwd -u root第二查看 /etc/passwd 里 root 这行的登录 shell。如果 root 用户的 shell 被设置成/sbin/nologin或者/bin/false密码对也没用。改成正常 shellusermod -s /bin/bash root第三检查 PAM 模块是否有额外的锁定逻辑。有些系统配了 pam_faillock连续输错密码会把账号临时锁一段时间。查看 secure 日志里有没有 pam_faillock 相关记录必要时通过保留单用户模式登录进去执行faillock --user root --reset清掉锁定计数。第四确认密码策略有没有类似首次登录必须修改的强制项。虽然 root 一般不受这个限制但如果有人配了 chage 策略改完的新密码可能也要求立即更换。执行chage -l root查看状态。还有一个很容易忽视的点如果你通过 Live 介质改了密码但忘掉把 root 文件系统重新挂载为读写后的所有变更落盘就强制重启理论上改动可能存在丢失风险。标准流程里umount会触发同步但强制reboot -f之前最好先跑一遍sync。4.2 单用户模式起不来怎么判断单用户模式进不去时先分清是没进入还是进入了但没看到提示。如果启动后直接回到正常登录界面说明你的内核参数没生效。检查三件事参数是否加在了正确的那一行参数末尾有没有被换行截断GRUB 是否有密码保护导致修改被拒绝。这类问题用排除法很快能定位。如果系统看起来卡在黑屏或者日志输出停止但 CPU 还在跑很可能 shell 已经起来了只是你的终端没显示。这种情况在虚拟机控制台里尤其常见因为图形输出可能切换到了非当前终端。试试按 AltF2、AltF3 切换虚拟终端或者直接盲敲指令后回车观察效果。我之前遇到过控制台停留在 splash 画面实际上底层已经到 shell 了盲敲mount -o remount,rw /加passwd竟然成功了。还有一类情况是内核启动过程中根文件系统加载失败比如磁盘 UUID 对不上或者根分区丢失。这种就不是密码问题了需要进救援模式检查 fstab必要时用 Live 介质修。单用户模式本身起不来时我的建议是直接换方案别在 GRUB 编辑上死磕太久。Live 介质方案总有更高的成功率而且能顺便解决更多系统问题。4.3 这个操作的安全性提醒与加固建议讲完操作一定要讲安全。很多人理解不了既然随便一个人拿 U 盘启动就能改 root 密码那 Linux 的认证体系是不是形同虚设这个问题要拆开看。任何拥有物理控制权限的人理论上都可以重置本机 root 密码这是操作系统给管理员留的后门同时也是安全模型里默认接受的物理信任假设。但如果机器放在公共机房、可随意接触的环境里这个风险就是真实存在的。所以我在完成密码重置之后通常会顺手做三件事第一为 GRUB 设置密码。这样下次再有人想通过编辑引导参数进入单用户模式至少多一道阻碍。GRUB 密码主要防的就是物理接触者别让重置路径毫无门槛。第二评估 root 的远程登录策略。生产环境建议在 sshd_config 里设置PermitRootLogin no日常管理用普通用户配合 sudo。这样即使 root 密码泄露也没法通过 SSH 直接登录攻击面小很多。第三把密码放进团队凭据管理工具里别再用小本子和随手记。很多密码重置需求本质上就是凭据管理混乱造成的自己坑自己。如果你的环境里重置 root 密码成了高频操作大概率不是技术问题是运维流程问题。顺带提一下全盘加密对重置路径的影响。如果 /etc/shadow 所在的 root 分区是被 LUKS 加密的那么上述所有方案的前提都是你能解开加密层。物理接触者没有 LUKS 口令同样进不去文件系统。所以认真看待全盘加密它不仅防数据泄露也在一定程度上阻止了物理接触就能重置密码的路径。5. 实操体会与两个小技巧最后分享几条实际操作中的体会都是踩过坑换来的。第一条任何一次重置 root 密码操作完成之后我都会要求自己马上用新密码登录一遍用sudo -i或者直接登录 root 确认成功再去做别的事情。原因很简单你永远无法确定刚才的修改是百分之百生效的尤其是涉及 SELinux、PAM 策略的复杂环境。先验证再收工这是标准动作。第二条改密码时尽量用passwd而非手动编辑vi /etc/shadow。手动编辑容易破坏文件格式和权限位一个字符的差错就可能让所有账号失效。非必要不要手动写哈希。如果出于自动化需求必须无交互改密码也请优先使用chpasswd这类专用工具。写到最后我会强调一句重置 root 密码是一个操作简单但影响面非常大的动作动手前多做一次确认动完手多做一次验证远比事后补救舒服得多。把这套流程练熟了以后再遇到密码危机就不会慌。

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价 →
↑