Subversion все или ничего доступа к дереву репо
У меня проблемы с настройкой доступа к моим репозиториям Subversion на сервере Linux. Проблема в том, что мне кажется, что я могу получить только структуру "все или ничего". Либо каждый получает доступ на чтение ко всему, либо никто не получает права на чтение или запись к чему-либо.
Настройка:
Репозитории SVN находятся в /www/svn/repoA,repoB,repoC...
Репозитории обслуживаются Apache, где местоположения определены в etc/httpd/conf.d/subversion.conf как:
<Location /svn/repoA>
DAV svn
SVNPath /var/www/svn/repoA
AuthType Basic
AuthName "svn repo"
AuthUserFile /var/www/svn/svn-auth.conf
AuthzSVNAccessFile /var/www/svn/svn-access.conf
Require valid-user
</Location>
<Location /svn/repoB>
DAV svn
SVNPath /var/www/svn/repoB
AuthType Basic
AuthName "svn repo"
AuthUserFile /var/www/svn/svn-auth.conf
AuthzSVNAccessFile /var/www/svn/svn-access.conf
Require valid-user
</Location>
...
svn-access.conf настроен как:
[/]
* =
[/repoA]
* =
userA = rw
[/repoB]
* =
userB = rw
Но проверка URL/svn/repoA, так как userA приводит к Access Forbidded.
Меняя его на
[/]
* =
userA = r
[/repoA]
* =
userA = rw
[/repoB]
* =
userB = rw
дает пользователю доступ на чтение ко ВСЕМ репозиториям (включая repoB), но только доступ на чтение к repoA!
поэтому для того, чтобы userA получил права на чтение и запись в repoB, мне нужно добавить
[/]
userA = rw
который ментален.
Я также пытался изменить
Require valid-user
в
Require user userA
для repoA в subversion.conf, но это только дало мне доступ для чтения.
Мне нужен способ по умолчанию запретить всем доступ к каждому репозиторию, предоставляя доступ на чтение / запись только при явном определении.
Может кто-нибудь сказать мне, что я здесь делаю не так? Я потратил пару часов на тестирование и поиск в Google, но выдался пустой, так что теперь я делаю пост позора.
РЕДАКТИРОВАТЬ
Я выбрал первое решение Шейна и получил следующую рабочую конфигурацию:
/etc/httpd/conf.d/subversion.conf:
<Location /svn>
DAV svn
SVNParentPath /var/www/svn
AuthType Basic
AuthName "Subversion repo"
AuthUserFile /var/svn-auth.conf
Require valid-user
</Location>
/var/svn-access.conf:
[/]
* =
[repoA:/]
* =
userA = rw
[repoB:/]
* =
userB = rw
3 ответа
Общая проблема в ваших проблемах заключается в том, что ваши [/repoA]
а также [/repoB]
разделы ничего не делают, верно? Есть причина для этого.
Пути, которые вы авторизуете, не относятся к местоположению файла доступа authz; они относятся к репозиторию SVN, для которого он управляет контролем доступа.
Так что ваши [/]
раздел? Это дает доступ к обоим /svn/repoA/
а также /svn/repoB/
; он не предоставляет доступ к /svn/
, Точно так же ваш [/repoA]
раздел предоставляет доступ к /svn/repoA/repoA
а также /svn/repoB/repoA
; правило для [/trunk]
предоставит доступ к обоим /svn/repoA/trunk
а также /svn/repoB/trunk
,
Вы установили SVNPath
директивы для каждого из ваших репозиториев, но вы указываете на одни и те же файлы авторизации для каждого - поэтому у каждого репозитория есть идентичные правила доступа. Существует синтаксис для установки разной авторизации для разных репозиториев, но это когда вы используете SVNParentPath
,
Итак, два варианта:
Переключиться на использование
SVNParentPath /var/www/svn
вместо жесткого определения каждого репо в вашей конфигурации Apache и измените свой файл authz, чтобы иметь права на репо:[/] * = userA = r [repoA:/] * = userA = rw [repoB:/] * = userB = rw
Используйте разные файлы authz для каждого репозитория, помня, что пути, для которых предоставляется доступ, относятся к корню репозитория.
Вы смешиваете один проект на структуру репозитория с формой авторизации на основе пути.
Вау. Во-первых, я бы удалил этот svn-auth.conf (и svn-access.conf) из каталога, из которого apache явно обслуживает запросы http. Приходит какой-то злоумышленник и запрашивает этот файл, и он уже понял половину вашей безопасности, не пытаясь попробовать.
https://stackoverflow.com/questions/81361/how-to-setup-access-control-in-svn Этот ответ, кажется, охватывает то, что вы ищете, я думаю.