PAM: 인증: pam_unix(dovecot:auth): 인증 실패;

PAM: 인증: pam_unix(dovecot:auth): 인증 실패;

우분투 서버에 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"에 대한 상위 검색 결과라는 점을 고려하여 다음과 같은 추가 지식을 추가하겠습니다.

속성 을 업데이트하는 테스트에서 본 유일한 것은 LDAP에서 사용자의 비밀번호를 수정할 때의 명령 shadowAccount입니다 ... 대부분의 다른 도구는 클래스와 해당 속성에 대해 별로 신경 쓰지 않으며 이겼습니다. 만지지 마세요. 그러나 사용자에게 클래스를 추가해야 한다는 것만 알았습니다.passwdshadowAccountshadowAccount호스트에 로그인하려는 경우, 그 이후하다케어. 이메일 인증(Dovecot)과 같은 작업을 수행하는 경우에는 별로 쓸모가 없습니다. 나~할 수 있었다여기서는 틀렸지만 아직 호스트 로그인 이외의 다른 속성을 참조하는 것을 본 적이 없습니다 shadowAccount.

이제 Dovecot 인증을 받은 경우~을 통해PAM(Dovecot이 이를 쿼리하고 변경 중이기 때문에 아마도 그럴 것이라고 가정합니다 nsswitch). 그렇습니다. PAM은 이러한 추가 속성에 주의를 기울일 것이지만 이를 변경하려면 여전히 올바른 도구가 필요하다는 점을 명심하십시오. ... 사용자 비밀번호를 변경하는 모든 작업도 PAM을 거쳐야 함을 의미합니다. 인기가 없는 의견일 수도 있지만, 호스트 로그인이 필요하지 않고 Dovecot이나 다른 서비스만 필요하다면 PAM이 관련 없을 가능성이 있는 더 많은 것들을 검사할 것이기 때문에 PAM을 개입시킬 필요가 없습니다. (기껏해야 비밀번호 만료와 같은 다른 사항을 시행할 수 있지만 개인적으로는 로그인하는 서비스에 비밀번호 만료와 같은 사항을 시행하지 않을 것입니다.비밀번호 변경 규정 없음그런 식으로) 장기적으로는 호스트/셸이 아닌 로그인 서비스에서 LDAP 자체를 확인하여 검색 필터와 같은 다른 기능을 허용하는 것이 더 쉬울 수 있습니다.해당 서비스에만 해당됩니다.

하지만가정PAM에 의존하지 않고 LDAP 자체를 확인하도록 Dovecot을 설정했습니다. 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등)가 존재하지 않는 것으로 간주될 가능성이 있습니다 .rootpostmaster

이에 대한 내 개인적인 해결책은 해당 줄을 잘라내어 붙여넣는 것이었습니다.맨 아래, 이와 같이:

#!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가 설치, 구성 및 실행되지 않은 것과 관련이 있었습니다. 그렇게 하고 나니 오류가 사라졌습니다.

관련 정보