Linux系统的ECS实例修改密码失败,提示“passwd: Module is unknown”怎么办?

更新时间:2025-01-23 03:54

当您尝试使用passwd命令修改Linux系统的ECS实例密码时,出现passwd: Module is unknownpasswd: password unchanged的错误提示,这通常意味着系统中与密码管理相关的PAM(Pluggable Authentication Modules)配置出现了问题,或者某些必要的PAM模块缺失或配置不正确。PAM是Linux系统中用于管理用户认证的模块。

问题现象

现象一:使用passwd命令修改Linux系统的ECS实例密码失败,提示如下信息:

passwd: Module is unknown
passwd: password unchanged

现象二:通过云助手在线重置实例密码执行失败,提示如下信息:

image

可能原因

  1. PAM模块未安装或丢失:系统中缺少必要的PAM模块(如pam_unix.sopam_pwquality.so);或模块文件被误删除或损坏。

  2. PAM配置文件错误/etc/pam.d/目录下的配置文件(如 common-password 或 system-auth)引用了不存在的模块;或配置文件中的模块路径或参数错误。

  3. 密码策略配置问题/etc/security/pwquality.conf文件未正确配置,导致pam_pwquality.so模块无法正常工作。

解决方案

步骤一:检查pam_unix.so是否存在

  1. 远程连接Linux实例。

    具体操作,请参见使用Workbench工具以SSH协议登录Linux实例

  2. 运行以下命令检查pam_unix.so模块是否存在。

    sudo find / -name "pam_unix.so"
    说明
    • 如果pam_unix.so存在,请检查pam_pwquality.so模块配置

    • 如果pam_unix.so不存在,可能是系统库文件损坏或PAM相关包未安装,请重新安装PAM包。pam_unix.so是PAM的核心模块,负责基本的用户认证和密码管理功能。

  3. 重新安装PAM相关包。

    • Ubuntu/Debian

      sudo apt-get update
      sudo apt-get install --reinstall libpam-modules
    • CentOS/RHEL/Alibaba Cloud Linux

      sudo yum reinstall pam
  4. 再次运行以下命令检查pam_unix.so是否存在。

    sudo find / -name "pam_unix.so"

步骤二:检查pam_pwquality.so模块配置

pam_pwquality.so模块用于增强密码复杂性检查,包括最小长度、字符类型等。如果系统中启用了pam_pwquality.so,用户在修改密码时必须满足其定义的复杂性规则。

  1. 查看系统日志中是否有与pam_pwquality.so相关的错误信息。例如Module is unknownpam_chauthtok() failed

    • Ubuntu/Debian

      sudo tail -f /var/log/auth.log
    • CentOS/RHEL/Alibaba Cloud Linux

      sudo tail -f /var/log/secure
      说明

      例如返回如下错误信息:

      PAM unable to dlopen(pam_puquality.so): /lib/security/pam_puquality.so: cannot open shared object file: No such file or directory
      PAM adding faulty module: pam_puquality.so

      日志显示系统无法加载pam_pwquality.so模块,可能是pam_pwquality.so模块未安装,或者安装路径不正确。

  2. 运行以下命令,检查pam_pwquality.so是否安装。

    sudo find / -name "pam_pwquality.so"

    如果输出类似以下内容,说明模块已安装。

    /usr/lib/x86_64-linux-gnu/security/pam_pwquality.so
  3. 如果pam_pwquality.so已安装。

    1. 检查PAM配置文件(如/etc/pam.d/common-password/etc/pam.d/system-auth)是否正确引用了pam_pwquality.so

      Ubuntu/Debian
      CentOS/RHEL/Alibaba Cloud Linux
      1. 运行以下命令,检查/etc/pam.d/common-password文件内容。

        sudo cat /etc/pam.d/common-password | grep -v "#"
      2. 确保以下行存在且正确:

        password [success=1 default=ignore] pam_unix.so obscure sha512
        password requisite pam_deny.so
        password required pam_permit.so
        password requisite pam_pwquality.so retry=3 minlen=10 minclass=3
      3. 如果配置不正确,编辑/etc/pam.d/common-password文件。

        sudo vi /etc/pam.d/common-password

        添加或修改以下行:

        password requisite pam_pwquality.so retry=3 minlen=10 minclass=3

        保存并退出文件。

      1. 运行以下命令,检查/etc/pam.d/system-auth文件内容。

        sudo cat /etc/pam.d/system-auth | grep -v "#"

        确保以下行存在且正确:

        password   sufficient   pam_unix.so sha512 shadow nullok try_first_pass use_authtok
        password   required     pam_deny.so
        password   requisite    pam_pwquality.so try_first_pass local_users_only retry=3
      2. 如果配置不正确,编辑/etc/pam.d/system-auth文件。

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

        添加或修改以下行:

        password requisite pam_pwquality.so try_first_pass local_users_only retry=3

        保存并退出文件。

    2. 运行以下命令,检查/etc/security/pwquality.conf文件内容。

      sudo cat /etc/security/pwquality.conf

      确保以下内容存在且正确:

      minlen = 10
      minclass = 3
      retry = 3
      说明
      • minlen = 10:密码最小长度为10个字符。

      • minclass = 3:密码必须包含至少3种字符类型(小写字母、大写字母、数字、特殊字符)。

      • retry = 3:允许用户重试密码3次。

  4. 如果pam_pwquality.so未安装。

    说明
    • 如果您不需要强制密码复杂性检查(例如密码长度、字符类型等),可以直接注释掉或删除/etc/pam.d/common-password文件中与pam_pwquality.so相关的行。

    • 如果您需要密码复杂性检查,则需要安装libpam-pwquality

    检查PAM配置文件中是否引用了pam_pwquality.so

    Ubuntu/Debian
    CentOS/RHEL/Alibaba Cloud Linux

    运行以下命令检查/etc/pam.d/common-password文件:

    sudo cat /etc/pam.d/common-password | grep "pam_pwquality.so"

    如果输出类似以下内容,说明引用了pam_pwquality.so

    password requisite pam_pwquality.so retry=3 minlen=10 minclass=3

    运行以下命令检查 /etc/pam.d/system-auth文件:

    sudo cat /etc/pam.d/system-auth | grep "pam_pwquality.so"

    如果输出类似以下内容,说明引用了pam_pwquality.so

    password requisite pam_pwquality.so try_first_pass local_users_only retry=3

    如果pam_pwquality.so未安装且被引用,有以下两种方式。

    方式一:安装pam_pwquality.so

    1. 执行以下命令安装pam_pwquality.so模块。

      • Ubuntu/Debian

        sudo apt-get update
        sudo apt-get install libpam-pwquality
      • CentOS/RHEL/Alibaba Cloud Linux

        sudo yum install pam_pwquality
    2. 安装后,再次运行以下命令检查pam_pwquality.so是否存在。

      sudo find / -name "pam_pwquality.so"

    方式二:注释pam_pwquality.so相关配置(临时解决方案,不推荐

    如果无法立即解决问题,可以临时注释掉pam_pwquality.so行,以绕过密码复杂性检查。

    1. 打开PAM配置文件。

      • Ubuntu/Debian

        sudo vi /etc/pam.d/common-password
      • CentOS/RHEL/Alibaba Cloud Linux

        sudo vi /etc/pam.d/system-auth
    2. 找到以下行。

      password requisite pam_pwquality.so retry=3 minlen=10 minclass=3
    3. 在该行前面添加#注释。

      # password requisite pam_pwquality.so retry=3 minlen=10 minclass=3
    4. 保存并退出文件。

    重要
    • 注释掉pam_pwquality.so后,系统将不再强制要求密码复杂性,可能会降低安全性。建议仅在测试环境或特定场景下禁用密码复杂性检查。

    • 如果需要重新启用密码复杂性检查,可以取消注释pam_pwquality.so行,并确保/etc/security/pwquality.conf文件中的规则正确。

步骤三:验证配置是否生效

  1. 尝试修改密码,检查是否生效。

    passwd
  2. 如果密码修改仍然失败,或者出现其他错误提示,请提交工单联系阿里云技术支持。

  • 本页导读 (1)
  • 问题现象
  • 可能原因
  • 解决方案
  • 步骤一:检查pam_unix.so是否存在
  • 步骤二:检查pam_pwquality.so模块配置
  • 步骤三:验证配置是否生效
文档反馈