Мы использовали комбинацию Collabnet SVN / Apache на сервере Windows с аутентификацией LDAP, и хотя производительность была невысокой, она работала идеально.
После переключения на новую установку Ubuntu 10 и настройки конфигурации Apache / SVN / LDAP у нас есть доступ HTTPS к нашим репозиториям с использованием аутентификации Active Directory через LDAP.
У нас сейчас очень странная проблема. Всякий раз, когда новый пользователь обращается к репозиторию, наши клиенты SVN (у нас есть несколько в зависимости от инструмента, но в качестве аргументов давайте придерживаться Tortoise SVN) сообщают «Ошибка 500 - Неизвестный ответ». Чтобы обойти это, мы должны войти в репо с помощью веб-браузера и перемещаться «назад», пока он не заработает.
НАПРИМЕР:
https://svn.example.local/SVN/MyRepo/MyModule/
- Ошибка 500 (плохой)https://svn.example.local/SVN/MyRepo/MyModule/
- Ошибка 500 (плохой)https://svn.example.local/SVN/MyRepo/
- Ошибка 500 (плохой)https://svn.example.local/SVN/
- Запрещено 403 (верный)https://svn.example.local/SVN/MyRepo/
- ОК 200 (верный)https://svn.example.local/SVN/MyRepo/MyModule/
- Ошибка 500 (плохой)https://svn.example.local/SVN/MyRepo/MyModule/
- ОК 200 (верный)https://svn.example.local/SVN/MyRepo/MyModule/
- ОК 200 (верный)Кажется, требуется аутентификация по дереву, начиная с svnparentpath
вплоть до необходимого модуля.
Кто-нибудь видел что-нибудь подобное раньше? Есть идеи о том, с чего начать, прежде чем я верну его обратно на сервер SVN Collabnet?
Обновить
Используя Apache2, вот /svn
местоположение из моего httpd.conf:
<Location /svn>
DAV svn
SVNParentPath /var/lib/svn
AuthName "Subversion Repositories"
AuthType Basic
AuthBasicProvider ldap
AuthzLDAPAuthoritative off
AuthLDAPURL "ldap://dc1.domain.local:389/DC=domain,DC=local?sAMAccountName?sub?(objectClass=*)" NONE
AuthLDAPBindDN "domain\apacheaccount"
AuthLDAPBindPassword superawesomepassword
require valid-user
</Location>
Единственные ошибки в /var/logs/apache2/error.log
являются допустимыми ошибками аутентификации из-за того, что я использовал неправильный пароль. в access.log
, строка ошибки 500 выглядит так:
192.168.161.101 - fname.sname [11/May/2010:08:39:08 +1000] "OPTIONS /svn/MyRepo HTTP/1.1" 500 634 "-" "SVN/1.6.6 (r40053) neon/0.28.6"
Я использую установку Debian «Lenny», использую Apache2 / SVN с аутентификацией LDAP через Apache непосредственно в AD, а также размещаю сайт Trac на том же компьютере. Я попробую, но мне нужна дополнительная информация ...
Доступ к SVN - это встроенный модуль через Apache, поэтому первый вопрос, который у меня возник, - запускаете ли вы его как автономный процесс SVN или через Apache (похоже, это Apache, но я просто хочу быть уверенным)? Второй вопрос: вы используете Apache2 или Apache (1.x)? Третий вопрос: используете ли вы аутентификацию LDAP через PAM или через встроенную поддержку Apache?
Просто для справки, вот (очищенная) версия конфигурации для Trac, вместе с настройками LDAP, которые проходят аутентификацию через AD (да, она открыта для всех, потому что Trac имеет свою собственную систему разрешений, которая в моих настройках по умолчанию предназначена только для чтения для аутентифицированных пользователей):
#Rudimentary Apache2 authentication for Active Directory (without group controls)
<Location /trac>
SetHandler mod_python
PythonInterpreter main_interpreter
PythonHandler trac.web.modpython_frontend
PythonOption TracEnvParentDir /srv/trac
PythonDebug on
Order deny,allow
Deny from all
Allow from 10.0.0.0/8
AuthType Basic
AuthName "Trac Projects"
AuthBasicProvider "ldap"
AuthLDAPURL "ldap://enterprise-dc.mycompany.com:3268/DC=localsite,DC=mycompany,DC=com?sAMAccountName?sub?(objectClass=user)"
AuthLDAPBindDN apache-account@local-site.mycompany.com
AuthLDAPBindPassword "supersecretpasswordthatnoonewillguess"
authzldapauthoritative On
require valid-user
# require ldap-group "CN=Users,DC=local-site,DC=mycompany,DC=com"
</Location>
Что еще более важно для ваших целей, используя эту форму аутентификации в качестве шаблона, мы можем получить настройки для /etc/apache2/mods-enabled/dav_svn.conf
, который будет контролировать ваш доступ к SVN:
<Location /svn>
DAV svn
SVNParentPath /srv/svn
SVNAutoversioning on
Order deny,allow
Deny from all
Allow from 10.0.0.0/8
AuthType Basic
AuthName "Subversion Repository"
AuthBasicProvider "ldap"
AuthLDAPURL "ldap://enterprise-dc.mycompany.com:3268/DC=local-site,DC=mycompany,DC=com?sAMAccountName?sub?(objectClass=user)"
AuthLDAPBindDN apache-account@local-site.mycompany.com
AuthLDAPBindPassword "supersecretpasswordthatnoonewillguess"
authzldapauthoritative On
require valid-user
</Location>
Наши рабочие столы имеют довольно жесткий контроль над установкой программ, поэтому меня не так беспокоит, что кто-то (а) установит клиент SVN (б) выяснит точное имя сервера для подключения (в) попадет в репозиторий и все испортит , поэтому безопасность так низка. Тем не менее, после небольшой настройки вы сможете повторно использовать эту схему, задействовав группу AD (обратите внимание на закомментированный мусор в первом примере) и получить гораздо более жесткий контроль над доступом.
Надеюсь, это вам поможет.
Обновление (на основе новой информации)
Я думаю, проблема в том, что вы не авторизуетесь по Глобальному каталогу. Измените номер порта на тот, который есть в моем примере, и обязательно укажите его на Контроллере домена, который находится на уровне «Enterprise», то есть не является членом дочернего домена. Поэтому вместо site.enterprise.com укажите его на enterprise.com с новым номером порта. Обратите внимание, что вам может не потребоваться указывать доменное имя в вашей настройке для имени пользователя, поэтому, если он отказывается аутентифицироваться, обязательно попробуйте его без (см. Пример, который я опубликовал); и используйте также имя учетной записи в стиле электронной почты вместо макета в стиле домена.
Мое подозрение: Глобальный каталог «выравнивает» пространство поиска для пользователей; но, задав стандартный запрос LDAP на дочернем контроллере домена, я думаю, что первоначальный сбой происходит из-за того, что изначально нет «ответа», пока контроллер домена в дочернем домене не закончится и не получит его. При второй попытке ответ кешируется, и у вас все получается.
Я пока не могу публиковать комментарии, но просто вопрос, почему бы не запустить сервер VisualSVN в Windows 2008, установив только Core OS. Я готов поспорить, что платформа установки такая же мала, как Ubuntu, и вы могли бы просто скопировать все дерево каталогов VisualSVN в новый ящик.
Очевидно, это не решает вашу текущую проблему, но просто интересно, задумывались ли вы об этом варианте и каковы были ваши аргументы, чтобы переключить все вместе?