一、准备工作:进入GRUB编辑模式

无论是哪种安全模式,都需要在系统启动时修改内核引导参数。操作步骤如下:

  1. 重启Linux系统,在出现GRUB菜单时按下 e 键进入编辑界面。
  2. 找到以 linuxlinux16/linuxefi 开头的行(不同发行版名称略有差异)。
  3. 在该行末尾添加指定的内核参数。
  4. Ctrl+XF10 启动系统。

二、方法一:rd.break(RHEL/CentOS 7+ 推荐)

rd.break 是 systemd 提供的一个早期中断参数,在 initramfs 阶段就挂起系统,适合 RHEL 7/8/9、CentOS、Fedora 等发行版。

操作步骤

  1. 在GRUB编辑界面找到内核行
    例如:

    linux16 /vmlinuz-... root=/dev/mapper/centos-root ro crashkernel=auto ...
  2. 在行末添加 rd.break

    linux16 /vmlinuz-... root=/dev/mapper/centos-root ro crashkernel=auto rd.break
  3. 按 Ctrl+X 启动,系统会进入 switch_root 提示符:

    switch_root:/#
  4. 以读写方式重新挂载系统根目录(默认只读):

    mount -o remount,rw /sysroot
  5. 切换根环境

    chroot /sysroot
  6. 重置root密码(或任意用户密码):

    passwd root
    # 按提示输入两次新密码
  7. 处理SELinux重新标记(关键步骤!如果系统启用了SELinux,必须执行):

    touch /.autorelabel
    如果跳过此步,重启后可能因文件安全上下文错误导致系统异常或密码验证失败。
  8. 退出chroot并重启

    exit
    reboot
注意:系统重启时会因为 .autorelabel 触发文件重新标记,耗时较长(视磁盘文件数量而定),请耐心等待。

三、方法二:init=/bin/bash(通用方法)

此方法通过直接启动bash shell绕过所有服务,几乎适用于所有Linux发行版(包括Debian/Ubuntu)。

操作步骤

  1. 在GRUB编辑界面找到内核行,删除可能存在的 rhgb quiet 参数(非必须,但便于观察)。
  2. ro(只读)改为 rw,并在行末添加 init=/bin/bash

    linux16 /vmlinuz-... root=/dev/mapper/centos-root rw init=/bin/bash
  3. 按 Ctrl+X 启动,系统会直接进入bash shell(无需密码):

    bash-5.0#
  4. 由于根分区已经以 rw 挂载,可以直接修改密码

    passwd root
  5. 处理SELinux重新标记(如果启用SELinux):

    touch /.autorelabel
  6. 强制重启(由于没有init进程,普通reboot无效):

    exec /sbin/init
    # 或直接 reboot -f
说明:此方法下系统不会自动挂载 /proc、/sys 等伪文件系统,但对于 passwd 命令已经足够。若遇到“passwd: Module is unknown”等错误,可先执行 mount -t proc proc /proc 再重试。

四、两种方法对比与注意事项

特性rd.breakinit=/bin/bash
适用发行版RHEL/CentOS/Fedora(systemd)几乎所有Linux
是否需要手动挂载需要 remount /sysroot 并 chroot需将 ro 改为 rw
SELinux自动重标需手动 touch /.autorelabel需手动 touch /.autorelabel
是否保留系统环境较完整(加载了部分驱动)极简环境(仅bash)

通用提醒

  • 如果系统启用了磁盘加密(LUKS),两种方法均无法绕过,需先输入解密密码。
  • 修改密码后,如果发现依然无法登录,请检查 /etc/passwd/etc/shadow 的完整性,或确认账户未被锁定(passwd -S root)。
  • 云服务器/VPS通常提供救援模式,不建议直接修改GRUB,改用VNC或控制台救援功能更安全。

五、图形界面下tty1被锁,密码正确却无法登录的解决办法

现象描述

  • 图形界面(如GNOME、KDE)正常显示登录窗口,但输入正确密码后,要么提示“认证失败”,要么闪一下又回到登录界面。
  • 尝试按 Ctrl+Alt+F1 切换到字符终端tty1,输入正确的用户名密码后,依然报错“Login incorrect”或直接被拒绝登录。
  • 但切换到其他tty(如 Ctrl+Alt+F2F6)却可以正常登录。

根本原因分析

常见原因简要说明
显示管理器(GDM/LightDM)占用tty1图形界面进程长期锁定tty1,导致 getty@tty1 服务无法提供正常登录环境。
pam_securetty 模块限制/etc/securetty 文件中缺少 tty1,导致root用户被禁止从tty1登录。
SELinux上下文损坏修改密码后未正确重新标记,导致 /bin/login 或 PAM 模块无法正常读取shadow。
账户被锁定(faillockpam_tally2多次失败登录后账户被临时锁定,但图形界面提示不明确。
~/.Xauthority 权限异常仅影响图形登录,通常不会导致tty1字符登录失败,但可能伴随出现。

解决方案(按优先级排序)

1. 切换到其他tty,先获取一个可用会话

按 Ctrl+Alt+F2(或F3-F6)进入字符终端
使用用户名密码登录(通常可以成功)

登录后,继续执行以下修复操作。

2. 检查并重启 tty1 的 getty 服务

# 查看tty1服务状态
systemctl status getty@tty1

# 如果服务未运行或被屏蔽,执行:
systemctl start getty@tty1
systemctl enable getty@tty1

# 如果显示管理器(gdm)冲突,尝试停止它后再启动getty
systemctl stop gdm   # 或 lightdm / sddm
systemctl start getty@tty1

3. 确认 /etc/securetty 包含 tty1(尤其针对root用户)

# 检查是否包含tty1
grep tty1 /etc/securetty

# 如果没有,添加一行
echo tty1 >> /etc/securetty
对于非root用户,此步骤通常无关,但如果所有用户都无法登录tty1,可以注释掉 PAM 中的 securetty 模块:
编辑 /etc/pam.d/login,注释掉 auth required pam_securetty.so 行(不推荐,仅临时测试)。

4. 处理SELinux上下文问题

如果在安全模式重置密码后忘记 touch /.autorelabel,可以手动触发重新标记:

# 方法一:立即重新标记(需要重启)
touch /.autorelabel
reboot

# 方法二:仅修复登录相关文件的上下文
restorecon -v /etc/shadow /etc/passwd /bin/login /usr/bin/passwd

5. 检查并解锁账户

# 查看root账户状态
passwd -S root

# 如果显示 "LK"(锁定),则解锁
passwd -u root

# 清除失败登录计数(faillock)
faillock --user root --reset
# 或(旧系统)
pam_tally2 --user root --reset

6. 重置显示管理器(可选)

如果图形界面本身导致tty资源冲突,可重置显示管理器配置:

# 重新配置GDM
dpkg-reconfigure gdm3        # Debian/Ubuntu
yum reinstall gdm -y          # RHEL/CentOS

# 或者临时禁用图形界面,使用纯字符界面排查
systemctl set-default multi-user.target
reboot

7. 终极排查:查看日志

# 安全日志(最重要)
tail -f /var/log/secure      # RHEL/CentOS
tail -f /var/log/auth.log     # Debian/Ubuntu

# 尝试从tty1登录一次,观察报错信息
# 然后检查日志中类似 "pam_unix(login:auth): authentication failure" 的条目

预防措施

  • 避免直接修改密码后跳过SELinux重新标记 – 务必 touch /.autorelabel
  • 不随意禁用getty服务 – 确保 systemctl enable getty@tty1
  • 对于生产环境,保留一个备用tty(如tty2)始终可用 – 以便故障时应急登录。
  • 考虑使用 chvt 命令切换前台终端 – 避免手动按快捷键时误操作。

六、总结

通过 rd.breakinit=/bin/bash 两种安全模式,管理员可以在忘记密码时快速恢复系统。然而,修改密码后的SELinux重标、tty服务状态等细节往往被忽略,进而引发“密码正确却无法登录”的诡异问题。

当遇到tty1被锁时,先切换到其他tty(Ctrl+Alt+F2)获取控制权,再逐步排查服务、securetty、SELinux和账户锁定状态,通常能快速解决。理解这些底层机制,才能真正做到临危不乱。

最后提醒:以上操作需物理或控制台访问权限。远程服务器请谨慎使用GRUB修改,推荐通过带外管理(iDRAC、IPMI)或云厂商的救援模式进行操作。

相关阅读


本文适用于主流Linux发行版(RHEL 7+、CentOS、Fedora、Debian、Ubuntu 18.04+)。如有特殊环境差异,请以官方文档为准。

最后修改:2026 年 04 月 10 日
如果觉得我的文章对你有用,请随意赞赏