Разрешить 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 (который требует аутентификации) я использую файл:///. Это не требует аутентификации.