Apache(mod_ldapおよびmod_authnz_ldap)を使用したSubversionサーバーのインストールと、Collabnet SubversionEdgeでCentOS564ビットシステムを使用しているMicrosoftActiveDirectoryへのLDAP接続に関して問題があります。
最初の認証には正確に30秒必要なので、問題はLDAPへの接続です。
これがログファイルスニペットです。
myLdapUser
による最初の認証:
==> /opt/csvn/data/logs/error_2012_04_24.log <==
[Tue Apr 24 10:42:00 2012] [debug] mod_authnz_ldap.c(403): [client xx.xx.xx.xx] [3122] auth_ldap authenticate: using URL ldap://10.10.10.11/DC=mycompany,DC=com?sAMAccountName?sub
==> /opt/csvn/data/logs/access_2012_04_24.log <==
xx.xx.xx.xx - myLdapUser [24/Apr/2012:10:42:00 +0200] "GET /svn/ HTTP/1.1" 200 132
==> /opt/csvn/data/logs/error_2012_04_24.log <==
[Tue Apr 24 10:42:30 2012] [debug] mod_authnz_ldap.c(518): [client xx.xx.xx.xx] [3122] auth_ldap authenticate: accepting myLdapUser
[Tue Apr 24 10:42:30 2012] [info] [client xx.xx.xx.xx] Access granted: 'myLdapUser' GET (null)
ご覧のとおり、LDAPURLと承認された認証を使用すると30秒のタイムギャップがあります。最初の遅いが成功した認証の後にページをリロードしますか?すべてが1秒で完了します。次のログファイルスニペットを参照してください。
==> /opt/csvn/data/logs/access_2012_04_24.log <==
xx.xx.xx.xx - myLdapUser [24/Apr/2012:10:42:51 +0200] "GET /svn/ HTTP/1.1" 200 132
==> /opt/csvn/data/logs/error_2012_04_24.log <==
[Tue Apr 24 10:42:51 2012] [debug] mod_authnz_ldap.c(403): [client xx.xx.xx.xx] [3123] auth_ldap authenticate: using URL ldap://10.10.10.11/DC=mycompany,DC=com?sAMAccountName?sub
[Tue Apr 24 10:42:51 2012] [debug] mod_authnz_ldap.c(518): [client xx.xx.xx.xx] [3123] auth_ldap authenticate: accepting myLdapUser
[Tue Apr 24 10:42:51 2012] [info] [client xx.xx.xx.xx] Access granted: 'myLdapUser' GET (null)
LDAPサーバーの概要:最初に正常にバインドされ、次に非常に高速に検索要求を実行し、ユーザー「myLdapUser」の完全な値を含む検索要求エントリを取得します。その後、ユーザーはまだ認証されておらず、30秒後に検索要求エントリのユーザー情報を使用してActiveDirectoryを再度呼び出し、その後、ユーザーが受け入れられます。
誰が何が起こっているのか考えていますか?
私もこの質問をここに投稿しますが、これはSubversionの問題ではなく、Apacheとmod_ldapに関連しているため、そこでは助けが得られないと思います: http://Subversion.open.collab.net/ ds/viewMessage.do?dsForumId = 3&dsMessageId = 417998
完全を期すために、ログスニペットだけでなく、実際のmod_authz_ldap構成ディレクティブを投稿する必要があります。私にとって、これはApacheとADの間のどこかにあるDNSの問題のように聞こえますが、それ以上の情報がなければ、確信が持てません。
CentOSマシンでldapsearch
などを使用して手動で認証を実行し、そこで問題を再現できるかどうかを確認する必要があります。何かのようなもの:
ldapsearch -xLLLZ -D sAMAccountName=myLdapUSer,dc=mycompany,dc=com -W \
-b dc=mycompany,dc=com -H ldap://10.10.10.11
Active Directoryの「LDAP」に関する私の経験を考えると(そして私はこの用語を大まかに使用します)、それは紹介の問題である可能性があります。
デフォルトでは、Directory Controllerのポート389に接続すると、通常のLDAP応答に加えて、「directory.ads.example.com」への参照から取得します。ほとんどのLDAPクライアント(Apacheを含む)は紹介に従います。DCが多数ある場合(特に地理的に分散している場合)、LDAPクライアントをネットワークに送信できます。私はかつてカナダのモントリオールにLDAPクライアントを持っていましたが、オーストラリアのシドニーにあるDCの1つに定期的に行きます。
したがって、Apache構成に次のようなものを含める代わりに:
AuthLDAPURL ldap://mydc1.example.com/dc=example,dc=com?uid?one
これはポート389に移動しますが、必ずグローバルカタログポートを指定してください。
AuthLDAPURL ldap://mydc1.example.com:3268/dc=example,dc=com?uid?one
SSLが必要な場合、それはポート3269です(MSがサービスLDAPを呼び出さないことを本当に望んでいます。それは多くの方法ではなく、混乱を引き起こすだけです)。
P.S.将来的には、設定ファイルの関連部分を投稿する習慣をつけてください(ユーザー名、パスワード、ドメインを難読化してください)。
DNSに問題があるようです。 30秒は、ApacheまたはLDAPサーバー側の一部のDNSクエリのタイムアウトである可能性があります。それを再確認します!
ネットワーク上でパケットスニッフィングを実行して、遅延が発生している場所を確認します。 DNS応答が返されるまでに長い時間がかかるのか、LDAP応答が遅いのか、またはDAMが示唆するLDAP紹介のように、予期しないその他の遅延があるのかを示す必要があります。