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

Интеграция Apache httpd LDAP

Я настраиваю интеграцию CollabNet Subversion. У меня есть следующие collabnet_subversion.conf файл:

<Location /svn>
  DAV svn
  SVNParentPath /mnt/svn/new_repos
  SVNListParentPath on
  AuthName "VegiBanc Source Repository"
  AuthType basic
  AuthzLDAPAuthoritative off
  AuthBasicProvider ldap
  AuthLDAPURL ldap://ldap.vegibanc.com/dc=vegibanc,dc=com?sAMAccountName" NONE
  AuthLDAPBindDN "CN=SVN-Admin,OU=Service Accounts,OU=VegiBanc Users,OU=vegibanc,DC=vegibanc,DC=com"
  AuthLDAPBindPassword "swordfish"
</Location>

Это прекрасно работает. Любой пользователь в нашей Active Directory может получить доступ к нашему репозиторию Subversion.

Теперь я хочу ограничить это только людьми в группе Active Directory. Развитие:

<Location /svn>
  DAV svn
  SVNParentPath /mnt/svn/new_repos
  SVNListParentPath on
  AuthName "VegiBanc Source Repository"
  AuthType basic
  AuthzLDAPAuthoritative off
  AuthBasicProvider ldap
  AuthLDAPURL ldap://ldap.vegibanc.com/dc=vegibanc,dc=com?sAMAccountName" NONE
  AuthLDAPBindDN "CN=SVN-Admin,OU=Service Accounts,OU=VegiBanc Users,OU=VegiBanc,DC=vegibanc,DC=com"
  AuthLDAPBindPassword "swordfish"
  Require ldap-group CN=Development, OU=Security Groups, OU=VegiBanc, dc=vegibanc, dc=com
</Location>

я добавил Require ldap-group, но теперь никто не может войти в систему. У меня LogLevel установлен в debug, но все, что я получаю, это в моем error_log (Отдельная строка разбита для облегчения чтения):

[Thu Oct 11 13:09:28 2012] [info] [client 10.55.9.45] [6752] 
    vauth_ldap authenticate: user dweintraub authentication failed;
    URI /svn/ [ldap_search_ext_s() for user failed][Bad search filter]

И я получаю это в своем access_log:

10.55.9.45 - - [11/Oct/2012:13:09:27 -0500] "GET /svn/ HTTP/1.1" 401 401
10.55.9.45 - dweintraub [11/Oct/2012:13:09:28 -0500] "GET /svn/ HTTP/1.1" 500 535

Да, я в этой группе. (Или, по крайней мере, как я могу подтвердить это, чтобы убедиться, что проблема не в этом. У меня есть SysinternalsSuite ADExplorer. Здесь я получаю всю свою информацию.)

Я отдаю это дафф в любом случае, потому что его ссылки приводят меня к актуальной проблеме. Мне не удалось заставить фильтрацию работать, как предложил daff, но я нашел проблему.

Утверждение, которое привело меня к решению, было:

Поскольку у нас очень похожая установка (но не с AD), я просмотрел нашу конфигурацию и обнаружил, что нельзя использовать Require ldap-group вместе с функциями авторизации Subversion.

Несколько ссылок дафф предложил прокомментировал это и не предложил никакого решения, кроме использования фильтрации, которую я не мог заставить работать.

Я тогда решил посмотреть на http.conf который предоставил Collabnet. И вот что я увидел:

#LoadModule python_module      opt/CollabNet_Subversion/modules/mod_python.so
LoadModule dav_svn_module     opt/CollabNet_Subversion/modules/mod_dav_svn.so
LoadModule authz_svn_module   opt/CollabNet_Subversion/modules/mod_authz_svn.so
#LoadModule dontdothat_module  opt/CollabNet_Subversion/modules/mod_dontdothat.so

Ах! Они загружаются authz_svn_module! Я просто отключил его:

#LoadModule python_module      opt/CollabNet_Subversion/modules/mod_python.so
LoadModule dav_svn_module     opt/CollabNet_Subversion/modules/mod_dav_svn.so
#LoadModule authz_svn_module   opt/CollabNet_Subversion/modules/mod_authz_svn.so
#LoadModule dontdothat_module  opt/CollabNet_Subversion/modules/mod_dontdothat.so

А затем вернулся к моей конфигурации ___original____ в collabnet_subversion.conf:

<Location /svn>
  DAV svn
  SVNParentPath /mnt/svn/new_repos
  SVNListParentPath on
  AuthName "VegiBanc Source Repository"
  AuthType basic
  AuthzLDAPAuthoritative off
  AuthBasicProvider ldap
  AuthLDAPURL ldap://ldap.vegibanc.com/dc=vegibanc,dc=com?sAMAccountName" NONE
  AuthLDAPBindDN "CN=SVN-Admin,OU=Service Accounts,OU=VegiBanc Users,OU=VegiBanc,DC=vegibanc,DC=com"
  AuthLDAPBindPassword "swordfish"
  Require ldap-group CN=Development, OU=Security Groups, OU=VegiBanc, dc=vegibanc, dc=com
</Location>

И теперь это работало как шарм!

Спасибо, дафф, за вашу помощь. Я думаю, что моя проблема с фильтром в том, что мне нужно Require valid-user и я не вставлял это, но теперь это работает.

Вы неправильно указали DN группы, и это видно по сообщению об ошибке. Вероятно, это должно выглядеть так:

Require ldap-group CN=Development,OU=Security Groups,OU=VegiBanc,dc=vegibanc,dc=com

редактировать: Поскольку это не похоже на проблему, убедитесь, что у вас есть

AuthLDAPGroupAttribute member uniquemember
AuthLDAPGroupAttributeIsDN on

set, который, как я полагаю, подходит для вашей среды AD. Это значения по умолчанию в mod_authnz_ldap но это может помочь только установить их явно.

У меня действительно нет других идей, ваша конфигурация выглядит правильной. Мне только интересно, почему у тебя не было Require в исходной конфигурации. Но вы сказали, что он работает, поэтому, возможно, по умолчанию Require valid-user.

Изменить 2: Поскольку у нас очень похожая установка (но не с AD), я просмотрел нашу конфигурацию и обнаружил, что нельзя использовать Require ldap-group вместе с функциями авторизации Subversion. Это описано здесь: https://ctf.open.collab.net/sf/go/artf4917. В нашем случае это не проблема, поскольку мы используем AuthzSVNAccessFile для авторизации. В Require ldap-group кажется, просто вел себя как Require valid-user.

На самом деле это не объясняет мне, почему вы получаете сообщение «Плохой фильтр поиска», но для того, чтобы разрешить доступ только членам вашей группы разработки /svn место вы должны продлить AuthLDAPURL с групповым фильтром и удалите Require ldap-group директива. Поскольку вы используете AD, вы можете использовать memberOf по этим линиям:

AuthLDAPURL ldap://ldap.vegibanc.com/dc=vegibanc,dc=com?sAMAccountName?sub?(&(objectCategory=person)(memberOf=CN=Development,OU=Security Groups,OU=VegiBanc,dc=vegibanc,dc=com)) NONE

Подробнее здесь:

http://subversion.open.collab.net/ds/viewMessage.do?dsForumId=3&dsMessageId=417401

https://ctf.open.collab.net/sf/wiki/do/viewPage/projects.svnedge/wiki/FrequentAskedQuestions#section-FrequentAskedQuestions-HowCanIRestrictLogonToMembersOfAParticularGroup