Как ограничить доступ только к дочернему каталогу 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:
<Location /demo>
указывает на файл доступа:<Location /demo> ... AuthzSVNAccessFile /etc/subversion/access.conf ... </Location>
Файл доступа определяет, кто может получить доступ к определенным файлам и каталогам. Основной пример:
[/] * = 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.