本文介紹在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配置之前,請謹慎評估是否需要修改,以及所做的更改不會破壞系統的正常功能或導致安全漏洞。
(可選)若root用戶輸入正確密碼也無法登錄,請先解鎖root用戶。否則,請跳過該步驟。
使用單用戶模式登錄實例。
具體操作,請參見Linux系統進入單用戶模式。
依次執行如下命令,解鎖root用戶。
pam_tally2 -u root #查看root用戶登錄密碼連續輸入錯誤次數。 pam_tally2 -u root -r #清除root用戶密碼連續輸入錯誤次數。 authconfig --disableldap --update #更新PAM安全認證記錄。
重啟ECS實例,使修改生效。
具體操作,請參見重啟實例。
使用root用戶登錄Linux實例。
具體操作,請參見使用VNC登錄實例。
執行以下命令,打開secure日志,查找包含pam字段的行,并確定與PAM設置相關聯的模塊名稱。
cat /var/log/secure
例如以下示例,模塊名稱為pam_succeed_if。
pam_succeed_if(sshd:auth): requirement "uid >= 1000" not met by user "root".
根據獲取的模塊名稱,查找PAM配置文件是否存在相關配置。如存在,參考步驟5修改。
執行以下命令,獲取以下3個PAM配置文件的配置信息。
cat /etc/pam.d/login cat /etc/pam.d/sshd cat /etc/pam.d/system-auth
使用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
若PAM配置文件存在相關配置,打開對應的配置文件,根據實際需求修改與secure日志中相關的配置,解除限制。
重要所有包含secure中模塊名稱的PAM配置文件,均需要修改。
執行以下命令,打開某一個對應配置文件。
vim <配置文件名稱>
按
i
鍵,根據實際需求,注釋或更改對應配置。PAM配置文件的語法信息,請參見PAM 配置(參考)。完成配置后,按
Esc
鍵,輸入:wq
保存。(可選)重復步驟a~c,修改其他配置文件。
重新登錄ECS實例,如果可以正常登錄,說明問題已修復。
因PAM配置不當導致登錄失敗的常見錯誤日志和對應解決方案
secure日志提示:“requirement "uid >= 1000" not met by user "root"”
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
如何修改
將允許登錄的用戶添加到白名單或移除黑名單,或注釋該配置。
執行如下命令,打開
/etc/ssh/whitelist
配置文件。vim /etc/ssh/whitelist
按
i
進入編輯模式。將允許的登錄的用戶添加到白名單中。
以下示例表示僅允許以下三個用戶登錄。
root ecs-user test
按
Esc
鍵,輸入:wq
退出并保存配置文件。
登錄Linux系統的ECS實例時,提示“Maximum amount of failed attempts was reached”
問題原因
連續多次輸入錯誤密碼,觸發系統PAM認證模塊策略限制,導致用戶被鎖定,無法登錄Linux實例。
解決方法
若root用戶被鎖定,請先解鎖root用戶。否則跳過該步驟。
使用單用戶模式登錄實例。
具體操作,請參見Linux系統進入單用戶模式。
依次執行如下命令,解鎖root用戶。
pam_tally2 -u root #查看root用戶登錄密碼連續輸入錯誤次數。 pam_tally2 -u root -r #清除root用戶密碼連續輸入錯誤次數。 authconfig --disableldap --update #更新PAM安全認證記錄。
重啟ECS實例,使修改生效。
具體操作,請參見重啟實例。
使用root用戶登錄Linux實例。
具體操作,請參見使用VNC登錄實例。
執行如下命令,查看PAM配置文件中是否存在認證限制。
cat /etc/pam.d/system-auth
例如,系統返回如下時,表示普通用戶和root用戶連續三次輸入錯誤密碼,50秒后才能再次登錄Linux實例。
解決問題。
方法一:等待PAM設置的凍結時長(例如50秒),待系統解凍賬戶后,再重新登錄實例。
方法二:修改配置文件(下文
/etc/pam.d/system-auth
為例進行說明,其他配置文件修改方法類似)。執行如下命令,打開
/etc/pam.d/system-auth
配置文件。vim /etc/pam.d/system-auth
按
i
進入編輯模式。根據業務需要,注釋、修改或刪除該配置。
本文以注釋配置為例進行說明。
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。