启用PAM认证模块后,无法登录Linux实例的解决方案

本文介绍在Linux操作系统内启用PAM认证模块后,出现无法登录Linux实例问题的解决方案。

什么是PAM

PAM (Pluggable Authentication Modules)是一个身份认证机制,可用于Linux系统中来实现用户身份验证,加强系统的安全。

如果PAM模块配置错误,可能会导致用户无法通过身份认证,即使输入了正确的密码也无法登录Linux实例。这种情况下,建议您联系管理员检查PAM模块的配置,并根据需要进行相应的调整,以确保能够成功登录Linux实例。常见的与远程登录实例的服务有ssh和login,这两个服务在pam对应的配置文件如下:

  • /etc/pam.d/login:控制台(管理终端)对应的配置文件。例如密码验证、账户锁定和限制登录IP等。

  • /etc/pam.d/sshd:SSH远程登录的认证信息。

  • /etc/pam.d/system-auth:系统级别的认证信息,例如密码策略、用户信息和访问控制等。

如何修改PAM配置

重要
  • 仅root用户(管理员)支持修改PAM配置,若您为非root用户,请联系管理员检查并修改PAM配置。

  • PAM配置通常是为了加强系统安全,在修改PAM配置之前,请谨慎评估是否需要修改,以及所做的更改不会破坏系统的正常功能或导致安全漏洞。

  1. (可选)若root用户输入正确密码也无法登录,请先解锁root用户。否则,请跳过该步骤。

    如何解锁root用户?

    1. 使用单用户模式登录实例。

      具体操作,请参见Linux系统进入单用户模式

    2. 依次执行如下命令,解锁root用户。

      pam_tally2 -u root #查看root用户登录密码连续输入错误次数。
      pam_tally2 -u root -r #清除root用户密码连续输入错误次数。
      authconfig --disableldap --update #更新PAM安全认证记录。
    3. 重启ECS实例,使修改生效。

      具体操作,请参见重启实例

  2. 使用root用户登录Linux实例。

    具体操作,请参见使用VNC登录实例

  3. 执行以下命令,打开secure日志,查找包含pam字段的行,并确定与PAM设置相关联的模块名称。

    cat /var/log/secure

    例如以下示例,模块名称为pam_succeed_if

    pam_succeed_if(sshd:auth): requirement "uid >= 1000" not met by user "root".
  4. 根据获取的模块名称,查找PAM配置文件是否存在相关配置。如存在,参考步骤5修改。

    1. 执行以下命令,获取以下3个PAM配置文件的配置信息。

      cat /etc/pam.d/login
      cat /etc/pam.d/sshd
      cat /etc/pam.d/system-auth
    2. 使用grep命令,查找各配置文件中是否存在与secure日志相关的配置行。

      grep "模块名称" /etc/pam.d/login
      grep "模块名称" /etc/pam.d/sshd
      grep "模块名称" /etc/pam.d/system-auth

      例如,查找包含模块名称pam_succeed_if的行,执行以下命令:

      grep "pam_succeed_if" /etc/pam.d/login
      grep "pam_succeed_if" /etc/pam.d/sshd
      grep "pam_succeed_if" /etc/pam.d/system-auth

      若PAM配置文件存在相关配置,您将看到类似输出:

      /etc/pam.d/login:auth        requisite     pam_succeed_if.so uid >= 1000 quiet_success
      /etc/pam.d/system-auth:auth        requisite     pam_succeed_if.so uid >= 1000 quiet_success
  5. 若PAM配置文件存在相关配置,打开对应的配置文件,根据实际需求修改与secure日志中相关的配置,解除限制。

    重要

    所有包含secure中模块名称的PAM配置文件,均需要修改。

    1. 执行以下命令,打开某一个对应配置文件。

      vim <配置文件名称>
    2. i键,根据实际需求,注释或更改对应配置。PAM配置文件的语法信息,请参见PAM 配置(参考)

    3. 完成配置后,按Esc键,输入:wq保存。

    4. (可选)重复步骤a~c,修改其他配置文件。

  6. 重新登录ECS实例,如果可以正常登录,说明问题已修复。

因PAM配置不当导致登录失败的常见错误日志和对应解决方案

secure日志提示:“requirement "uid >= 1000" not met by user "root"”

  • 问题原因

    PAM配置文件中,设置了禁止UID小于1000的用户登录。

    说明

    系统用户(包括root)UID为0~999,该限制一般是禁止系统用户登录系统,增强系统的安全性。

  • 解决方法

    • 方式一:使用其他用户登录ECS实例。

    • 方式二:查看PAM配置文件中是否存在相关配置并修改,来解除限制。具体操作,请参见步骤3~4

      配置文件中,存在类似如下配置表示有该限制,您可以根据需要注释或删除该配置以解除该限制。

      auth required pam_succeed_if.so uid >= 1000

secure日志提示:Refused user xxx(用户名)for service sshd

  • 问题原因

    PAM配置文件中,设置了禁止xxx用户登录ECS实例。

  • 解决方法

    • 方法一:使用其他用户登录ECS实例。

    • 方法二:查看PAM配置文件中是否存在相关配置并修改,来解除限制。具体操作,请参见步骤3~4

      • 配置文件中,存在类似如下配置表示有该限制:

        # 设置了访问白名单,仅允许白名单用户允许登录
        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
      • 如何修改

        将允许登录的用户添加到白名单或移除黑名单,或注释该配置。

        如何添加/移除

        1. 执行如下命令,打开/etc/ssh/whitelist配置文件。

          vim /etc/ssh/whitelist
        2. i进入编辑模式。

        3. 将允许的登录的用户添加到白名单中。

          以下示例表示仅允许以下三个用户登录。

          root
          ecs-user
          test
        4. Esc键,输入:wq退出并保存配置文件。

登录Linux系统的ECS实例时,提示“Maximum amount of failed attempts was reached”

  • 问题原因

    连续多次输入错误密码,触发系统PAM认证模块策略限制,导致用户被锁定,无法登录Linux实例。

  • 解决方法

    1. 若root用户被锁定,请先解锁root用户。否则跳过该步骤。

      如何解锁root用户?

      1. 使用单用户模式登录实例。

        具体操作,请参见Linux系统进入单用户模式

      2. 依次执行如下命令,解锁root用户。

        pam_tally2 -u root #查看root用户登录密码连续输入错误次数。
        pam_tally2 -u root -r #清除root用户密码连续输入错误次数。
        authconfig --disableldap --update #更新PAM安全认证记录。
      3. 重启ECS实例,使修改生效。

        具体操作,请参见重启实例

    2. 使用root用户登录Linux实例。

      具体操作,请参见使用VNC登录实例

    3. 执行如下命令,查看PAM配置文件中是否存在认证限制。

      cat /etc/pam.d/system-auth

      例如,系统返回如下时,表示普通用户和root用户连续三次输入错误密码,50秒后才能再次登录Linux实例。

      image.png
    4. 解决问题。

      • 方法一:等待PAM设置的冻结时长(例如50秒),待系统解冻账户后,再重新登录实例。

      • 方法二:修改配置文件(下文/etc/pam.d/system-auth为例进行说明,其他配置文件修改方法类似)。

        1. 执行如下命令,打开/etc/pam.d/system-auth配置文件。

          vim /etc/pam.d/system-auth
        2. i进入编辑模式。

        3. 根据业务需要,注释、修改或删除该配置。

          本文以注释配置为例进行说明。

          auth required pam_tally2.so deny=3 unlock_time=50  #原文代码:普通用户和root用户连续三次输入错误密码会被锁定,50秒后才能解锁。
          #auth required pam_tally2.so deny=3 unlock_time=50 #注释后 
          说明

          此处使用的是pam_tally2模块,不同的PAM版本,设置可能有所不同,详情请参见Linux PAM SAG