Как ограничить доступ к репозиторию через 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