Я пытаюсь настроить полномочия для репозитория 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/ .
?
Блок
не имеет значения при проверке: он используется только при прямом доступе http://example.com/demo/project1/sensitive-data, что является причиной, по которой HTTP-запросы приводят к HTTP 401 Unauthorized
и проверка этой конкретной директории требует аутентификации.
Правильный способ настройки авторизации на основе пути - объяснен в документации Subversion:
указывает на файл доступа:
.
...
AuthzSVNAccessFile /etc/subversion/access.conf
...
местонахождение>
Файл доступа определяет, кто может обращаться к определенным файлам и директориям. Основной пример:
[/]
* = r * Каждый должен иметь доступ к репозиторию.
[/demo/project1/sensitive-data] # Обратите внимание, что трейлингового слеша нет.
* = # Никто не должен иметь доступа к чувствительному каталогу.