Разрешить SVN анонимный доступ на чтение от localhost

У меня есть SVN-репозиторий, который настроен на использование базовой аутентификации через Apache httpd для ограничения доступа указанным пользователям. Для поддержки сервера непрерывной интеграции (и других служб только для чтения), работающих на том же сервере, я хотел бы разрешить анонимный доступ на чтение с локального хоста.

После некоторых исследований (например, Google) я попробовал следующую конфигурацию Apache:

<Location /svn>
   DAV svn
   SVNParentPath /var/svn

   AuthType Basic
   AuthName "SVN"
   AuthBasicProvider external
   AuthExternal pwauth

   #Only allow specified users to login to SVN
   require user UID1
   require user UID2
   require user UID3

   #Allow anonymous reads from localhost
   <LimitExcept GET PROPFIND OPTIONS REPORT>
      Order allow,deny
      Allow from 127.0.0.1
   </LimitExcept>
</Location>

Когда я пытаюсь сделать анонимную проверку с локального сервера, мне все равно предлагается пароль (в данном случае для пользователя root).

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

Моя первоначальная попытка настроить анонимный доступ для чтения основана на информации на этой странице.

6 ответов

Решение

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

В конечном итоге я создал имя пользователя / пароль для приложения, нуждающегося в аутентификации.

Это не было идеальным решением... но оно должно работать нормально.

  Satisfy Any
  require valid-user

работать на меня приятно (могу оформить заказ, не могу совершить)

редактировать

Мой блок, с соответствующими и не относящимися к делу частями

<Location /svn/>
  DAV svn

  SVNListParentPath on
  SVNParentPath "D:/Repositories/"
  SVNIndexXSLT "/svnindex.xsl"

  SVNPathAuthz short_circuit

  SVNCacheTextDeltas off
  SVNCacheFullTexts off

  AuthName "VisualSVN Server"
  AuthType Basic
  AuthBasicProvider file
  AuthUserFile "D:/Repositories/htpasswd"
  AuthzSVNAccessFile "D:/Repositories/authz"

  Satisfy Any
  require valid-user

  # Add Expires/Cache-Control header explictly
  ExpiresActive on
  ExpiresDefault access
</Location>

если я пропущу Satisfy Any, Я должен подтвердить подлинность любого запроса

Если у вас несколько Requireстроки, что по умолчанию это RequireAny - нужно пройти только одно правило. Итак, вы можете сделать это так

         Require user UID1 UID2 UID3

   #Allow anonymous reads from localhost
   <LimitExcept GET PROPFIND OPTIONS REPORT>
     Require ip 127.0.0.1
   </LimitExcept>

Я не думаю, что это сработает, директива require user активна для всего блока местоположения.

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

создайте второй каталог с именем svn-localhost, отобразите там свой корневой svn второй раз, когда присутствует только лимитный блок.

Я думаю, что вы после Satisfy Any в нижней части вашего Location блок, который разрешает доступ, если любой из Allow а также Require Директивы совпадают (в отличие от значения по умолчанию, которое требует их соответствия).

Документация здесь.

Даже я не смог решить проблему анонимного доступа.

Но вместо того, чтобы создать нового пользователя только для чтения, я получил интеграцию (с Redmine) для работы, используя файловый URL. Поэтому вместо ссылки на URL-адрес http (который требует аутентификации) я использую файл:///. Это не требует аутентификации.

Другие вопросы по тегам