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

Apache 2.4 + SVN authz-аутентификация со смешанным аутентифицированным / анонимным доступом

Я использую Apache 2.4 и хочу использовать его без mod_access_compat.

Я пытаюсь обслуживать репозитории SVN с контролем доступа, выполняемым mod_authz_svn.

Я хочу, чтобы некоторые репозитории или места в репозиториях имели анонимный доступ только для чтения. Я хочу, чтобы в других репозиториях или местах требовалась базовая аутентификация.

Apache 2.4 больше не поддерживает Satisfy all синтаксис, однако, кажется, что mod_authz_svn этого ожидает. Как это должно быть настроено на Apache 2.4?

Конфигурация Apache:

 <Location /svn>
        DAV svn
        SVNParentPath /usr/projects/svn
        AuthType Basic
        AuthName "SVN repository"
        AuthUserFile /usr/project-config/etc/svn-auth-file
        AuthzSVNAccessFile /usr/project-config/etc/svn-access-control
        Require valid-user
 </Location>

svn-контроль доступа:

# cat etc/svn-access-control
[/]
antiduh = rw

[openprojects:/]
* = r
antiduh = rw

У меня 5 репозиториев, openprojects - единственный, к которому я хочу иметь анонимный доступ только для чтения. Кажется, я не могу заставить это работать. Даже самая последняя документация, которую я смог найти для mod_authz_svn продолжает использовать Satisfy all.

Поковыряясь в исходнике mod_authz_svn, похоже, что он сильно зависит от ap_satisfies(r) == SATISFY_ANY. Я не совсем знаком с моделью API Apache, но, похоже, это означает, что mod_authz_svn в настоящее время не поддерживает новую модель аутентификации Apache 2.4.

Поскольку никто другой не дал ответа или не представил противоположных доказательств, я отмечу это как ответ.

Чтобы это работало под Apache 2.4, загрузите mod_access_compat модуль:

LoadModule access_compat_module libexec/apache24/mod_access_compat.so

А затем добавьте Satisfy any как указано в документации.

 <Location /svn>
    DAV svn
    SVNParentPath /usr/home/antiduh/svn
    AuthType Basic
    AuthName "SVN repository"
    AuthUserFile /usr/home/antiduh/svn/etc/svn-auth-file
    AuthzSVNAccessFile /usr/home/antiduh/svn/etc/svn-access-control
    Satisfy any
    Require valid-user
 </Location>

Возможно создание отдельного Location без аутентификации для подмножества команд протокола SVN, таких как:

<Location /subversion-open>
  DAV                    svn
  SVNParentPath          /path/to/svn-repos/subversion-open
  SVNListParentPath      Off
  SVNReposName           "SVN repos"
  AuthzSVNAccessFile     /path/to/svn-authz-file

  # Limit write permission to list of valid users.
  <LimitExcept GET PROPFIND OPTIONS REPORT>
    AuthType               Basic
    AuthBasicProvider      file PAM
    AuthUserFile           /path/to/svn-htpasswd-file
    AuthPAMService         httpd_svn
    AuthName               "Open access SVN repos"

    Require                valid-user
  </LimitExcept>
</Location>

Это позволяет неаутентифицированным пользователям читать репозитории, а авторизованные пользователи получают доступ в соответствии с svn-authz-file правила. (В этом примере мы также разрешаем аутентификацию через PAM для системных пользователей, а также для пользователей htpasswd файл)

В большинстве случаев 2.4 эквивалент Satisfy All заключить Require директивы в <RequireAll> блок. Эквивалент Satisfy Any будет <RequireAny> блок.

Для получения дополнительной информации об изменениях и эквивалентах, эта презентация (PDF) Рич Боуэн может быть полезным.