能进单用户模式但改密后仍无法登录,大概率因文件系统未挂载为读写或selinux未打标;需检查挂载状态、确认用户存在、执行touch /.autorelabel(selinux系统)、用exec /sbin/init或exit正确重启。

能进单用户模式,但改完密码重启还是登不进去——大概率是文件系统没挂载为读写,或者 SELinux 状态没处理。别急着重装,按步骤来基本都能救回来。
怎么触发 GRUB 编辑界面(不同启动方式操作差异)
物理机或本地虚拟机:开机看到品牌 Logo 或黑屏时,立刻长按 Shift(BIOS)或反复按 Esc(UEFI),直到出现 GRUB 菜单;云主机(如阿里云、华为云)需通过控制台 VNC 连接,重启后快速点“发送 Ctrl+Alt+Del”,再用方向键暂停启动流程,按 e 进入编辑。
常见卡点:
- GRUB 菜单一闪而过?多试几次,或进 BIOS/UEFI 把 GRUB timeout 调大
- 按
e没反应?确认没选中 recovery mode 项,要选第一行带 “Ubuntu”“CentOS” 或发行版名的主启动项 - 编辑界面提示输入用户名密码?说明 GRUB 被加了密码,需联系管理员或换救援模式
修改内核参数的关键写法(init=/bin/bash vs rd.break)
两种主流写法不能混用,选错会导致进不去 shell 或挂载失败:
-
init=/bin/bash:适用于 Ubuntu/Debian/麒麟等多数 systemd 发行版。找到以linux开头的行(Ubuntu)或linux16(CentOS 7+),把末尾的ro quiet splash类参数删掉,改成rw init=/bin/bash console=tty0 -
rd.break:专用于 RHEL/CentOS 7+/Rocky/Alma/openEuler。同样找到linux16行,在末尾直接加rd.break,不用动ro——它会在 initramfs 阶段中断,后续必须手动chroot /sysroot
错误示范:rd.break init=/bin/bash 同时写两个,系统会忽略后者甚至报错。
Linux 性能分析与调优专家,覆盖 CPU、内存、磁盘 I/O、网络、内核参数、编译优化、容器/K8s。适用场景:系统卡顿/高负载、内存不足/OOM/Swap 高、CPU 异常/iowait 高。
进 shell 后必须做的三件事(漏一步就白忙)
无论哪种方式进来的 shell,以下操作缺一不可:
- 检查根分区是否可写:
mount | grep " / "或mount | grep sysroot;若显示ro,立即执行mount -o remount,rw /(init=/bin/bash路径)或mount -o remount,rw /sysroot(rd.break路径) - 改密码前先确认用户存在:
getent shadow root,避免输错用户名导致passwd创建新账户而非改密 - SELinux 系统必须打标:
touch /.autorelabel(RHEL/CentOS/麒麟等),否则重启后可能卡在 SELinux relabel 阶段,黑屏或无限循环
执行 passwd root 后,系统会更新 /etc/shadow 中第二字段哈希值,无需手动编辑该文件。
重启命令选哪个才真正生效
别用 reboot 或 shutdown -r now ——在单用户 shell 下它们常被屏蔽或无响应:
- 用
exec /sbin/init(init=/bin/bash场景):让 systemd 正常接管启动流程 - 用
exit(rd.break场景):退出 chroot 后自动继续启动 - 实在卡死,强制重启:
echo 1 > /proc/sys/kernel/sysrq然后echo b > /proc/sysrq-trigger(注意顺序,中间不能换行)
重启后如果又跳回单用户模式,说明 GRUB 启动项里还留着 rd.break 或 init=...,需再次进编辑界面删掉再保存启动。
最易忽略的是挂载权限和 SELinux 标签,尤其在云主机或国产系统上,这两步漏掉,密码看似改成功,实际重启后仍无法登录。










