Я использую 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) Рич Боуэн может быть полезным.