Назад | Перейти на главную страницу

Apache + SVN + DAV + pwauth + authz = 403

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