Centos 6.5で実行されているSASLを設定して、企業のActive Directoryサーバーに対する認証を許可しようとしています。最終的な目標は、このサーバーで実行されているSubversionリポジトリへのアクセスを認証することですが、この段階では、saslauthdに認証を取得させ、testsaslauthdを使用してテストしています。
認証は毎回ログに次のように失敗します:
saslauthd[20843] :do_auth : auth failure: [user=MYUSER] [service=svn] [realm=MYREALM] [mech=ldap] [reason=Unknown]
saslauthd[20843] :do_request : response: NO
これは私の/etc/saslauthd.confです:
ldap_auth_method: bind
ldap_servers: ldaps://ldap.ad.mycompany.com:3269/
ldap_bind_dn: MYBINDDN
ldap_password: xxxxxxxxxx
ldap_search_base: DC=mycompany,DC=xx
ldap_filter: (&(cn=%u)(objectClass=person))
ldap_referrals: yes
log_level: 10
LDAPサーバーのURI、バインドDN、パスワード、検索ベース、フィルターが正しいことは知っています。これらを使用してWebサイトの認証を実行するPerlスクリプトがあり、正常に動作するためです。 Perlスクリプトは、Net :: LDAPを使用してADにバインドし、検索ベースとフィルターを使用してユーザーを検索してから、ユーザーのDNとパスワードを使用してバインドを試みます。私が理解しているように、これはまさにSASLが私がそれを構成した方法を実行しようとするべきものです。
私の最初の観察は、log_levelを10に設定したにもかかわらず、理由が不明で失敗したことを伝える1行のみを取得することです。 -d(デバッグ)オプションを使用してシェルからsaslauthdを起動しています。より多くのデバッグ出力を取得するには、他に何ができますか?
LDAPインタラクションをログに記録する方法はありますか?
最後に、私の設定で何か間違ったことを見ることができますか?おそらく、SASL構成で特別な設定を必要とするいくつかのADの癖?
結局、私はsaslauthdに適切なデバッグ情報を出力させることができませんでしたが、それが他の誰かに役立つ場合に備えて、問題を解決するために私がたどったプロセスです。
最初に、次のようにstraceを使用してsaslauthdを開始しました。
# strace -f saslauthd -d -a ldap
次に、saslauthdによって行われるすべてのシステムコールを確認できます。おそらくTLSネゴシエーション中に、ADサーバーとの最初の交換中に失敗したように見えました。
Openldapに付属のコマンドラインldapsearchツールを使用して、同様の動作を再現できるかどうかを確認することにしました。私はこのようなコマンドを与えました:
$ ldapsearch -d 9 -H ldaps://ldap.ad.mycompany.com:3269/ -D MYBINDDN -w xxxxxx \
-b DC=mycompany,DC=xx '(&(cn=myuser)(objectClass=person))'
-d 9を使用すると、いくつかの便利なデバッグ出力が得られました。
TLS: certificate [CN=VeriSign Class 3 Public Primary Certification Authority - G5,OU="(c) 2006 VeriSign, Inc. - For authorized use only",OU=VeriSign Trust Network,O="VeriSign, Inc.",C=US] is not valid - error -8179:Peer's Certificate issuer is not recognized..
Ldap.confのmanページを読んで、証明書のバンドルとファイルを指すようにTLS_CACERTまたはTLS_CACERTDIR、あるいはその両方を設定する必要があることがわかりました。/etc/pki/tls/certs /にあるCentos 6を使用しているため、次のように設定します。
TLS_CACERT /etc/pki/tls/certs/ca-bundle.crt
TLS_CACERTDIR /etc/pki/tls/certs/
その後、ldapsearchが機能し、saslauthdを再起動した後、ADサーバーに対する認証が成功しました。