私はApache 2.4を使用していますが、mod_access_compatなしで使用したいと思います。
Mod_authz_svnによってアクセス制御が処理され、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-access-control:
# 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
への強い依存関係があるように見えます。私はApache APIモデルに完全に精通していませんが、これは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>
次のようなSVNプロトコルコマンドのサブセットに対して、認証なしで別のLocation
を作成することが可能です。
<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
ルールに従ってアクセスできるようになります。 (この例では、htpasswd
ファイル内のユーザーだけでなく、システムユーザーのPAMによる認証も許可しています)
ほとんどの場合、Satisfy All
と同等の2.4はRequire
ディレクティブを <RequireAll>
ブロックで囲むことです。 Satisfy Any
に相当するものは、<RequireAny>
ブロックです。
変更点と同等の機能の詳細については、リッチボーエンによる このプレゼンテーション(PDF) が役立つかもしれません。