Я поддерживаю группу репозиториев SVN за Apache2 с помощью mod_svn_dav, и я использую pwauth для аутентификации пользователей (с помощью mod_authnz_external). У меня есть директивы Require для действительного пользователя и группы svn. У меня это сработало очень хорошо, но теперь возникла необходимость ввести более детальные разрешения - то есть ограничить доступ к определенным репозиториям только для определенных пользователей. Насколько я понимаю, лучший (самый простой) способ добиться этого - использовать встроенную функцию authz, установив AuthzSVNAccessFile в файл, в котором указано, кто к чему имеет доступ. Это то, что я намеревался сделать. Моя текущая конфигурация сайта выглядит так (с удаленной конфигурацией журнала и т. Д. Для ясности):
<VirtualHost *:81>
<Location />
allow from 127.0.0.1
DAV svn
SVNParentPath /var/svn
SVNListParentPath On
AuthType Basic
AuthName "SVN repository"
AuthBasicProvider external
AuthExternal pwauth
AuthzSVNAccessFile /var/svn/dav_authz
Require valid-user
Require group svn
</Location>
<IfModule mod_authnz_external.c>
AddExternalAuth pwauth /usr/sbin/pwauth
SetExternalAuthMethod pwauth pipe
</IfModule>
</VirtualHost>
Боковое примечание: Да, *: 81 - у меня на самом деле это работает через прокси nginx и svn.mydomain.com через порт 81.
Вот как выглядит dav_authz:
[/]
myuser = rw
* =
[RepoOne:/]
myuser = rw
* =
[RepoTwo:/]
mysuser = rw
someone = rw
* =
Я ожидаю, что это даст "myuser" доступ для чтения / записи ко всему, "кто-то" доступ для чтения / записи только к RepoTwo, а всем остальным вежливо скажут f-off (даже если они являются действующими пользователями и находятся в группе svn ). Это не то, что происходит. Что бы я ни пытался, я не могу получить от сервера ничего, кроме сварливого 403. Это исчезнет, если я откажусь от использования AuthzSVNAccessFile и снова смогу войти в систему как обычно (если пользователь действителен и принадлежит к группе svn). Я пробовал разные порядки моих директив (например, помещая [/] последним), другой формат имен пользователей (someuser, someuser @ system, someuser / system, someuser \ system), удаление конфигураций репо и просто наличие [/] правило, устанавливая для правила [/] значение * = rw, даже полностью очищая файл, передавая www-data право собственности на dav_authz и т.д., и т.д. myuser обращается к сайту, и ответ 403, журнал ошибок не показывает ничего, кроме перезапуска моего Apache.
У меня закончились идеи, мне нужна помощь! Ты можешь?
JS
Некоторые заметки (от Авторизация на основе пути Глава SVNBook):
то есть вам нужно добавлять пользователей только в корни, где вы переопределяете уровень доступа. Так я попробую что-нибудь вроде
[/]
myuser = rw
[RepoTwo:/]
someone = rw
Несвязанный: Я предпочитаю для удобства чтения и управляемости работать группами внутри разделов AuthzSVNAccessFile, а не пользователями, даже если группа в какой-то момент является однопользовательской.