Как ограничить доступ к дочернему каталогу SVN только?

Я пытаюсь настроить полномочия для репозитория SVN, к которому получают доступ через Apache 2. То, что я хочу, должно позволить любому получить доступ к корневому каталогу при ограничении аутентифицируемыми пользователями дочернего каталога. Пример:

/demo
/demo/project1
/demo/project1/sensitive-data  # This path should require user authentication.
/demo/project2

Сначала, я думал, что это было столь же просто как:

<Location /demo>
    DAV svn
    SVNPath /home/svn/demo
    AuthType Basic
    AuthName demo
    AuthUserFile /etc/subversion/passwd
    <LimitExcept GET PROPFIND OPTIONS REPORT>
        Require valid-user
    </LimitExcept>
</Location>

<Location /demo/project1/sensitive-data>
    DAV svn
    Require valid-user
</Location>

При использовании через HTTP (например, с ЗАВИХРЕНИЕМ), Apache соответствует конфигурации: Я могу получить доступ:

и я добираюсь, как ожидалось, a HTTP 401 Unauthorized при попытке получить http://example.com/demo/project1/sensitive-data.

С другой стороны, выполнение:

  • svn checkout http://example.com/demo/ . или:
  • svn checkout http://example.com/demo/project1/ .

получает целое дерево каталогов, включая demo/project1/sensitive-data.

По крайней мере, svn checkout http://example.com/demo/project1/sensitive-data/ . запросы на пароль.

Как я должен настроить полномочия ограничить доступ к sensitive-data каталог при выполнении svn checkout http://example.com/demo/ .?

0
задан 8 January 2015 в 02:00
1 ответ

Блок не имеет значения при проверке: он используется только при прямом доступе http://example.com/demo/project1/sensitive-data, что является причиной, по которой HTTP-запросы приводят к HTTP 401 Unauthorized и проверка этой конкретной директории требует аутентификации.

Правильный способ настройки авторизации на основе пути - объяснен в документации Subversion:

  1. указывает на файл доступа:

    .
     ...
     AuthzSVNAccessFile /etc/subversion/access.conf
     ...
    
    
  2. Файл доступа определяет, кто может обращаться к определенным файлам и директориям. Основной пример:

    [/]
    * = r * Каждый должен иметь доступ к репозиторию.
    
    [/demo/project1/sensitive-data] # Обратите внимание, что трейлингового слеша нет.
    * = # Никто не должен иметь доступа к чувствительному каталогу.
    
1
ответ дан 4 December 2019 в 17:05

Теги

Похожие вопросы