web-dev-qa-db-ja.com

Apache 2.4 +認証/匿名アクセスが混在するSVN authz認証

私は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を使用し続けます。

7
antiduh

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>
3
antiduh

次のような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による認証も許可しています)

0
David Gardner

ほとんどの場合、Satisfy Allと同等の2.4はRequireディレクティブを <RequireAll> ブロックで囲むことです。 Satisfy Anyに相当するものは、<RequireAny>ブロックです。

変更点と同等の機能の詳細については、リッチボーエンによる このプレゼンテーション(PDF) が役立つかもしれません。

0
Moshe Katz