Я настраиваю интеграцию 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