У меня есть несколько хранилищ 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.
источник
Ответы:
Вероятно, проблема связана с разделением конфигурации между двумя директивами определения местоположения, но я не уверен.
Вместо того, чтобы определять разрешения в двух местах (apache config и файл authz), просто определите их в файле authz. Вот так:
httpd.conf
svn.authz
Очевидно, вам понадобятся соответствующие пользователи в файле htpasswd.
источник
Не знаю, решили ли вы эту проблему или нет, но это процедура, которая работает для меня.
Забудьте возиться с директивами apache, вместо этого отредактируйте файл config.php WebSVN и включите / раскомментируйте следующую директиву:
$ Config-> useAuthenticationFile ( '/ путь / к / вашим / AuthZ / файл');
источник
это работает для меня.
user1 может видеть "/" и "/ project1" user3 может видеть только "/ project1"
[группы]
groupa = user1, user2
groupb = user3, user4
[/]
@groupa = rw
[/ Project1]
@groupb = rw
источник
Я боролся с этим довольно много, и единственная конфигурация, которая работает для меня, заключается в следующем:
В результате group1 получает доступ на чтение и запись к project1, а group2 получает доступ на чтение к project2. Все остальные не имеют доступа к каким-либо проектам.
Я должен подчеркнуть, что «project1» и «project2» - это проекты внутри репозитория, определенного в конфигурационном файле Apache
subversion.conf
как.Моя текущая проблема заключается в том, что невозможно перечислить проекты в репозитории
/svn/repos
вообще (хотя к ним можно правильно обращаться).SVNListParentPath
На директиву, независимо от того, где вы ее положили, это не поможет.В настоящее время я
/var/www/svn
не являюсь хранилищем, а просто каталогом в файловой системе сервера./var/www/svn/repos
это хранилище, созданное сsvnadmin create
источник
Вы должны были прочитать документ websvn, и все было бы очевидно :)
источник