Назад | Перейти на главную страницу

Subversion: Apache mod_ldap - 30 секунд для первой аутентификации

У меня проблема с установкой моего сервера Subversion с Apache (mod_ldap и mod_authnz_ldap) и моим LDAP-соединением с Microsoft Active Directory. Я использую систему CentOS5 64Bit с Collabnet Subversion EDGE.

Проблема в подключении к моему LDAP, потому что для первой аутентификации требуется ровно 30 секунд.

Вот фрагменты файла журнала.

Первая аутентификация с помощью 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)

Как видите, при использовании URL-адреса ldap и принятой аутентификации временной интервал составляет 30 секунд. Должен ли я перезагружать страницу после первой медленной, но успешной аутентификации, все делается за одну секунду, см. Этот фрагмент файла журнала:

==> /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 секунд, он снова вызывает Active Directory с информацией о пользователе из записи поискового запроса, и после этого пользователь принимается.

Кто-нибудь знает, что происходит?

Я также публикую этот вопрос здесь, но это не проблема подрывной деятельности, это связано с Apache и mod_ldap, поэтому я думаю, что мне не помогут: http://subversion.open.collab.net/ds/viewMessage.do?dsForumId=3&dsMessageId=417998

Для полноты картины вы должны публиковать свои фактические директивы конфигурации mod_authz_ldap, а не только фрагменты журнала. Для меня это звучит как проблема с DNS где-то между Apache и AD, но без дополнительной информации я не могу быть уверен.

Вам следует попробовать выполнить аутентификацию вручную, например, с помощью ldapsearch на машине CentOS и посмотрите, сможете ли вы воспроизвести проблему там. Что-то вроде:

ldapsearch -xLLLZ -D sAMAccountName=myLdapUSer,dc=mycompany,dc=com -W \
 -b dc=mycompany,dc=com -H ldap://10.10.10.11

Похоже, что с DNS что-то не так. 30 секунд может быть таймаутом для некоторых запросов DNS на стороне сервера Apache или LDAP. Я бы перепроверил это!

Учитывая мой опыт работы с «LDAP» Active Directory (и я использую этот термин в общих чертах), это может быть проблемой отсылок.

По умолчанию, когда вы подключаетесь к порту 389 на Контроллере каталогов, помимо обычных ответов LDAP вы получаете от ссылки на "directory.ads.example.com". Большинство клиентов LDAP (включая Apache) следуют по направлениям, и если у вас много контроллеров домена, особенно если они географически распределены, то ваш клиент LDAP может быть отправлен в сеть. Однажды у меня был клиент LDAP в Монреале, Канада, который регулярно отправлялся в один из наших округов Колумбия в Сиднее, Австралия.

Итак, вместо того, чтобы иметь что-то вроде следующего в вашей конфигурации 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, или если ответ LDAP медленный, или если есть какая-то другая задержка, которую вы не ожидали, например, ссылка LDAP, как предлагает DAM.