PAM配置错误导致全用户无法登录时,须用单用户模式绕过认证链:RHEL系加rd.break、Debian系加init=/bin/bash,挂载重写后chroot修复;优先检查/etc/pam.d/system-auth或common-auth等主配置,临时重命名出错文件并恢复pam_unix.so基础认证。

当所有用户(包括 root)突然无法登录,且确认密码正确、SSH 服务运行正常、网络连通时,基本可锁定为 PAM 策略配置错误触发了全局拒绝逻辑。这类问题不依赖常规登录手段,必须绕过 PAM 认证链才能进入系统修复。
用单用户模式或救援环境强制进入系统
这是唯一可靠的第一步: - 重启服务器,在 GRUB 启动菜单按 e 编辑启动参数 - 找到以 linux 开头的行,在末尾添加: • RHEL/CentOS/Alma/Rocky 7+:`rd.break` • Ubuntu/Debian 或旧版:`init=/bin/bash` - 按 Ctrl+X 或 F10 启动 - 进入 shell 后执行: • `rd.break` 模式:`mount -o remount,rw /sysroot && chroot /sysroot` • `init=/bin/bash` 模式:`mount -o remount,rw / && chroot /`快速定位出错的 PAM 配置文件
重点检查三类文件,按影响范围从大到小排查: - `/etc/pam.d/system-auth`(RHEL/CentOS/Alma)或 `/etc/pam.d/common-auth`(Debian/Ubuntu):主认证策略,错误会阻断所有 PAM 应用 - `/etc/pam.d/sshd`:仅影响 SSH 登录,但若含 `auth [default=die] pam_xxx.so` 且模块加载失败,会导致全部 SSH 用户被拒 - `/etc/pam.d/login`:影响本地终端(tty)登录,语法错误或缺失模块也会中断认证 - 运行 `grep -n "^\s*auth\|^\s*account" /etc/pam.d/system-auth 2>/dev/null | head -10` 查看前几行是否有明显异常,例如: • 重复的 `required` 规则 • 路径错误的 `.so` 文件(如 `pam_badmodule.so`) • 未注释的测试规则(如 `auth [default=die] pam_deny.so`)临时恢复登录的最小干预操作
不建议直接编辑或删除,优先做低风险恢复: - 将疑似出错的文件重命名备份: `mv /etc/pam.d/system-auth /etc/pam.d/system-auth.broken` - 若有标准模板,复制恢复: `cp /usr/share/pam-configs/system-auth /etc/pam.d/system-auth`(RHEL 系) `cp /usr/share/pam-configs/common-auth /etc/pam.d/common-auth`(Debian 系) - 若无模板,手动创建极简 `system-auth`(仅保留基础认证能力): ```text auth [success=done default=bad] pam_unix.so account required pam_unix.so ``` - 检查关键模块是否存在: `ls /lib*/security/pam_unix.so /lib*/security/pam_permit.so 2>/dev/null` 缺失则需从同版本救援镜像复制,或重装 `pam` 包验证修复并退出恢复环境
- 执行 `exit` 两次退出 chroot 并重启系统 - 重启后尝试 root 或普通用户登录,确认是否恢复 - 若仍失败,检查 `/var/log/secure` 或 `journalctl -u sshd --since "1 hour ago"` 中的 PAM 报错线索 - 登录成功后,再逐行比对 `.broken` 文件与标准配置,定位具体哪一行导致中断不复杂但容易忽略


















