可通过GRUB干预、rd.break、单用户模式、安装介质救援或编辑/etc/shadow五种方法重置Linux root密码,均需在启动阶段获取root shell并修改密码或清空shadow字段。

如果您已登录Linux系统但忘记了root密码,无法执行需要管理员权限的操作,则必须通过系统启动阶段干预来重置密码。以下是多种可行的重置方法:
一、使用GRUB编辑启动参数进入bash shell(通用方法)
该方法适用于大多数现代Linux发行版(如Ubuntu 20.04+、CentOS 7+、Debian 11+),通过修改内核启动参数,跳过正常初始化流程,直接获得可读写根文件系统的root shell环境。
1、重启系统,在GRUB启动菜单出现时,按住Shift键(BIOS模式)或Esc键(UEFI模式)调出菜单。
2、使用方向键选中要启动的内核条目,按e键进入编辑模式。
3、在编辑界面中,找到以linux或linuxefi开头的行,将光标移至行尾。
4、删除原有结尾参数(如ro quiet splash $vt_handoff),替换为rw init=/bin/bash。
5、按Ctrl + X或F10启动修改后的配置,系统将直接进入/bin/bash命令行。
6、执行mount -o remount,rw /,确保根分区以读写方式挂载。
7、运行passwd root,根据提示输入并确认新密码(输入过程不显示字符)。
8、执行exec /sbin/init或reboot -f强制重启系统。
二、使用rd.break中断启动流程(RHEL/CentOS/Fedora专用)
此方法在内核初始化早期挂载真实根文件系统前中断,进入临时救援Shell,能安全处理SELinux标签,适用于启用SELinux的系统。
1、重启系统,在GRUB菜单中选中目标内核,按e键编辑。
2、找到以linux16或linux开头的行,在行尾添加空格后追加rd.break。
3、按Ctrl + X启动,系统将停在switch_root:/#提示符下。
4、执行mount -o remount,rw /sysroot,使真实根分区可写。
5、执行chroot /sysroot,切换到原始系统根环境。
6、运行passwd,按提示两次输入新root密码。
7、若系统启用SELinux,执行touch /.autorelabel以触发安全上下文重标记。
8、依次执行exit退出chroot,再执行exit重启系统。
三、进入单用户模式(runlevel 1)重置密码
该方法引导系统进入最小化维护环境,自动获得root权限且无需验证,兼容性广,尤其适合Ubuntu/Debian系。
1、重启系统,在GRUB菜单中选择Advanced options for Ubuntu(或其他对应高级选项)。
2、在子菜单中选择带recovery mode字样的内核版本。
3、等待恢复菜单加载完毕,用方向键选中Drop to root shell prompt并回车。
4、系统进入root shell后,立即执行mount -o remount,rw /,确保/挂载为读写状态。
5、运行passwd root,设置新密码。
6、完成密码修改后,输入reboot -f强制重启。
四、使用安装介质启动救援模式
当GRUB损坏或无法调出菜单时,可借助原系统同版本ISO镜像,以chroot方式挂载原系统并重置密码,完全脱离原引导环境。
1、将Linux安装镜像(如CentOS 7 DVD、Ubuntu 22.04 Live ISO)挂载为启动设备。
2、从镜像启动,进入安装界面后,按下Tab键(部分镜像需先按Shift),在启动命令末尾添加inst.ks=ignore rd.live.check,或直接选择Rescue a CentOS system等救援选项。
3、按提示选择语言、键盘、网络(可选),在挂载提示处选择Continue。
4、系统将自动把原根分区挂载至/mnt/sysimage;若未自动挂载,手动执行lsblk识别磁盘,再运行mount /dev/mapper/vg-lv_root /mnt/sysimage(路径依实际LVM或分区结构调整)。
5、执行chroot /mnt/sysimage,进入原系统环境。
6、运行passwd root,设置新密码。
7、退出chroot环境(exit),卸载分区(umount /mnt/sysimage),重启系统并拔出镜像。
五、通过编辑/etc/shadow清空密码字段(免交互方式)
当无法执行passwd命令(如命令损坏、PAM异常)时,可直接清空shadow文件中root用户的密码哈希字段,实现空密码登录,后续再设强密码。
1、使用方法一或二进入可读写root shell(如init=/bin/bash或rd.break)。
2、确认根分区已挂载为读写:执行mount | grep " / ",输出中应含rw标识。
3、运行vi /etc/shadow(或nano /etc/shadow),定位root行(形如root:$6$xxx:...)。
4、将root行第二个字段(即冒号之间的密码哈希部分)**完全删除**,仅保留两个连续冒号:root::18923:0:99999:7:::。
5、保存退出编辑器。
6、执行exec /sbin/init重启,重启后可直接以空密码登录root账户。









