1

注: 私は最初にserverfault.comでこの質問をしましたが、これまでに 1 つの応答しか得られませんでした。考えれば考えるほど、stackoverflow の方がおそらく優れていることに気づきます。

Apache 2.2 と WebDAV を介して提供される複数のサブバージョン リポジトリがあります。それらはすべて中央の場所にあり、このdebian-administration.orgの記事をベースとして使用しました (ただし、単純な htpasswd ファイルのデータベース認証の使用はやめました)。

それ以来、私もWebSVNを使い始めました。私の問題は、システム上のすべてのユーザーがさまざまなリポジトリにアクセスできるわけではないことです.WebSVNのデフォルト設定は、認証できる人なら誰でも許可することです.

WebSVN のドキュメントによると、これを回避する最善の方法は Subversion のパス アクセス システムを使用することなので、AuthzSVNAccessFile ディレクティブを使用してこれを作成しようとしました。

ただし、これを行うと、「403 Forbidden」メッセージが表示され続けます。

私のファイルは次のようになります。

ファイルにデフォルトのポリシー設定があります。

<Location /svn/>
  DAV svn
  SVNParentPath  /var/lib/svn/repository

  Order deny,allow
  Deny from all
</Location>

各リポジトリは、以下のようなポリシー ファイルを取得します。

<Location /svn/sysadmin/>
    Include  /var/lib/svn/conf/default_auth.conf
    AuthName "Repository for sysadmin"
    require user joebloggs jimsmith mickmurphy
</Location>

default_auth.conf ファイルには次の内容が含まれています。

SVNParentPath      /var/lib/svn/repository
AuthType           basic
AuthUserFile       /var/lib/svn/conf/.dav_svn.passwd
AuthzSVNAccessFile /var/lib/svn/conf/svnaccess.conf

default_auth.conf に 2 番目の SVNParentPath が必要な理由はよくわかりませんが、AuthzSVNAccessFile ディレクティブを追加した結果としてエラー メッセージが表示されたので、今日追加しました。

完全に許可されたアクセス ファイルを使用

[/]
joebloggs = rw

システムは正常に動作しました (基本的には変更されていませんでした)。

[sysadmin:/]
joebloggs = rw

代わりに、「許可が拒否されました」というエラーが再び表示されます。ログ ファイルのエントリは次のとおりです。

[Thu May 28 10:40:17 2009] [error] [client 89.100.219.180] Access denied: 'joebloggs' GET websvn:/
[Thu May 28 10:40:20 2009] [error] [client 89.100.219.180] Access denied: 'joebloggs' GET svn:/sysadmin

これを機能させるにはどうすればよいですか? apache の設定が間違っていますか、それとも svnaccess.conf ファイルの理解が間違っていますか?

間違った方法で行っている場合は、全体的なアプローチに特にこだわりはありませんので、代替案も自由に提供してください。

更新 (20090528-1600):

この回答を実装しようとしましたが、まだ正しく機能しません。

追加したように、ほとんどの構成が正しいことを知っています

[/]
joebloggs = rw

最初は「joebloggs」がすべて正しいアクセス権を持っています。

ただし、リポジトリ固有にしようとすると、次のようなことを行います

[/]
joebloggs = rw

[sysadmin:/]
mickmurphy = rw

その後、mickmurphy の許可拒否エラー (joebloggs は引き続き動作します) が表示され、以前に発生したエラーと同様のエラーが発生しました。

[Thu May 28 10:40:20 2009] [error] [client 89.100.219.180] Access denied: 'mickmurphy' GET svn:/sysadmin

また、すべてのリポジトリが下にあることを前に説明するのを忘れていました

/var/lib/svn/repository

更新 (20090529-1245):

これを機能させるにはまだ運がありませんが、すべての兆候は、Subversion のパスアクセス制御が適切に機能していないという問題を示しているようです。私の仮定は、リポジトリ構造を正しく認識するように apache または svn を構成していないということです。

これは、「[/]」エントリが完全に機能しているように見えるためです。

また、これは StackOverflow の方が適しているかもしれない質問だと思いますか?

4

2 に答える 2

1

apache の htpasswd ユーティリティ (bin ディレクトリにあります) を使用して、md5 パスワード ファイルを生成できます。

次に、httpd.conf で:

<Location /svn>
     DAV svn
     SVNParentPath "repo path"
     AuthType Basic
     AuthName "Repository"
     AuthUserFile "password file path"
     Require valid-user
     SVNListParentPath on #if you want a repository listing for the whole svn directory
</Location>

これにはユーザー認証が必要であり、(htpasswd からの) パスワード ファイルにあるユーザー名とパスワードの組み合わせのみがアクセスに受け入れられます。

さらに、全員に読み取り専用アクセスを指定することもできますが、次のように (location タグ内で) コミットなどにパスワード ファイルを使用します。

<LimitExcept GET PROPFIND OPTIONS REPORT>
     Require valid-user
</LimitExcept>

必要なものを理解していれば、これでユーザーレベルのアクセスが解決されるはずです。

編集:

言い忘れましたが、パスワード ファイルを使用する場合は、Web 経由でアクセスできないようにしてください (つまり、ファイルが保存されている apache にエイリアスやディレクトリが割り当てられていません)。

于 2009-06-02T15:14:20.460 に答える