CentOS 7丢失或忘记root密码的恢复流程
适用场景
- CentOS 7/RHEL 7
- 拥有系统控制台/虚拟化平台的访问权限
- 能自行进入GRUB
- root密码丢失或被锁定
故障现象
- 无法使用已知密码登录root
- 单用户模式下修改密码后重启,仍提示:
- Login incorrect
- 输入用户名后不显示password,而是直接返回login:
恢复流程
进入GRUB编辑模式
- 重启系统
- 在GRUB菜单界面跳到第一行按e,编辑GRUB的启动参数(这个界面默认只停留五秒,手速得快)
修改内核启动参数
将以linux16开头的行中的“ro”改为“rw”,然后在行末空一格加上init=/bin/bash selinux=0
(修改完后按 Ctrl+x 启动)
说明
- rw:以读写模式挂载根文件系统
- init=/bin/bash:直接进入Bash,绕过正常初始化
- selinux=0:本次启动禁用SElinux,避免安全上下文校验
- 若当前行位置不够,可选择删除行内的“rhgb quiet”显示完整启动日志
单用户模式下的操作
等待系统启动,出现 # 提示符后可依次输入执行以下命令:
mount-oremount,rw /# 确保根文件系统为可写sed-i's|^root:[^:]*:|root::|'/etc/shadow# 清空root密码字段passwd-ufroot# 强制解锁root账户synf# 同步数据到磁盘exec/sbin/init# 启动系统初始化进程登陆与重置密码
- 系统重启后,用户名输入root,直接按回车即可登入root账户
- 登陆成功后立即输入 passwd 命令设置新的密码
技术背景
/bin/bash 与 /bin/sh
- init=/bin/sh 会进入POSIX兼容模式,在此模式下 passwd 可能因交互限制导致写入失败
- 建议使用 init=/bin/bash
SELinux约束
- CentOS 7默认启用SELinux
- 若 /etc/shadow 的安全上下文不正确,PAM会拒绝认证
- 单用户修复时需显式处理SELinux
root账户锁定
- /etc/shadow 中root字段以 ! 或 * 开头表示锁定
- 锁定状态下,系统不会提示输入密码
问题排查
| 现象 | 原因 | 解决 |
|---|---|---|
| 不提示 Passwd | root被锁定 | passwd -uf root |
| 密码正确但登录失败 | SELinux拦截 | selinux=0 或 touch / .autorelable(在单用户模式下输入) |
| 修改后无效 | 根分区只读 | mount -o remount,rw / |
| 新密码写入失败 | 使用了sh | 改用init=/bin/bash |
总结一下
在CentOS 7环境中,root密码丢失恢复完成后,需满足以下三个条件:
1. 根文件系统以读写方式挂载
2. root账户最终处于未被锁定状态
3. SELinux约束被妥善处理
通过 rw 、init=/bin/bash 、 selinux=0 启动参数可稳定进入单用户环境进行修复。该方法适用于物理机、虚拟机、及主流云平台示例