必须将linux16行中的ro替换为rw init=/sysroot/bin/sh才能进入单用户模式,否则会卡住或内核崩溃;进入后需先mount -o remount,rw /sysroot再chroot /sysroot,最后执行touch /.autorelabel确保selinux重打标签。

GRUB 编辑时把 ro 改成 rw init=/sysroot/bin/sh 才能进单用户
直接按 e 进入 GRUB 编辑后,必须找到以 linux16 开头的行(CentOS 7 默认用 linux16,不是 linux),把其中的 ro 替换为 rw init=/sysroot/bin/sh。只改 ro → rw 不够,系统仍会卡在 init 阶段;漏掉 init=... 就进不了 shell。
常见错误现象:
- 按
Ctrl+X后黑屏或卡住不动 → 多半是没加init=...或写错路径(比如写成/bin/sh而不是/sysroot/bin/sh) - 提示
Kernel panic - not syncing: Attempted to kill init!→init=参数位置不对,或前面多加了空格/换行
chroot /sysroot 之前必须先挂载可写,否则 passwd 会报错
进入单用户后,根文件系统默认是只读挂载的。不执行 mount -o remount,rw /sysroot 就直接 chroot /sysroot,后续 passwd 会失败,提示类似 Authentication token manipulation error 或直接写入 /etc/shadow 失败。
实操要点:
- 先运行
mount | grep sysroot确认当前挂载状态(应显示ro) - 再执行
mount -o remount,rw /sysroot - 然后
chroot /sysroot,此时提示符变成sh-4.2#或类似 - 接着运行
passwd root,输入两次新密码
SELinux 开启时必须执行 touch /.autorelabel
如果系统启用 SELinux(默认开启),跳过这步会导致重启后卡在 boot 过程,或登录后很多服务起不来、SSH 拒绝连接、systemctl status 显示大量 context 错误。
CentOS Linux 7.9.2009是传统CentOS Linux 7的最后主要版本,也是很多企业历史服务器中仍可能遇到的系统版本。它以稳定、兼容RHEL 7生态、文档丰富和软件支持广泛著称,曾长期用于Web服务、数据库、虚拟化节点和企业内部业务系统。不过CentOS Linux 7已于2024年6月30日停止维护,现在继续使用会面临安全补丁缺失风险。该版本更适合旧业务迁移、历史环境恢复或离
原因:密码修改会改变 /etc/shadow 的安全上下文,SELinux 在下次启动时需要重新打标。不创建 /.autorelabel,系统不会自动 relabel。
注意点:
- 该命令必须在
chroot /sysroot环境内执行,路径是/.autorelabel(不是/sysroot/.autorelabel) - 执行后无需手动 reboot,可用
exec /sbin/init或reboot -f退出并重启 - 如果不确定 SELinux 是否启用,运行
getenforce(在 chroot 内);返回Enforcing或Permissive就要加这步
别用 rd.break 混淆路径和挂载点
rd.break 是另一条路径,但它挂载点是 /sysroot,且初始状态仍是只读。很多人混淆了两种方式的挂载逻辑:
- 用
rd.break:进系统后先mount -o remount,rw /sysroot,再chroot /sysroot - 用
init=/sysroot/bin/sh:进 shell 后直接chroot /sysroot,但前提是已通过 kernel 参数让/sysroot可写(即rw)
两者最终都要 chroot /sysroot,不是 chroot /;也不是 chroot /mnt/sysimage(那是 Rescue Mode 的路径)。
最容易被忽略的是:无论哪种方式,passwd 成功后看到 all authentication tokens updated successfully. 并不等于完成——SELinux 标签没重打,系统大概率无法正常启动。










