PAM: auth: pam_unix(dovecot:auth): 認證失敗;

PAM: auth: pam_unix(dovecot:auth): 認證失敗;

我們在 ubuntu 伺服器上安裝了 opnldap,並為使用者收到以下訊息:

 auth: pam_unix(dovecot:account): account has expired (account expired)
Sep  3 19:05:03  auth: pam_unix(dovecot:auth): authentication failure; logname= uid=0 euid=0 tty=dovecot ruser=XXXX rhost=::1  user=XXXX

我使用 ldappasswd 成功更改了密碼,但錯誤仍然存在。做了一些研究,似乎 ShadowLastChange 沒有更新。

我們該如何解決這個問題?

/usr/share/slapd/slapd.conf

access to attrs=userPassword,shadowLastChange
        by dn="@ADMIN@" write
        by anonymous auth
        by self write
        by * none
access to dn.base="" by * read

# The admin dn has full write access, everyone else
# can read everything.
access to *
        by dn="@ADMIN@" write
        by * read

好的 - 這似乎是 PAM 問題。

如果我將 /etc/nsswitch.conf 編輯為:

shadow: compat

我沒有收到帳戶已過期的訊息。

如果我把它改成:

shadow: files ldap

我願意。但無論哪種情況,我還是會遇到鴿舍錯誤。

答案1

討厭重新提出一個死問題,但考慮到這是“dovecot pam 身份驗證失敗 ldap”的頂部搜索結果,讓我添加一點額外的知識:

我在測試中看到的唯一更新shadowAccount屬性的命令是passwd修改 LDAP 中用戶的密碼時的命令...大多數其他工具不太關心shadowAccount類別及其屬性,並且贏得了不要碰它們。然而我只發現shadowAccount需要為用戶添加類他們是否要登入主機, 因為關心。如果您只是做電子郵件身份驗證(Dovecot)之類的事情,那麼它沒有多大用處。我可以這裡是錯誤的,但除了主機登入之外,我還沒有看到任何其他內容查閱shadowAccount屬性。

現在,如果您讓 Dovecot 進行身份驗證透過PAM(我認為您可能是這樣,因為 Dovecot 正在查詢它並且您正在更改nsswitch),那麼請記住,雖然 PAM 會關注這些額外的屬性,但您仍然需要正確的工具來更改它們...意味著無論更改用戶密碼也需要透過PAM。儘管這可能不受歡迎,但如果您不需要主機登錄,只需要 Dovecot 或其他服務,則無需讓 PAM 參與其中,因為它將檢查更多可能不相關的內容。 (充其量它可以強制執行其他操作,例如,是的,密碼過期,但就我個人而言,當您登入的服務具有沒有更改密碼的規定從長遠來看,讓非主機/shell 登入服務本身檢查 LDAP 可能會更容易,從而允許搜尋過濾器等其他功能特定於該服務。

然而假設您已設定 Dovecot 檢查 LDAP 本身,而不是依賴 PAM,Dovecot 的末端是不同驗證機制(如 LDAP、SQL 等)的行10-auth.conf列表。!includeauth-system.conf.ext其他機制,例如 LDAP。這意味著,因為在我的測試中,Dovecot 檢查了這些依照提供的順序,Dovecot 將首先嘗試使用 PAM 對使用者進行身份驗證,然後,如果失敗,則使用 LDAP 進行身份驗證。因此,您將收到一個 PAM 錯誤,指出,是的,authentication failure(以及第一個指示什麼失敗了)。如果您變更了此順序,以便先查詢最有可能成功的方法(人們會認為是 LDAP),則無需檢查 PAM,因此 PAM 不會拋出錯誤。

為了解決這個問題你可以註解掉,但是如果您沒有在 LDAP 中設定係統使用者(例如 或 ) !include auth-system.conf.ext,這可能會導致系統使用者(例如root或)被視為不存在。postmaster

我個人對此的解決方案是剪掉該行並將其貼到底部, 像這樣:

#!include auth-deny.conf.ext
#!include auth-master.conf.ext

!include auth-ldap.conf.ext

#!include auth-sql.conf.ext
#!include auth-passwdfile.conf.ext
#!include auth-checkpassword.conf.ext
#!include auth-vpopmail.conf.ext
#!include auth-static.conf.ext

!include auth-system.conf.ext

這意味著Dovecot將第一的諮詢 LDAP,然後根據我的測試顯示,如果 LDAP 沒有給出結果,請諮詢 PAM。

答案2

以前從未真正回答過我自己的問題,但我想分享以防其他人遇到這個問題。這與 saslauthd 未安裝、配置和運行有關。一旦我這樣做了,錯誤就消失了。

相關內容