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ファイルに関する私の理解が間違っていますか?
私がこれを間違った方法で行っている場合、私は私の全体的なアプローチに特定の愛着を持っていないので、代替案も提供してください。
UPDATE(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
UPDATE(20090529-1245):
まだうまくいきませんが、すべての兆候は、Subversionのパスアクセス制御が適切に機能していないという問題を示しているようです。私の想定では、リポジトリ構造を正しく認識するようにApacheまたはsvnを設定していません。
これは、「[/]」エントリが完全に機能しているように見えるためです。
また、これはStackOverflowに属している可能性のある質問だと思います。
UPDATE(20090603-1740):
この質問に対するコメントの1つに応じて、Subversion自体の私のWebDAVセットアップには/ svn /reposの場所が指定されていますが、websvnは/ websvnに設定されています。
問題はおそらく2つの場所ディレクティブ間の設定の分割に関連していますが、私にはわかりません。
2つの場所(Apache構成と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ファイルにも適切なユーザーが必要です。
この問題を解決したかどうかはわかりませんが、これは私にとって有効な手順です。
Apacheディレクティブをいじるのを忘れて、代わりにWebSVNのconfig.phpファイルを編集して、次のディレクティブをインクルード/アンコメントしてください:
$ config-> useAuthenticationFile( '/ path/to/your/authz/file');
これは私にとってはうまくいきます。
user1は「/」と「/ project1」を表示できますuser3は「/ project1」のみを表示できます
[グループ]
groupa = user1、user2
groupb = user3、user4
[/]
@groupa = rw
[/ project1]
@groupb = rw
私はこれにかなり苦労しました、そして私のために働く唯一の設定は以下です:
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
asで定義されたリポジトリ内のプロジェクトであることを強調しておきます。
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
onディレクティブは、どこに配置しても、役に立ちません。
現在、私の/var/www/svn
はリポジトリではなく、サーバーファイルシステム内の単なるディレクトリです。 /var/www/svn/repos
はsvnadmin create
で作成されたリポジトリです
あなたはwebsvn docを読むべきでした、そしてすべてが明白だったでしょう:)
また、AuthzSVNAccessFileコマンドを使用してアクセスファイルを定義しないでください。
認証を定義したので、WebSVNディレクトリにアクセスするためにユーザー名とパスワードの入力を求められます。あとは、Subversionアクセスファイルを使用してアクセスを制御するようにWebSVNを構成するだけです。次の行をconfig.phpファイルに追加します。
$ config-> useAuthenticationFile( '/ path/to/accessfile');