前言
忘记 Linux root 密码是运维中常见的紧急场景 —— 如果没有密码,将无法登录系统进行任何操作。本文以 CentOS7 为例,详细讲解通过「紧急模式(Emergency Mode)」重置 root 密码的完整流程,包括步骤拆解、命令解释和关键避坑点,新手也能一步到位操作成功。
一、原理说明
紧急模式是 Linux 的救援模式之一,通过打断系统正常启动流程,进入一个最小化的 bash 环境(此时系统未完全加载,root 文件系统为只读模式)。我们需要通过挂载读写权限、切换根目录,来修改/etc/shadow文件中的 root 密码(Linux 密码存储在该文件中,加密保存)。
二、操作步骤(全程图文级详解)
步骤 1:重启系统,进入 GRUB 编辑界面
- 重启 CentOS7 系统,开机时快速按下键盘「↑↓」键,阻止系统自动启动(否则会跳过 GRUB 界面);
- 此时会出现 GRUB 菜单,选择第一项「CentOS Linux (3.10.0-xxx.el7.x86_64) 7 (Core)」,按下「e」键进入编辑模式。
步骤 2:修改启动参数,添加 rd.break
在编辑界面中,找到以「Linux16」开头的行(该行是系统内核启动参数),在行尾空格后添加 rd.break,如下所示:
plaintext
# 原行(示例):
linux16 /vmlinuz-3.10.0-693.el7.x86_64 root=UUID=xxx ro rhgb quiet LANG=zh_CN.UTF-8
# 修改后:
linux16 /vmlinuz-3.10.0-693.el7.x86_64 root=UUID=xxx ro rhgb quiet LANG=zh_CN.UTF-8 rd.break
- 作用:
rd.break表示「打断启动流程,进入紧急模式」。
添加完成后,按下「Ctrl+X」启动系统,进入紧急模式。
步骤 3:重新挂载根文件系统(读写权限)
进入紧急模式后,命令行提示符为 switch_root:/#,此时根文件系统(/sysroot)默认是「只读(ro)」模式,无法修改密码,需重新挂载为「读写(rw)」模式:
bash
运行
# 重新挂载/sysroot,添加rw权限
mount -o remount,rw /sysroot
# 验证挂载状态(查看是否包含rw)
mount | grep /sysroot
- 输出示例:
/dev/sda3 on /sysroot type xfs (rw,relatime,...)表示挂载成功。
步骤 4:切换根目录,修改 root 密码
-
使用
chroot命令切换根目录到/sysroot(此时系统会将/sysroot视为真正的根目录/,才能访问到/etc/shadow文件):bash
运行
chroot /sysroot切换后提示符变为
sh-4.4#。 -
(可选)修改语言环境(避免中文乱码):
bash
运行
LANG=en_US.UTF-8 # 或简写 LANG=en -
重置 root 密码:
bash
运行
passwd按提示输入新密码(如
xuegod),注意:输入密码时不会显示明文,输入完成后按回车即可,需重复输入确认。- 若密码长度小于 8 位,系统会提示「BAD PASSWORD」,忽略即可,输入
yes或直接回车确认。
- 若密码长度小于 8 位,系统会提示「BAD PASSWORD」,忽略即可,输入
步骤 5:处理 SELinux(关键避坑点)
如果你的 CentOS7 开启了 SELinux(默认开启),直接重启后密码修改会失效!因为 SELinux 会校验文件安全上下文,修改密码后 /etc/shadow 的上下文会被破坏,需执行以下命令修复:
bash
运行
# 在chroot环境下,创建.autorelabel文件(系统重启时会自动恢复SELinux上下文)
touch /.autorelabel
- 若已手动关闭 SELinux(
/etc/selinux/config中SELINUX=disabled),可跳过此步骤。
步骤 6:退出并重启系统
- 退出 chroot 环境:
bash
运行
exit - 再次退出紧急模式 shell:
bash
运行
exit - 系统会自动重启,重启后即可使用新密码登录 root 用户。
三、常见问题排查
-
添加 rd.break 后启动失败:
- 检查「Linux16」行的参数是否添加正确,确保
rd.break前有空格; - 若 GRUB 编辑界面找不到「Linux16」行,可能是系统使用 UEFI 启动,找到类似「linuxefi」开头的行,同样在末尾添加
rd.break。
- 检查「Linux16」行的参数是否添加正确,确保
-
修改密码后仍无法登录:
- 忘记执行
touch /.autorelabel(SELinux 开启时必须执行); - 重新进入紧急模式,执行
touch /.autorelabel后重启。
- 忘记执行
-
mount: /sysroot: can't find in /etc/fstab:
- 挂载命令输错,正确命令是
mount -o remount,rw /sysroot(注意是/sysroot而非/)。
- 挂载命令输错,正确命令是
总结
紧急模式恢复 root 密码的核心流程:「打断启动→挂载读写→切换根目录→修改密码→修复 SELinux」。关键在于记住 rd.break 参数和 touch /.autorelabel 步骤,避免因 SELinux 导致密码修改失效。该方法适用于 CentOS7/8,其他 RHEL 系系统也可参考。
&spm=1001.2101.3001.5002&articleId=156186580&d=1&t=3&u=017e8210b287453093910664abcdfa54)
9233

被折叠的 条评论
为什么被折叠?



