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, а не с пользователями, даже если группа в какой-то момент является однопользовательской

Другие вопросы по тегам