CentOS 7 忘记 root 密码重置方法

内容分享22小时前发布
0 1 0

在日常运维中,难免会遇到这种情况:
服务器是自己的,机房/控制台也能进,但就是 root 密码忘了。
在 CentOS 7 中,可以通过修改 Grub 启动参数、进入特殊模式来重置 root 密码,而不是重装系统。

注意:

该方法适用于 物理机KVM/VMware 等虚拟机,前提是你有控制台(VNC/虚机控制台/IDRAC/iLO 等)权限。对于云服务器(如阿里云、腾讯云、AWS 等),一般有各自的控制台重置密码/救援模式,不必定完全一样。

下面以 CentOS 7.x 为例,完整演示忘记 root 密码后的重置步骤。


一、重启服务器,进入 Grub 引导菜单

  1. 重启服务器:
  2. <BASH>
  3. reboot
  4. 或在控制台上直接点击重启(如果完全登不进去,就只能通过云控制台或远控面板强制重启)。
  5. 在系统开机引导时,当出现 Grub 菜单界面(一般会显示 CentOS Linux 的启动选项)时,
    用键盘选中默认启动项(一般已经高亮),按下键盘上的:
    e 键(edit,编辑启动参数)
  6. 如果系统直接“闪过”进入启动界面,看不到菜单:
  7. 可以在启动初期按 Esc 或 Shift,让 Grub 菜单显示出来。
  8. 或在虚拟机设置里开启显示引导菜单。

二、在 Grub 中修改启动参数

进入编辑界面后:

  1. 找到一行以 linux16 开头的内容,类似:
  2. <TEXT>
  3. linux16 /vmlinuz-3.10.0-957.el7.x86_64 root=/dev/mapper/centos-root ro crashkernel=auto rhgb quiet LANG=en_US.UTF-8
  4. 在这一行里做两个关键修改:
  5. 把里面的 ro(只读)改为 rw(读写)。
  6. 在这一行的末尾添加:
  7. <TEXT>
  8. init=/sysroot/bin/sh
  9. 常见写法示例(只要参数顺序大致正常即可):
  10. <TEXT>
  11. linux16 /vmlinuz-3.10.0-957.el7.x86_64 root=/dev/mapper/centos-root rw init=/sysroot/bin/sh
  12. 说明:
  13. rw:允许根文件系统读写,这样才能修改密码文件。
  14. init=/sysroot/bin/sh:使用 /sysroot/bin/sh 作为 init 程序,系统会直接进入一个 shell,而不是正常启动。
  15. 修改完成后,不要按 Enter,而是按:
    Ctrl + X
    让系统按当前修改后的参数启动。

三、进入救援 shell 环境并切 root 环境

如果操作正确,系统不会正常启动,而是进入一个简易的命令行界面,类似:

<TEXT>
sh-4.2#

此时的根目录实际上挂载在 /sysroot 下,我们需要 chroot 进去:

  1. 切换到真实系统根目录环境:
  2. <BASH>
  3. chroot /sysroot
  4. 确认根目录是读写挂载(一般上一步 rw 已经生效,可以再执行一遍):
  5. <BASH>
  6. mount -o remount,rw /

此时你已经等同于进入了原系统的 root 环境。


四、执行 root 密码重置

在 chroot 环境中,直接使用 passwd 命令修改 root 密码:

<BASH>
passwd root

按提示输入两次新密码,例如:

<TEXT>
Changing password for user root.
New password:
Retype new password:
passwd: all authentication tokens updated successfully.

看到 updated successfully 即说明密码重置成功。


五、处理 SELinux(超级关键,别跳过)

CentOS 7 默认 SELinux 多数为 enforcing,我们刚才是以特殊方式启动系统并修改了 shadow 等文件,如果 不处理 SELinux 标签,很容易出现:

  • 重启后 root 无法登录
  • /bin/bash 或其它关键文件提示权限错误

为避免这类情况,强烈提议多做一步:让系统重启后自动重新打 SELinux 标签:

<BASH>
touch /.autorelabel

这个文件的作用是:系统下次正常启动时,自动对整个系统文件做一次 SELinux relabel(视磁盘大小,时间可能比较久)。


六、退出 chroot 并重启系统

  1. 退出 chroot 环境:
  2. <BASH>
  3. exit
  4. 再退出一次救援 shell(如果还在),或直接重启:
  5. <BASH>
  6. reboot -f
  7. -f 表明强制重启,不走正常关机流程。

七、首次启动的 SELinux relabel 过程(可能会比较慢)

如果你刚才做了 touch /.autorelabel,在系统正常启动时,可能会看到类似:

<TEXT>
*** Warning -- SELinux relabel is required. ***

这是正常现象,说明系统正在重新打标签:

  • 期间磁盘会有大量 IO,耗时视磁盘大小与文件数量而定,少则几分钟,多则几十分钟。
  • 不要以为系统卡死了就强制重启,耐心等待完成。

完成后系统会自动重启一次,然后就可以用新的 root 密码正常登录了。


八、登录验证

系统恢复正常启动后:

  • 在控制台/SSH 中使用新密码登录:
  • <TEXT>
  • Username: root Password: <你刚才设置的新密码>
  • 成功登录后提议立刻做几件事:确认系统时间、服务是否正常:
  • <BASH>
  • date systemctl status sshd
  • 如果是生产环境,提议检查下关键业务服务状态。
  • 提议配置 SSH 公钥登录,减少对密码的依赖。

九、常见问题与排查

1. Grub 编辑后启动还是正常进入系统,没有进入 shell?

可能问题:

  • 没有正确按 Ctrl + X,而是用的其他键。
  • 启动项不是当前使用的那一项。
  • 修改的不是 linux16 那一行。

提议重启再来一次,注意检查:

  • 是否的确 把 ro 改成了 rw;
  • 是否完整写了:init=/sysroot/bin/sh。

2. 忘记执行touch /.autorelabel,重启后 root 无法登录?

表现为:

  • 密码输入正确,但登录失败;
  • 或某些命令提示权限问题。
    再按照本文流程重新进一次救援模式, chroot /sysroot 后补上:
<BASH>
touch /.autorelabel
exit
reboot -f

等待 SELinux relabel 完成。


3. 云服务器(阿里云、腾讯云、AWS)无法通过 Grub 重置 root 密码?

许多云厂商会对 Grub 做额外保护,或者通过快照/系统盘挂载到其他实例来修改密码。
这时提议:

  • 查阅对应云厂商的官方文档,搜索“重置实例密码”或“系统盘挂载恢复”;
  • 或用“救援模式”(Rescue Mode),把系统盘挂载到救援系统中修改 /etc/shadow。
© 版权声明

相关文章

1 条评论

  • 头像
    可可__黎深0905生日快乐 读者

    收藏了,感谢分享

    无记录
    回复