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 が更新されていないようです。
これをどうすれば解決できるでしょうか?
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
OK、これは PAM の問題のようです。
/etc/nsswitch.conf を次のように編集します:
shadow: compat
アカウントの有効期限が切れたというメッセージが表示されません。
次のように変更すると:
shadow: files ldap
はい。しかし、どちらの場合でも、dovecot エラーが発生します。
答え1
私するすでに終わっている質問を復活させるのは嫌ですが、これが「dovecot pam 認証失敗 ldap」の検索結果のトップなので、少しだけ追加情報を付け加えておきます。
私がテストでshadowAccount
属性を更新するのを見たのはpasswd
、LDAP でユーザーのパスワードを変更するコマンドだけです... 他のほとんどのツールはクラスとその属性をあまり気にせず、それらに触れません。 ただし、クラスをユーザーに追加する必要があるshadowAccount
ことだけがわかりました。shadowAccount
ホストにログインする場合それ以来する気にしないでください。電子メール認証(Dovecot)のようなことだけを行う場合、あまり役に立ちません。できたここでは間違っているかもしれませんが、ホスト ログイン以外でshadowAccount
属性を参照するものはまだ見たことがありません。
さて、Dovecot認証をしている場合はを通してPAM を使用している場合 (Dovecot がクエリを実行して変更しているので、おそらくそうだと思いますnsswitch
)、PAM はこれらの追加属性に注意を払いますが、それらを変更するには適切なツールが必要であることを覚えておいてください。つまり、ユーザーのパスワードを変更するものはすべて PAM を経由する必要があります。あまり一般的ではない意見かもしれませんが、ホスト ログインを必要とせず、Dovecot などのサービスだけが必要な場合は、PAM を関与させる必要はありません。PAM は、おそらく無関係な多くのものをチェックするからです。(せいぜい、パスワードの有効期限など、他のことを強制できますが、個人的には、ログイン先のサービスに有効期限がある場合は、そのようなことを強制しません。パスワードを変更する規定がない長期的には、非ホスト/シェルログインサービスが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 によってエラーがスローされなくなります。
これを解決するにはできたをコメントアウトします!include auth-system.conf.ext
が、これにより、システム ユーザー (またはroot
などpostmaster
) が LDAP に設定されていない場合に存在しないとみなされる可能性があります。
私の個人的な解決策は、その行を切り取って、底、 このような:
#!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 がインストール、構成、実行されていないことに関係していました。これを実行したら、エラーはなくなりました。