Subversion権限制御説明

2020-03-31 08:06:00
Troy
962
最後の編集:meilin を選択します 2020-03-31 13:29:06

Subversionを初めて設定する多くの管理者は、考えずにパスベースのアクセス制御を使用することを簡単に選択します。通常、管理者はチームメンバーどのプロジェクトで勤務しているかを知っているので、容易にどのチームどのディレクトリにアクセスできるのか、どのディレクトリにアクセスできないのかを指示できます これは自然なように思われ、バージョンリポジトリへのアクセスを厳密に制御したいという管理者の要望を満たします。

この機能には通常、目に見えない(および目に見える)代価がかかることに注意してください。目に見える場合、もっと多い作業ユーザーがパスの読み取りおよび書き込み権限を持っていることを確信する必要があります。場合によって、非常に大きなパフォーマンス損失になる可能性があります。目に見えない場合、あなたが創建した文化を考慮し、ほとんどの場合、特定のユーザーは特定のディレクトリで修正提出できないため、テクノロジーによって社会契約を強化する必要はありません。チームは時々自然にお互いに協力することができます。一部の人々は、他人に正常に仕事できないディレクトリの内容を提出することにより、他人を助けあなたはコミュニケーションを期待しない障害を設定しましたあなたはプロジェクト開発、新参加など活動の一連ルールを設定する必要があり、また、他にいっぱい追加仕事がまだ多いです。

これはバージョン制御システムであり、たとえ、誰か間違って提出すべきではない内容をコミットした場合でも、簡単にロールバックして変更できます。もしユーザーが意図的に間違った場所にコミットする場合、これは社会的な問題であり、Subversionの外部で対処すべきです。

そのため、ユーザーアクセスの制限を開始する前に、本当に確実にニーズがあるのか、それとも単に管理者にとって「良い」のかを自問する必要があります。 サーバーのスピードに影響を及ぼす価値があるかどうかを判断して、わずかなリスクしかないこと社会的な問題を解決するために技術的な手段に頼ることはよくないことを覚えておく必要があります。 [44]

思考の例として、Subversionプロジェクト自体には、ユーザーがそのディレクトリで送信できる設定がありますが、それは社交方式のみで規定すると考えてください。 これは、特にオープンソースプロジェクトにとって、コミュニティの信頼の良いモデルです。もちろん、オーソドックスなパスベースのアクセス制御が必要になることもあります;たとえば、会社では、データの一部のみが機密情報であり、グループの人だけがアクセスできます。

あなたのサーバーがルールファイルを探そうとするとき、ルールを定義しなければいけないです

ファイルにアクセス構文は、svnserve.confおよび実行コンフィギュレーションファイルに非常に似ています。(#)で始まる行は無視されます。単純な形式では、各セクションはリポジトリと内部のパスに名前を付け、ユーザー認証名各セクションのオプション名です。各オプションの値は、リポジトリへのユーザーのアクセスレベルを示します:r(読み取り専用)またはrw(読み取り/書き込み)ユーザーが言及しない場合、アクセスは許可されません。

具体的のポイント:このセクションの名前は[repos-name:path]または[path]の形式です。もしSVNParentPathディレクティブを使用する場合、リポジトリの名前を指定することが重要です。 もしSVNPathディレクティブを使用する場合、これらを漏れたら、[/some/dir]部分は/some/dirのすべてのリポジトリにマッチングしますしたがって、セクションにパスを定義するだけでよいのです。しょせん、リポジトリは1つだけです。

[calc:/branches/calc/bug-142]

harry = rw

sally = r

最初の例では、ユーザーharryにはcalcリポジトリーの/ branch / calc / bug-142に対する完全な読み取りおよび書き込み権限がありますが、ユーザーsallyには読み取り権限のみがあり、他のユーザーはこのディレクトリにアクセスできません。

もちろん、アクセス制御は親ディレクトリから子ディレクトリに渡されます。つまり、Sallyの子ディレクトリに対して異なるアクセスポリシーを指定できます

[calc:/branches/calc/bug-142]

harry = rw

sally = r

# give sally write access only to the 'testing' subdir

[calc:/branches/calc/bug-142/testing]

sally = rw

現在、Sallyはブランチのtestingサブディレクトリを読み取ることができますが、他の部分は読む権利だけがあります。同時に、Harryはまだブランチ全体に対する完全な読み取りおよび書き込み権限を持っています。

継承ルールを介して誰かのアクセスを明確に拒否することもできます。ユーザー名パラメーターをnullに設定するだけでできます:

[calc:/branches/calc/bug-142]

harry = rw

sally = r

[calc:/branches/calc/bug-142/secret]

harry =

この例では、Harryはbug-142ディレクトリツリーに対する完全な読み取りおよび書き込み権限がありますが、secretサブディレクトリへのアクセス権は一切ありません。

一番詳細なパスがマッチングされるすることを覚えておく必要があります。サーバーは、最初に自分自身にマッチングするディレクトリを検索し、次に親ディレクトリ、次に親ディレクトリの親ディレクトリなどを検索します。この方法を続けると、より具体的なパス制御が継承されたすべてのアクセス制御をカバーします。

デフォルトでは、誰もリポジトリへのアクセス権を持っていないため、もしあなたが空のファイルで開始した、すべてのユーザーにリポジトリルートへの読み取りアクセス権を付与することを希望することを意味します 「すべてのユーザー」を表すには:アスタリスク(*)を使用して実現できます:

[/]

* = r

これは通常の設定です;バージョンリポジトリ名がセクション名に記載されていないことに注意してください。これにより、すべてのリポジトリがすべてのユーザーに読みされやすくなります。すべてのユーザーがリポジトリに対する読み取り権限を持っている場合、特定のユーザーに特定のサブディレクトリへのrw権限を付与できます。

ここで詳しくアスタリスク(*)パラメーターを強調する必要があり:これは匿名ユーザーにマッチングする唯一のモードです。もし匿名ユーザーと認証ユーザーの混合アクセスを許可するようにLocationブロックを設定している場合、すべてのユーザーはApache匿名ユーザーとしてアクセスを開始しますmod_authz_svn *値アクセスパスの定義で検索されます;見つからない場合、Apacheは真実のクライアント認証を要求します。

アクセスファイルでは、Unixの/ etc / groupファイルのように、ユーザーのグループを定義することもできます

 

[groups]

calc-developers = harry, sally, joe

paint-developers = frank, sally, jane

everyone = harry, sally, joe, frank, sally, jane

グループには、ユーザーと同じアクセス権を付与されます、at」(@)プレフィックスで区別されます:

[calc:/projects/calc]

@calc-developers = rw

[paint:/projects/paint]

@paint-developers = rw

jane = r

グループ他のグループを含めることにも定義できます。

[groups]

calc-developers = harry, sally, joe

paint-developers = frank, sally, jane

everyone = @calc-developers, @paint-developers

記事転載:

http://i18n-zh.googlecode.com/svn/www/svnbook-1.4/svn.serverconfig.pathbasedauthz.html

お問い合わせ

株式会社AIoTセンター