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

Ошибка аутентификации LDAP с 500 или 401 в зависимости от привязки для Apache2

Я настраиваю аутентификацию 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, я вижу только следующие различия:

  • Я использую имя пользователя в стиле "DOMAIN \ sAMAccountName" для своего 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

http://www.novell.com/communities/node/5679/installing-and-configuring-subversion-server-and-apache2-ldap-authentication-against-edire

Версия apache, похоже, имеет значение для синтаксиса.

Также порядок, в котором загружаются модули LDAP.