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,

Итак, два варианта:

  1. Переключиться на использование SVNParentPath /var/www/svn вместо жесткого определения каждого репо в вашей конфигурации Apache и измените свой файл authz, чтобы иметь права на репо:

    [/]
    * =
    userA = r
    
    [repoA:/]
    * =
    userA = rw
    
    [repoB:/]
    * =
    userB = rw
    
  2. Используйте разные файлы authz для каждого репозитория, помня, что пути, для которых предоставляется доступ, относятся к корню репозитория.

Вы смешиваете один проект на структуру репозитория с формой авторизации на основе пути.

Вау. Во-первых, я бы удалил этот svn-auth.conf (и svn-access.conf) из каталога, из которого apache явно обслуживает запросы http. Приходит какой-то злоумышленник и запрашивает этот файл, и он уже понял половину вашей безопасности, не пытаясь попробовать.

https://stackoverflow.com/questions/81361/how-to-setup-access-control-in-svn Этот ответ, кажется, охватывает то, что вы ищете, я думаю.

Другие вопросы по тегам