Linux服务器登录密码遗忘时,无需重装系统,通过重启进入GRUB引导菜单并追加rd.break参数,即可在紧急模式下重置root密码。
忘记root密码的常见场景
服务器密码遗忘通常发生在交接不完整、长期未登录或代运维期满后,多数企业运维人员第一次遇到这个问题时,第一反应是重装系统,实际上完全没必要,行业内处理此类问题的主流思路是:通过修改内核启动参数,跳过密码验证进入救援环境。
不同发行版的处理方式略有区别,但底层原理一致利用initramfs在挂载根文件系统前的空隙,获得一个临时root shell。
常见场景包括:
- 自己服务器的root密码忘记,但手里有物理机或KVM控制权限
- 云服务器密码忘记,可以在控制台重置,但部分老机器不支持
- 服务器托管在机房,需要远程让机房值班人员协助操作
- 配置文件修改错误,导致认证模块损坏,需要进入单用户模式修复

单用户模式重置密码
这是最便捷、使用频率最高的一种方式,适用于CentOS 7/8、Ubuntu 16.04及以上版本、Debian 8及以上,整个过程大约需要5分钟,不需要任何外部介质。
进入GRUB引导菜单
重启服务器,在开机自检阶段连续按方向键或Esc键,中断GRUB的自动倒计时,部分品牌机(如Dell、HPE)可能需要先进入BIOS才能看到GRUB界面,但只要有服务器管理权限,这一步不会太困难。

编辑内核启动参数
在GRUB菜单中,选中默认的内核版本,按下e键进入编辑模式,注意不是按回车启动,是编辑。
找到以linux开头的那一行,行尾追加空格加rd.break参数。
linux /vmlinuz-xxx root=/dev/mapper/xxx ro ... rd.break
追加完成后按Ctrl+X或F10启动,系统会进入一个带switch_root:/#提示符的紧急模式,这个模式下根文件系统尚未完全挂载,是以只读方式挂载在/sysroot目录下。
重新挂载根文件系统
mount -o remount,rw /sysroot chroot /sysroot

进入块root shell后,就可以直接修改密码了,如果系统启用了SELinux,还需要执行一条命令:
touch /.autorelabel
这条命令的作用是让系统在下次启动时重新标记SELinux上下文,否则重置后的密码可能无法登录,如果服务器是默认安装的CentOS,通常都开启了SELinux,建议执行。
重置密码并重启
passwd root exit exit
exit需要执行两次,第一次退出chroot环境,第二次退出紧急模式,系统会自动继续启动,整个过程无需额外确认。
救援模式重置密码
部分发行版不支持
首发原创文章,作者:王坚,如若转载,请注明出处:https://test.idctop.com/article/596872.html

