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

Примечание. Первоначально я задавал этот вопрос на serverfault.com, но пока получил только один ответ, и чем больше я об этом думаю, тем больше понимаю, что, вероятно, он лучше в стеке потока.

У меня есть несколько хранилищ Subversion, которые обслуживаются через Apache 2.2 и WebDAV. Все они расположены в центральном месте, и я использовал эту статью в качестве основы для http://www.debian-administration.org/articles/208 я отказался от использования аутентификации базы данных для простого файла 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):

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

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

Мне также кажется, что это вопрос, который может лучше относиться к Stackru?

2 ответа

Вы можете сгенерировать файлы паролей md5 с помощью утилиты apache htpasswd (находится в каталоге bin).

Затем в вашем httpd.conf:

<Location /svn>
     DAV svn
     SVNParentPath "repo path"
     AuthType Basic
     AuthName "Repository"
     AuthUserFile "password file path"
     Require valid-user
     SVNListParentPath on #if you want a repository listing for the whole svn directory
</Location>

Для этого потребуется аутентификация пользователя, и для доступа будут приняты только комбинации имени пользователя и пароля, расположенные в файле паролей (из htpasswd).

Кроме того, вы также можете указать доступ только для чтения для всех, но использовать файл паролей для фиксации и т. Д. С помощью следующего (в теге location):

<LimitExcept GET PROPFIND OPTIONS REPORT>
     Require valid-user
</LimitExcept>

Если я понимаю, что вам нужно, это должно решить это для доступа на уровне пользователя.

РЕДАКТИРОВАТЬ:

Я забыл упомянуть, что если вы используете файл паролей, убедитесь, что он не доступен через Интернет (то есть, ни псевдоним или каталог не назначаются в Apache, где он хранится).

Вы должны дать всем доступ для чтения к корню. После этого удалите доступ для чтения из определенных репозиториев по мере необходимости. Работа с группами пользователей может помочь сохранить конфигурацию небольшой.

Вы можете попробовать это так:

[/]
* = r

[sysadmin:/]
mickmurphy =
joebloggs = rw
Другие вопросы по тегам