Как я могу ограничить доступ к репозиторию через WebSVN?


8

У меня есть несколько хранилищ Subversion, которые обслуживаются через Apache 2.2 и WebDAV. Все они расположены в центральном месте, и я использовал эту статью в качестве основы для debian-administration.org (хотя я отказался от использования аутентификации базы данных для простого файла htpasswd).

С тех пор я также начал использовать WebSVN . Моя проблема заключается в том, что не все пользователи в системе должны иметь доступ к различным репозиториям, и настройка WebSVN по умолчанию разрешает всем, кто может проходить аутентификацию.

Согласно документации WebSVN, лучший способ обойти это - использовать систему доступа к путям Subversion, поэтому я попытался создать ее, используя директиву AuthzSVNAccessFile.

Когда я делаю это, я получаю сообщения «403 Forbidden».

Мои файлы выглядят следующим образом:

У меня есть настройки политики по умолчанию в файле:

<Location /svn/>
  DAV svn
  SVNParentPath  /var/lib/svn/repository

  Order deny,allow
  Deny from all
</Location>

Каждый репозиторий получает файл политики, как показано ниже:

<Location /svn/sysadmin/>
    Include  /var/lib/svn/conf/default_auth.conf
    AuthName "Repository for sysadmin"
    require user joebloggs jimsmith mickmurphy
</Location>

Файл default_auth.conf содержит это:

SVNParentPath      /var/lib/svn/repository
AuthType           basic
AuthUserFile       /var/lib/svn/conf/.dav_svn.passwd
AuthzSVNAccessFile /var/lib/svn/conf/svnaccess.conf

Я не совсем уверен, зачем мне нужен второй SVNParentPath в default_auth.conf, но я только добавил это сегодня, когда получал сообщения об ошибках в результате добавления директивы AuthzSVNAccessFile.

С полностью разрешающим файлом доступа

[/]
joebloggs = rw

система работала нормально (и практически не изменилась), но как только я начинаю пытаться добавить какие-либо ограничения, такие как

[sysadmin:/]
joebloggs = rw

вместо этого я снова получаю ошибки «Отказано в доступе». Записи файла журнала:

[Thu May 28 10:40:17 2009] [error] [client 89.100.219.180] Access denied: 'joebloggs' GET websvn:/
[Thu May 28 10:40:20 2009] [error] [client 89.100.219.180] Access denied: 'joebloggs' GET svn:/sysadmin

Что мне нужно сделать, чтобы заставить это работать? Неправильно ли настроены apache или мое понимание файла svnaccess.conf неверно?

Если я поступаю неправильно, у меня нет особой привязанности к моему общему подходу, поэтому не стесняйтесь предлагать альтернативы.

ОБНОВЛЕНИЕ (20090528-1600):

Я попытался реализовать этот ответ , но все еще не могу заставить его работать должным образом.

Я знаю, что большая часть конфигурации правильная, как я добавил

[/]
joebloggs = rw

в начале и «joebloggs» затем имеет весь правильный доступ.

Когда я пытаюсь перейти к репозиторию, делая что-то вроде

[/]
joebloggs = rw

[sysadmin:/]
mickmurphy = rw

затем я получил ошибку отказа в разрешении для mickmurphy (joebloggs все еще работает), с ошибкой, похожей на ту, что я уже имел ранее

[Thu May 28 10:40:20 2009] [error] [client 89.100.219.180] Access denied: 'mickmurphy' GET svn:/sysadmin

Кроме того, я забыл объяснить ранее, что все мои репозитории находятся под

/var/lib/svn/repository

ОБНОВЛЕНИЕ (20090529-1245):

Все еще не повезло заставить это работать, но все признаки, кажется, указывают на проблему с управлением доступом к пути в подрывной деятельности, не работающей должным образом. Я предполагаю, что я не настроил apache или svn для правильного распознавания структуры моего хранилища.

Это потому, что запись '[/]', кажется, работает отлично.

Мне также приходит в голову, что этот вопрос может лучше относиться к StackOverflow?

ОБНОВЛЕНИЕ (20090603-1740):

В ответ на один из комментариев к этому вопросу моей настройке WebDAV для самой Subversion указывается местоположение / svn / repos, но для websvn задано значение / websvn.


На каком относительном URL сервера работает ваш websvn? В моей текущей настройке websvn находится в / websvn, тогда как сам репозиторий находится в / svn
Сандер Рийкен

привет kaybenleroll вы можете мне помочь в этом? stackoverflow.com/questions/13541629/…
июнь

Ответы:


5

Вероятно, проблема связана с разделением конфигурации между двумя директивами определения местоположения, но я не уверен.

Вместо того, чтобы определять разрешения в двух местах (apache config и файл authz), просто определите их в файле authz. Вот так:

httpd.conf

<Location /svn>
  DAV svn
  SVNParentPath /var/lib/svn/repository

  Require valid-user
  AuthType Basic
  AuthName "Subversion Repository"
  AuthUserFile /path/to/.htpasswd

  SVNPathAuthz on
  AuthzSVNAccessFile /path/to/svn.authz
</Location>

svn.authz

[groups]
sysadmins = joebloggs jimsmith mickmurphy

# By default, nobody has any permissions
[/]
* = 

# sysadmins get access to the sysadmin repository
[sysadmin:/]
@sysadmins = rw

Очевидно, вам понадобятся соответствующие пользователи в файле htpasswd.


Вы можете помочь мне в этом? stackoverflow.com/questions/13541629/…
июнь

4

Не знаю, решили ли вы эту проблему или нет, но это процедура, которая работает для меня.

Забудьте возиться с директивами apache, вместо этого отредактируйте файл config.php WebSVN и включите / раскомментируйте следующую директиву:

$ Config-> useAuthenticationFile ( '/ путь / к / вашим / AuthZ / файл');


Нет, никогда полностью не решил. Я попробую твою идею. :)
kaybenleroll

+1 У меня была такая же проблема, и это полностью исправило ее! Спасибо!
Джон Вирголино

2

это работает для меня.

user1 может видеть "/" и "/ project1" user3 может видеть только "/ project1"

[группы]

groupa = user1, user2

groupb = user3, user4

[/]

@groupa = rw

[/ Project1]

@groupb = rw


1

Я боролся с этим довольно много, и единственная конфигурация, которая работает для меня, заключается в следующем:

Authz file
------
[groups]
group1=user1
group2=user2

#Read and write for everyone defined in some group, others denied
[/]
@group1=rw
@group2=rw
*=

[project1:/]
@group1=rw
*=

[project2:/]
@group2=r
*=
----end authz file

В результате group1 получает доступ на чтение и запись к project1, а group2 получает доступ на чтение к project2. Все остальные не имеют доступа к каким-либо проектам.

Я должен подчеркнуть, что «project1» и «project2» - это проекты внутри репозитория, определенного в конфигурационном файле Apache subversion.confкак.

Subversion.conf
----
LoadModule dav_module         modules/mod_dav.so
LoadModule dav_svn_module     modules/mod_dav_svn.so
LoadModule authz_svn_module   modules/mod_authz_svn.so

<Location /svn>
   DAV svn
   SVNParentPath /var/www/svn
   AuthType Basic
   AuthName "Name of the root repositories"
   Require valid-user
</Location>

<Location /svn/repos>
   AuthName "Subversion subrepository"
   AuthUserFile /var/www/svn/repos/conf/passwdfile
#Authz control
   AuthzSVNAccessFile /var/www/svn/repos/conf/authz
</Location>

-----end

Моя текущая проблема заключается в том, что невозможно перечислить проекты в репозитории /svn/reposвообще (хотя к ним можно правильно обращаться). SVNListParentPathНа директиву, независимо от того, где вы ее положили, это не поможет.

В настоящее время я /var/www/svnне являюсь хранилищем, а просто каталогом в файловой системе сервера. /var/www/svn/reposэто хранилище, созданное сsvnadmin create


0

Вы должны были прочитать документ websvn, и все было бы очевидно :)

Также обратите внимание, что вы не должны использовать команду AuthzSVNAccessFile для определения файла доступа.

Теперь, когда вы определили свою аутентификацию, вам будет предложено ввести имя пользователя и пароль для доступа к каталогу WebSVN. Осталось только настроить WebSVN для использования вашего файла доступа Subversion для управления доступом. Добавьте эту строку в ваш файл config.php:

$ Config-> useAuthenticationFile ( '/ путь / к / accessfile');

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.