WebSVN経由でリポジトリアクセスを制限するにはどうすればよいですか?


8

Apache 2.2とWebDAVを介して提供される複数のsubversionリポジトリがあります。それらはすべて中央に配置されており、私はこの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

代わりに、「Permission denied」エラーが再び表示されます。ログファイルのエントリは次のとおりです。

[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に属している可能性のある質問だと思います。

更新(20090603-1740):

この質問に対するコメントの1つに応えて、subversion自体の私のWebDAVセットアップには/ svn / reposという場所が指定されていますが、websvnは/ websvnに設定されています。


あなたのwebsvnはどの相対サーバーURLで実行されますか?現在のセットアップでは、websvnは/ websvnにありますが、リポジトリ自体は/ svnにあります
Sander Rijken

こんにちはkaybenleroll助けてくれますか?stackoverflow.com/questions/13541629/...
Juned

回答:


5

問題はおそらく2つの場所ディレクティブ間の設定の分割に関連していますが、私にはわかりません。

2つの場所(apache configとauthzファイル)で権限を定義するのではなく、authzファイルでそれらを定義するだけです。そのようです:

httpd.conf

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

  Require valid-user
  AuthType Basic
  AuthName "Subversion Repository"
  AuthUserFile /path/to/.htpasswd

  SVNPathAuthz on
  AuthzSVNAccessFile /path/to/svn.authz
</Location>

svn.authz

[groups]
sysadmins = joebloggs jimsmith mickmurphy

# By default, nobody has any permissions
[/]
* = 

# sysadmins get access to the sysadmin repository
[sysadmin:/]
@sysadmins = rw

もちろん、htpasswdファイルにも適切なユーザーが必要です。


これについて私を助けてくれますか?stackoverflow.com/questions/13541629/...
Juned

4

この問題を解決したかどうかはわかりませんが、これは私にとって有効な手順です。

Apacheディレクティブをいじるのを忘れて、代わりにWebSVNのconfig.phpファイルを編集して、次のディレクティブをインクルード/コメント解除します。

$ config-> useAuthenticationFile( '/ path / to / your / authz / file');


いいえ、完全に解決したことはありません。あなたのアイデアを試してみます。:)
kaybenleroll

+1私は同じ問題を抱えていましたが、これで完全に修正されました!ありがとう!
John Virgolino、2011年

2

これは私にとってはうまくいきます。

user1は「/」と「/ project1」を表示できますuser3は「/ project1」のみを表示できます

[グループ]

groupa = user1、user2

groupb = user3、user4

[/]

@groupa = rw

[/ project1]

@groupb = rw


1

私はこれにかなり苦労しました、そして私のために働く唯一の設定は以下です:

Authz file
------
[groups]
group1=user1
group2=user2

#Read and write for everyone defined in some group, others denied
[/]
@group1=rw
@group2=rw
*=

[project1:/]
@group1=rw
*=

[project2:/]
@group2=r
*=
----end authz file

その結果、group1はproject1への読み取りおよび書き込みアクセス権を持ち、group2はproject2への読み取りアクセス権を持ちます。他の誰もがプロジェクトにアクセスすることはできません。

「project1」と「project2」はApache構成ファイルで定義されたリポジトリ内のプロジェクトであることを強調しておきますsubversion.conf

Subversion.conf
----
LoadModule dav_module         modules/mod_dav.so
LoadModule dav_svn_module     modules/mod_dav_svn.so
LoadModule authz_svn_module   modules/mod_authz_svn.so

<Location /svn>
   DAV svn
   SVNParentPath /var/www/svn
   AuthType Basic
   AuthName "Name of the root repositories"
   Require valid-user
</Location>

<Location /svn/repos>
   AuthName "Subversion subrepository"
   AuthUserFile /var/www/svn/repos/conf/passwdfile
#Authz control
   AuthzSVNAccessFile /var/www/svn/repos/conf/authz
</Location>

-----end

私の現在の問題は、リポジトリ/svn/reposにプロジェクトを一覧表示することがまったくできないことです(ただし、適切にアクセスすることはできます)。SVNListParentPathディレクティブに、それをどこに置いても関係ありません。

現在、私/var/www/svnはリポジトリではなく、サーバーファイルシステム内の単なるディレクトリです。/var/www/svn/reposで作成されたリポジトリですsvnadmin create


0

あなたはwebsvn docを読むべきでした、そしてすべてが明白だったでしょう:)

また、AuthzSVNAccessFileコマンドを使用してアクセスファイルを定義しないでください。

認証を定義したので、WebSVNディレクトリにアクセスするためにユーザー名とパスワードの入力を求められます。あとは、Subversionアクセスファイルを使用してアクセスを制御するようにWebSVNを構成するだけです。次の行をconfig.phpファイルに追加します。

$ config-> useAuthenticationFile( '/ path / to / accessfile');

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.