全部產品
Search
文件中心

Elastic Compute Service:Linux系統的ECS執行個體修改密碼失敗,提示“passwd: Module is unknown”怎麼辦?

更新時間:Jan 24, 2025

當您嘗試使用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

      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

        儲存並退出檔案。

      CentOS/RHEL/Alibaba Cloud Linux

      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

    運行以下命令檢查/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

    CentOS/RHEL/Alibaba Cloud Linux

    運行以下命令檢查 /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. 如果密碼修改仍然失敗,或者出現其他錯誤提示,請提交工單聯絡阿里雲支援人員。