我們在 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
列表。!include
auth-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 未安裝、配置和運行有關。一旦我這樣做了,錯誤就消失了。