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

Subversion выдает ошибку 500 до аутентификации в веб-браузере

Мы использовали комбинацию Collabnet SVN / Apache на сервере Windows с аутентификацией LDAP, и хотя производительность была невысокой, она работала идеально.

После переключения на новую установку Ubuntu 10 и настройки конфигурации Apache / SVN / LDAP у нас есть доступ HTTPS к нашим репозиториям с использованием аутентификации Active Directory через LDAP.

У нас сейчас очень странная проблема. Всякий раз, когда новый пользователь обращается к репозиторию, наши клиенты SVN (у нас есть несколько в зависимости от инструмента, но в качестве аргументов давайте придерживаться Tortoise SVN) сообщают «Ошибка 500 - Неизвестный ответ». Чтобы обойти это, мы должны войти в репо с помощью веб-браузера и перемещаться «назад», пока он не заработает.

НАПРИМЕР:

  1. SVN Касса https://svn.example.local/SVN/MyRepo/MyModule/ - Ошибка 500 (плохой)
  2. Веб-просмотр https://svn.example.local/SVN/MyRepo/MyModule/ - Ошибка 500 (плохой)
  3. Веб-просмотр https://svn.example.local/SVN/MyRepo/ - Ошибка 500 (плохой)
  4. Веб-просмотр https://svn.example.local/SVN/ - Запрещено 403 (верный)
  5. Веб-просмотр https://svn.example.local/SVN/MyRepo/ - ОК 200 (верный)
  6. SVN Касса https://svn.example.local/SVN/MyRepo/MyModule/ - Ошибка 500 (плохой)
  7. Веб-просмотр https://svn.example.local/SVN/MyRepo/MyModule/ - ОК 200 (верный)
  8. SVN Касса 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 в новый ящик.

Очевидно, это не решает вашу текущую проблему, но просто интересно, задумывались ли вы об этом варианте и каковы были ваши аргументы, чтобы переключить все вместе?