如何处理因PAM配置错误导致的Linux实例登录失败

问题现象

启用或修改Linux系统的PAM(Pluggable Authentication Modules)模块配置后,在系统日志/var/log/secure中,出现以下任一错误会导致无法登录:

  • requirement "uid >= 1000" not met by user "xxxx"

  • user xxxx (0) has 5 failed attempts, failed attempts threshold is 3

  • Refused user xxxx for service sshd

解决方案

重要

请确保至少有一个管理员账户(root用户或其他拥有sudo权限的普通用户)可以登录实例,否则无法修改配置文件。

问题定位

  1. 使用管理员账户通过VNC连接登录ECS实例。

    1. 访问ECS控制台-实例。在页面左侧顶部,选择目标资源所在的资源组和地域。

    2. 进入目标实例详情页,单击远程连接,选择通过VNC远程连接。输入账号和密码,登录ECS实例。

  2. 检查认证日志,定位关键错误信息。

    • 账户因失败尝试被锁定:若日志包含Maximum amount of failed attempts was reached,说明配置了连续密码错误后锁定用户账户,需解除账户锁定

      sudo grep -i "Maximum amount of failed attempts" /var/log/secure
    • 用户登录权限被限制:若日志包含requirement "uid >= 1000" not met by user ,说明配置了禁止UID小于1000的用户登录,需解除UID限制

      sudo grep -i "not met by user" /var/log/secure
    • 用户被列入黑名单:若日志包含Refused user,说明配置了黑白名单文件控制用户访问,目标用户可能被显式拒绝或未被列入白名单,需解除用户黑白名单限制

      sudo grep -i "Refused user" /var/log/secure

解除账户锁定

  1. 检查用户的失败登录次数。

    将<username>替换为登录失败的用户名。

    sudo sudo pam_tally2 -u <username>

    若输出的失败次数大于0,则表示账户被锁定。

  2. 解锁账户。

    sudo pam_tally2 -u <username> -r
  3. 永久修复(可选)。

    如需禁用锁定策略,可编辑/etc/pam.d/system-auth文件,注释包含pam_tally2.so 的规则。

    sudo vim /etc/pam.d/system-auth

    如下配置,表示普通用户和root用户连续三次输入错误密码会被锁定,50秒后解锁。

    auth required pam_tally2.so deny=3 unlock_time=50  
    上述使用的是pam_tally2模块,不同的PAM版本,设置模块有所不同,请参见Linux PAM SAG
  4. 重新登录实例,验证登录是否正常。

解除UID限制

  1. 定位配置文件。

    查找包含pam_succeed_if的配置文件,如/etc/pam.d/sshd/etc/pam.d/login/etc/pam.d/system-auth

    sudo grep -r "pam_succeed_if" /etc/pam.d/
  2. 检查并修改配置。

    sudo vim /etc/pam.d/sshd

    对每个包含auth required pam_succeed_if.so uid >= 1000的文件,在其前面添加 # 号注释对应行。

    # auth required pam_succeed_if.so uid >= 1000
  3. 重新登录实例,验证登录是否正常。

解除用户黑白名单限制

  1. 定位配置文件。

    查找包含pam_listfile的配置文件,如/etc/pam.d/sshd/etc/pam.d/login/etc/pam.d/system-auth

    sudo grep -r "pam_listfile" /etc/pam.d/
  2. 检查配置。

    sudo vim /etc/pam.d/sshd

    查看匹配的配置行,确认是白名单 (sense=allow) 还是黑名单 (sense=deny),并找到名单文件路径(如/etc/ssh/whitelist/etc/ssh/blacklist)。

    # 设置了访问白名单,仅允许白名单用户允许登录
    auth required pam_listfile.so item=user sense=allow file=/etc/ssh/whitelist onerr=fail
    
    # 设置了访问黑名单,禁止黑名单用户登录
    auth required pam_listfile.so item=user sense=deny  file=/etc/ssh/blacklist onerr=fail
  3. 根据配置类型修改配置文件。

    • 白名单:在文件末尾添加用户名,每行一个用户,保存退出。

      sudo vim /etc/ssh/whitelist
    • 黑名单:删除包含目标用户名的行,保存退出。

      sudo vim /etc/ssh/blacklist
  4. 重新登录实例,验证登录是否正常。