Я настраиваю аутентификацию LDAP для нашего репозитория Subversion, размещенного через Apache в системе RHEL 5. При попытке аутентификации в Active Directory я сталкиваюсь с двумя разными проблемами.
<Location /svn/>
Dav svn
SvnParentPath /srv/subversion
SVNListParentPath On
AuthType Basic
AuthName "Subversion Repository"
AuthBasicProvider ldap
AuthLDAPBindDN "cn=userfoo,ou=Service Accounts,ou=User Accounts,dc=my,dc=example,dc=com"
AuthLDAPBindPassword "mypass"
AuthLDAPUrl "ldap://my.example.com:389/ou=User Accounts,dc=my,dc=example,dc=com?sAMAccountName?sub?(objectClass=user)" NONE
Require valid-user
</Location>
Если я использую вышеуказанную конфигурацию, она постоянно предлагает мне базовую подсказку, и в конечном итоге мне приходится выбирать «Отмена», что возвращает 401 (требуется авторизация). Если я закомментирую части привязки, он вернет 500 (внутренняя ошибка сервера), проверка этой аутентификации не удалась:
[Mon Nov 02 12:00:00 2009] [warn] [client x.x.x.x] [10744] auth_ldap authenticate: user myuser authentication failed; URI /svn [ldap_search_ext_s() for user failed][Operations error]
Когда я выполняю привязку с помощью ldapsearch и filter для простого атрибута, он возвращается правильно:
ldapsearch -h my.example.com -p 389 -D "cn=userfoo,ou=Service Accounts,ou=User Accounts,dc=my,dc=example,dc=com" -b "ou=User Accounts,dc=my,dc=example,dc=com" -w - "&(objectClass=user)(cn=myuser)" sAMAccountName
К сожалению, у меня нет контроля или понимания части AD системы, только сервер RHEL. Кто-нибудь знает, что тут за зависание?
Сравнивая вашу конфигурацию с рабочей конфигурацией с Active Directory в Apache 2.2.3, я вижу только следующие различия:
AuthLDAPBindDN
NONE
после моего AuthLDAPURL
Помимо этих предложений, я бы рекомендовал запустить tcpdump
о разговоре между Apache и Active Directory, чтобы увидеть, что там может происходить.
У меня такая же проблема. Идентичная конфигурация, которую я тестировал на Ubuntu, не работала на RHEL5. В итоге я перешел с порта 389 на 3268 после прочтения этого и это устранило мою проблему.
Оказывается, я был почти у цели. Я просто пропустил AuthzLDAPAuthoritative off
директива, относящаяся к моему экземпляру.
В качестве дополнительного примечания мы также хотели ограничить репо только идентифицированными пользователями, поэтому мы также связали аутентификацию с файлом. Пример ниже:
RedirectMatch ^(/repos)$ $1/
LoadModule dav_svn_module modules/mod_dav_svn.so
LoadModule authz_svn_module modules/mod_authz_svn.so
<Location /repos/>
DAV svn
SVNParentPath /var/svn/repos
SVNListParentPath On
SVNAutoversioning On
AuthType Basic
AuthName "Subversion Repository"
AuthBasicProvider file ldap
AuthzLDAPAuthoritative off
AuthLDAPBindDN "OU=Service Accounts,OU=User Accounts,DC=example,DC=com"
AuthLDAPBindPassword xXxXxXx
AuthLDAPUrl "ldap://ldap.example.com:389/OU=User Accounts,DC=example,DC=com?sAMAccountName?sub?(objectClass=user)"
AuthzSVNAccessFile /etc/svn-authn
SVNIndexXSLT "/styles/svnindexICore.xsl"
AuthUserFile /etc/svn-auth-file
#AuthBasicProvider file ldap
Require valid-user
</Location>
Ваш LDAPUrl делает запрос на создание apache: &(objectClass=user)(sAMAccountName=myuser)
И ваш запрос командной строки: &(objectClass=user)(cn=myuser)
Который правильный? Если вы говорите, что ваш тест командной строки работает нормально, вам, вероятно, понадобятся:
AuthLDAPUrl "ldap://my.example.com:389/ou=User Accounts,dc=my,dc=example,dc=com?cn?sub?(objectClass=user)" NONE
Я не знаю о LDAP, поскольку я использовал SSPI auth для своей настройки. Но я нашел эти страницы с хорошими подробностями о конфигурации LDAP. (На всякий случай, если вы еще не дошли до них):
http://blogs.open.collab.net/svn/2009/03/subversion-with-apache-and-ldap-updated.html
Версия apache, похоже, имеет значение для синтаксиса.
Также порядок, в котором загружаются модули LDAP.