Как ограничить доступ только к дочернему каталогу 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 (например, с CURL) Apache соответствует конфигурации: я могу получить доступ к:

и я получаю, как и ожидалось, 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/ .?

1 ответ

Решение

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

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

  1. <Location /demo> указывает на файл доступа:

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

    [/]
    * = r                  # Everyone should be able to access the repository.
    
    [/demo/project1/sensitive-data] # Note that there is no trailing slash.
    * =                    # Nobody should access the sensitive directory.
    
Другие вопросы по тегам