CentOS7 紧急模式恢复 root 密码:超详细步骤(含避坑指南)

前言

忘记 Linux root 密码是运维中常见的紧急场景 —— 如果没有密码,将无法登录系统进行任何操作。本文以 CentOS7 为例,详细讲解通过「紧急模式(Emergency Mode)」重置 root 密码的完整流程,包括步骤拆解、命令解释和关键避坑点,新手也能一步到位操作成功。

一、原理说明

紧急模式是 Linux 的救援模式之一,通过打断系统正常启动流程,进入一个最小化的 bash 环境(此时系统未完全加载,root 文件系统为只读模式)。我们需要通过挂载读写权限、切换根目录,来修改/etc/shadow文件中的 root 密码(Linux 密码存储在该文件中,加密保存)。

二、操作步骤(全程图文级详解)

步骤 1:重启系统,进入 GRUB 编辑界面

  1. 重启 CentOS7 系统,开机时快速按下键盘「↑↓」键,阻止系统自动启动(否则会跳过 GRUB 界面);
  2. 此时会出现 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 密码

  1. 使用 chroot 命令切换根目录到 /sysroot(此时系统会将 /sysroot 视为真正的根目录 /,才能访问到 /etc/shadow 文件):

    bash

    运行

    chroot /sysroot
    

    切换后提示符变为 sh-4.4#

  2. (可选)修改语言环境(避免中文乱码):

    bash

    运行

    LANG=en_US.UTF-8  # 或简写 LANG=en
    
  3. 重置 root 密码:

    bash

    运行

    passwd
    

    按提示输入新密码(如 xuegod),注意:输入密码时不会显示明文,输入完成后按回车即可,需重复输入确认。

    • 若密码长度小于 8 位,系统会提示「BAD PASSWORD」,忽略即可,输入 yes 或直接回车确认。

步骤 5:处理 SELinux(关键避坑点)

如果你的 CentOS7 开启了 SELinux(默认开启),直接重启后密码修改会失效!因为 SELinux 会校验文件安全上下文,修改密码后 /etc/shadow 的上下文会被破坏,需执行以下命令修复:

bash

运行

# 在chroot环境下,创建.autorelabel文件(系统重启时会自动恢复SELinux上下文)
touch /.autorelabel
  • 若已手动关闭 SELinux(/etc/selinux/config 中 SELINUX=disabled),可跳过此步骤。

步骤 6:退出并重启系统

  1. 退出 chroot 环境:

    bash

    运行

    exit
    
  2. 再次退出紧急模式 shell:

    bash

    运行

    exit
    
  3. 系统会自动重启,重启后即可使用新密码登录 root 用户。

三、常见问题排查

  1. 添加 rd.break 后启动失败

    • 检查「Linux16」行的参数是否添加正确,确保 rd.break 前有空格;
    • 若 GRUB 编辑界面找不到「Linux16」行,可能是系统使用 UEFI 启动,找到类似「linuxefi」开头的行,同样在末尾添加 rd.break
  2. 修改密码后仍无法登录

    • 忘记执行 touch /.autorelabel(SELinux 开启时必须执行);
    • 重新进入紧急模式,执行 touch /.autorelabel 后重启。
  3. mount: /sysroot: can't find in /etc/fstab

    • 挂载命令输错,正确命令是 mount -o remount,rw /sysroot(注意是 /sysroot 而非 /)。

总结

紧急模式恢复 root 密码的核心流程:「打断启动→挂载读写→切换根目录→修改密码→修复 SELinux」。关键在于记住 rd.break 参数和 touch /.autorelabel 步骤,避免因 SELinux 导致密码修改失效。该方法适用于 CentOS7/8,其他 RHEL 系系统也可参考。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值