Linux服务器忘记root密码时,最直接的破解方案是通过GRUB引导菜单进入单用户模式执行passwd命令重置,若系统使用systemd管理则通过rd.break参数中断启动流程。 这两种方法在大多数主流发行版上都能生效,且不需要重装系统,以下按操作路径、适用场景、风险提示三个维度拆解完整流程,同时补充云服务器场景下的替代方案和重置后的安全加固建议。
核心操作前必须知道的预备事实
在动手之前需要明确几个前提条件,这直接决定了你选择哪条重置路径。
- 物理接触或远程控制台权限是必要前提,无论是GRUB编辑还是systemd中断,都需要在服务器开机阶段操作,通过SSH远程连接无法实现。
- 云服务器用户建议优先使用云控制台提供的“重置密码”功能,这是简米云、酷番云、华为云等厂商的标配能力,操作简单且安全,但需要注意,部分厂商的重置功能要求服务器处于“关机”状态,若实例因故障无法正常关机,仍需走救援模式。
- 数据安全风险在于重启过程可能触发磁盘检查(fsck),如果文件系统本身存在异常,强制重启有极小概率导致数据丢失,行业共识认为,在操作前对重要数据做快照或备份是最稳妥的准备动作。
CentOS/RHEL 7及以下版本:GRUB单用户模式重置密码
CentOS 6、7以及RHEL 6、7等使用SysVinit或早期systemd的发行版,通过修改GRUB启动参数进入单用户模式是最成熟的破解路径,此方法同样适用于Ubuntu 16.04及以下版本。
第一步:中断GRUB启动过程
服务器开机或重启后,在BIOS自检结束、GRUB菜单出现时,立即按下键盘的e键(编辑模式),这里有个细节:如果GRUB菜单停留时间过短,可以先按Esc键强制菜单停留在当前界面,再按e进入编辑。
第二步:修改内核启动参数
找到以linux16或linux开头的那一行,这通常是文件中的倒数第二行,使用方向键将光标移动到该行末尾,添加一个空格后输入:
single
部分系统(如RHEL 6)也可以输入数字1,效果等价,修改完成后,按Ctrl+x或b键引导系统进入单用户模式。
第三步:重新挂载根文件系统并重置密码
进入单用户模式后,系统会以只读方式挂载根分区,此时直接执行
passwd root大概率会报“只读文件系统”错误,所以需要先重新挂载:
mount -o remount,rw /
passwd root
passwd命令会提示输入两次新密码,注意输入过程中屏幕不会显示任何字符(包括星号),这是正常现象,设置完成后输入reboot -f强制重启,即可使用新密码登录。
CentOS/RHEL 8及以上版本:rd.break强制中断重置
从CentOS 8、RHEL 8开始,systemd接管了启动流程,传统single参数的兼容性变差,此时改用rd.break参数强制中断早期用户空间切换。
第一步:进入GRUB编辑界面
操作习惯与上一方案完全一致,开机按e进入编辑模式,差异在第二步出现。
第二步:修改内核行参数
同样找到linux开头的那一行,在其末尾追加:
rd.break
此时按Ctrl+x启动,系统会在initramfs阶段停下来,进入一个带有switch_root:/#提示符的紧急Shell。
第三步:以可写方式挂载sysroot并chroot
紧急Shell环境下,真正的根文件系统挂载在/sysroot目录,且默认是只读状态,按照顺序执行以下命令:
mount -o remount,rw /sysroot
chroot /sysroot
passwd root
touch /.autorelabel
exit
reboot
最后那条touch /.autorelabel命令是SELinux场景下的必选项,如果系统启用了SELinux(CentOS/RHEL默认开启),不执行这一步会导致重启后无法登录,因为安全上下文没有重新标记,执行后系统会在下次启动时自动修复文件标签,耗时1到5分钟不等,属正常等待。
数据对比参考
| 对比维度 | 单用户模式 | rd.break |
|---|---|---|
| 适用版本 | CentOS 7及更早 | CentOS 8/9、RHEL 8/9 |
| 操作复杂度 | 较低 | 中等 |
| SELinux兼容性 | 需手动检查 | 需touch autorelabel |
| 适用场景 | 系统未完全崩溃 | systemd新版默认 |
Ubuntu Server系列:恢复模式与init=/bin/bash
Ubuntu Server 18.04及以上版本的操作路径略有差异,核心逻辑是替换init进程直接进入Shell。
基于GRUB的init替换法
编辑GRUB时,在linux开头行末尾追加:
init=/bin/bash
启动后会直接进入bash Shell,但根分区同样是只读状态,依次执行:
mount -o remount,rw /
passwd root
exec /sbin/init
这里不推荐使用reboot,因为init进程尚未正常初始化,直接重启可能导致systemd状态异常,用exec /sbin/init可以平滑过渡到正常启动流程。
基于Ubuntu高级选项的恢复模式
如果不想手动编辑GRUB参数,可以在GRUB菜单中选择“Advanced options for Ubuntu”,进入带有(recovery mode)字样的内核选项,在恢复菜单里选择“root – Drop to root shell prompt”,这种方式的好处是系统会自动挂载文件系统为读写状态,免去了手动mount的步骤。
云服务器场景的特殊处理方案
云服务器和物理机在密码重置上有本质差异,核心在于云厂商提供了底层管理通道。
控制台重置密码
简米云、酷番云、华为云的控制台都有“重置实例密码”入口,操作路径通常是:实例列表 → 选择目标实例 → 更多/操作 → 密码/密钥 → 重置密码,需注意以下几点:
- 部分云厂商要求实例处于已停止状态才能执行重置,运行中实例需要先关机。
- 重置命令会在下次启动时生效,无需进入系统内部操作。
- 如果实例启用了密钥登录,重置密码不会自动关闭密钥验证,需手动登录后调整SSH配置。
通过救援模式或VNC登录
当控制台重置失败或服务器无法正常启动时(如磁盘损坏导致卡在emergency mode),可使用云厂商的救援模式(Rescue Mode),该模式会从独立的内核启动系统,将原系统盘挂载为辅助磁盘,此时可在救援Shell中直接修改/etc/shadow文件或执行chroot后重置密码。
重置密码后的系统安全加固
密码重置完成不代表工作结束,后续的安全配置如果不做,可能很快陷入“忘记密码→重置”的死循环,甚至引入安全漏洞。
强制修改密码策略
通过chage命令可以设置密码有效期,避免密码长期不变带来的隐患,常用命令如下:
chage -M 90 -m 7 -W 14 root
该命令的含义是:密码最长使用90天,最短使用7天,过期前14天提醒。
对于root账户,建议不要设置自动过期,否则可能因忘记更新而锁定自己,业务账户则按等保要求设置为90天或180天。
配置SSH密钥登录
密钥登录是对抗密码遗忘问题最彻底的方案,在本地生成密钥对后,将公钥追加到服务器的~/.ssh/authorized_keys文件中,同时修改/etc/ssh/sshd_config配置文件,将PasswordAuthentication改为no,这样即使忘记密码,只要私钥在手就能畅通无阻,行业专家指出,高强度密码复杂度加上随机生成的2048位RSA密钥,从目前算力来看破解难度极高。
设置免密sudo的精细权限
为日常管理账号分配sudo权限时,尽量使用visudo命令编辑配置文件,而不是直接修改/etc/sudoers。
visudo -f /etc/sudoers.d/admin
按用户需求分配NOPASSWD参数时需谨慎,建议仅对明确需要的命令启用免密,避免所有sudo操作都不输密码,管控逻辑带来的安全性提升远大于偶尔输入密码的时间成本。
Linux服务器改密码忘记了的实操问答
重置密码时提示“Authentication token manipulation error”怎么办?
该错误说明passwd命令无法正常写入shadow文件,大多数情况下是因为根文件系统仍处于只读状态,重新执行mount -o remount,rw /即可,若问题依旧,则需检查/etc/shadow文件的属性是否有不可修改标志(lsattr /etc/shadow查看,若输出含i属性则用chattr -i /etc/shadow解除)。
修改密码后可以不用重启就直接登录吗?
可以,若当前在单用户模式的Shell中,执行exec /sbin/init或systemctl default可让系统完成剩余启动流程,切换到多用户模式,之后在其他终端使用新密码即可正常登录,但若是在紧急Shell下修改的密码,务必先处理SELinux标签,否则重启后会卡在登录界面。
如何在不重启的情况下确认密码是否修改成功?
在Shell中执行awk -F: '/^root/{print $2}' /etc/shadow,如果输出内容不是空的(通常是$6$开头的字符串,代表SHA-512哈希),说明密码字段已更新,接着可以试用su - root切换到root账户,但此命令在救援模式下可能因缺少PAM配置而报错,此时不要慌张,重启后验证即可。
首发原创文章,作者:王坚,如若转载,请注明出处:https://idctop.com/article/585819.html




