Apache + SVN + DAV + pwauth + authz = 403
Я поддерживаю группу SVN-репозиториев за Apache2 с mod_svn_dav, и я использую pwauth для аутентификации пользователей (с mod_authnz_external). У меня есть директивы Require для valid-user и группы 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). Я пробовал разные порядки своих директив (например, ставим [/] last), разные форматы имен пользователей (someuser, someuser@system, someuser/system, someuser\system), удаляя настройки репозитория и просто имея [/] rule, устанавливая для правила [/] значение * = rw, даже полностью очищая файл, предоставляя www-данные владение dav_authz, etc, etc и т.д - каждый раз перезапуская Apache между изменениями - каждый раз получая те же 403. Журналы Apache показывают myuser получает доступ к сайту, и ответ 403, журнал ошибок не показывает ничего, кроме перезагрузки моего Apache.
У меня нет идей и мне нужна помощь! Ты можешь?
JS
1 ответ
Некоторые примечания (из главы SVNBook по авторизации на основе путей):
- Ограничения наследуются от родителя к ребенку
- Отсутствие упоминаний пользователя означает "нет доступа"
т.е. вы должны добавлять пользователей только в корнях, где вы переопределяете уровень доступа. Это я, кстати, попробую что-то вроде
[/]
myuser = rw
[RepoTwo:/]
someone = rw
Несвязанный: я предпочитаю для удобочитаемости и управляемости работать с группами внутри разделов AuthzSVNAccessFile, а не с пользователями, даже если группа в какой-то момент является однопользовательской