Changes between Version 1 and Version 2 of TracFineGrainedPermissions


Ignore:
Timestamp:
09/18/14 10:48:12 (10 years ago)
Author:
trac
Comment:

--

Legend:

Unmodified
Added
Removed
Modified
  • TracFineGrainedPermissions

    v1 v2  
     1[[PageOutline(2-5, Contents, floated)]] 
    12= 粒度が細かいパーミッション = #Finegrainedpermissions 
    23 
    34Trac 0.11 より前は、リポジトリブラウザ サブシステムだけで「粒度が細かいパーミッション (fine grained permissions)」を定義することができました。 
    45 
    5 0.11 以降、カスタマイズしたパーミッションポリシーのプラグインを各所に使用するための共通のメカニズムが導入されたので、すべての種類の Trac リソースのあらゆるアクションについて、そのリソースの特定バージョンのレベルまで含めて許可/拒否を設定できるようになりました。 
     60.11 以降、カスタマイズした **パーミッションポリシーのプラグイン** を各所に使用するための共通のメカニズムが導入されたので、すべての種類の Trac リソースのあらゆるアクションについて、そのリソースの特定バージョンのレベルまで含めて許可/拒否を設定できるようになりました。 
     7 
     8Note: Trac 0.12 では、 `authz_policy` はオプションモジュールとして実装されました( `tracopt.perm.authz_policy.*` 配下 ) 。したがって、デフォルトでインストールされ、 Trac の管理 Web インタフェースの //プラグイン// パネルで簡単に有効にすることができます。 
     9 
    610 
    711== パーミッションポリシー == #PermissionPolicies 
    812 
     13様々なパーミッションポリシーを実装することができます。 Trac にはいくつかの例を同梱しています。 
     14 
     15現在有効なポリシーは TracIni の中で設定されているコンフィグレーションによって決定します: 
     16 
     17{{{ 
     18[trac] 
     19permission_policies = AuthzSourcePolicy, DefaultPermissionPolicy, LegacyAttachmentPolicy 
     20}}} 
     21このリストの1番目の [#AuthzSourcePolicy] ポリシーについては、下記に記載しています。続く !DefaultPermissionPolicy では、 TracPermissions に記載されている従来型の粒度が粗いパーミッションチェックを行ないます。そして3番目の !LegacyAttachmentPolicy は添付ファイルに対して、粒度の粗いパーミッションチェックを行ないます。 
     22 
     23使用可能なオプションの選択肢として、 Authz 形式のシステムにてとても一般的なパーミッションポリシーを提供する [#AuthzPolicy] があります。 
     24詳細については、 [trac:source:branches/0.12-stable/tracopt/perm/authz_policy.py authz_policy.py] を参照して下さい。 
     25 
     26もう一つの評判のよいパーミッションポリシーである、 [#AuthzSourcePolicy] は pre-0.12 で再実装され、新しいシステムでは、 Subversion のリポジトリに限定して粒度の細かいパーミッション設定をサポートするようになりました。 
     27 
     28その他の例については、 [trac:source:branches/0.12-stable/sample-plugins/permissions sample-plugins/permissions] を参照して下さい。 
     29 
     30 
    931=== !AuthzPolicy === #AuthzPolicy 
    10  
    11 ポリシーの例として、 Authz 形式のシステムを基にしたポリシーが追加されました。詳しくは、 
    12 [http://trac.edgewall.org/browser/trunk/sample-plugins/permissions/authz_policy.py] を参照してください (現在のバージョンは Python 2.4 以降でないと動きません)。 (より多くの例が [http://trac.edgewall.org/browser/trunk/sample-plugins/permissions] にあります。) 
    13  
    14  - [http://www.voidspace.org.uk/python/configobj.html ConfigObj] をインストール (必須) 
    15  - authz_policy.py を plugins ディレクトリにコピーする 
    16  - [http://swapoff.org/files/authzpolicy.conf authzpolicy.conf] ファイルをどこか (できれば、 Web サーバ起動ユーザ以外が読み取りできないセキュアな領域) に置く。 
    17  - `trac.ini` ファイルをアップデートする: 
     32==== 設定方法 ==== #Configuration 
     33* [http://www.voidspace.org.uk/python/configobj.html ConfigObj] をインストールする。(0.12 でも必要) 
     34* authz_policy.py を plugins にコピーする。(Trac 0.11でのみ必要) 
     35* [http://swapoff.org/files/authzpolicy.conf authzpolicy.conf] ファイルを適当な場所 (望ましくは、 Web サーバ起動ユーザ以外が読み取りできないセキュアな領域) に配置する。ファイルに非ASCII文字が含まれる場合は UTF-8 で保存してください。 
     36* `trac.ini` ファイルをアップデートする: 
     37  1. `[trac]` セクションの [TracIni#trac-section permission_policies] を編集する 
    1838{{{ 
    1939[trac] 
    2040... 
    2141permission_policies = AuthzPolicy, DefaultPermissionPolicy, LegacyAttachmentPolicy 
    22  
     42}}} 
     43  1. 新規に `[authz_policy]` セクションを追加する 
     44{{{ 
    2345[authz_policy] 
    2446authz_file = /some/trac/env/conf/authzpolicy.conf 
    25  
     47}}} 
     48  1. [/admin/general/plugin WebAdmin]でプラグインを有効にするか、 `[components]` のセクションを編集する。 
     49{{{ 
    2650[components] 
    2751... 
    28 authz_policy = enabled 
    29 }}} 
    30  
     52# Trac 0.12 
     53tracopt.perm.authz_policy.* = enabled 
     54# for Trac 0.11 use this 
     55#authz_policy.* = enabled 
     56}}} 
     57 
     58 
     59==== 使用方法 ==== #UsageNotes 
    3160パーミッションポリシーを指定する順序はとても重要です。 
    3261ポリシーは設定された順序で評価されます。 
    3362 
    34 個々のポリシーはパーミッションチェックに対して `True`, `False`, `None` を返します。 
    35 戻り値が `None` の場合のみ ''次の'' パーミッションポリシーに問い合わせを行います。 
    36 どのポリシーも明示的にパーミッションを許可しない場合、最終的な結果は `False` になります 
     63個々のポリシーはパーミッションチェックに対して `True`, `False`, `None` を返します。 ポリシーが明示的にパーミッションを許可する場合は、 `True` を返します。明示的に拒否する場合は、 `False` を返します。そして、パーミッションを許可も拒否もできない場合、 `None` が返されます。 
     64 
     65NOTE: 戻り値が `None` の場合のみ、 ''次の'' パーミッションポリシーに問い合わせを行います。 
     66どのポリシーも明示的にパーミッションを許可しない場合、最終的な結果は `False` となります 
    3767(つまり、権限なしとみなされます)。 
     68 
     69`authzpolicy.conf` は `.ini` スタイルの設定ファイルです: 
     70{{{ 
     71[wiki:PrivatePage@*] 
     72john = WIKI_VIEW, !WIKI_MODIFY 
     73jack = WIKI_VIEW 
     74* = 
     75}}} 
     76* config ファイルの各セクションは Trac のリソース記述子との照合に用いる 
     77  グローバルなパターンです。記述子は以下のような形式です: 
     78{{{ 
     79<realm>:<id>@<version>[/<realm>:<id>@<version> ...] 
     80}}} 
     81  リソースを親から子の順に、左から右へ記述します。不特定な 
     82  コンポーネントがある場合は、 `*` で置き換えられます。バージョンのパターンが 
     83  明示的に記されていなければ、すべてのバージョン (`@*`) が暗黙的に追加されます。 
     84 
     85  例: WikiStart ページを照合する 
     86{{{ 
     87[wiki:*] 
     88[wiki:WikiStart*] 
     89[wiki:WikiStart@*] 
     90[wiki:WikiStart] 
     91}}} 
     92 
     93  例: WikiStart の 添付ファイル `wiki:WikiStart@117/attachment/FOO.JPG@*` 
     94  を照合する 
     95{{{ 
     96[wiki:*] 
     97[wiki:WikiStart*] 
     98[wiki:WikiStart@*] 
     99[wiki:WikiStart@*/attachment/*] 
     100[wiki:WikiStart@117/attachment/FOO.JPG] 
     101}}} 
     102 
     103* セクションは設定ファイルに書かれている '''順に''' 現在の Trac のリソース記述子に対して 
     104  チェックされます。'''順番は重要です'''。 
     105 
     106* 一度 セッションにマッチすれば、'''順に''' 現在のユーザ名がセッションの 
     107  キー (ユーザ名) と照合されます。 
     108  * キー (ユーザ名) の前に `@` を付けると、グループとして処理されます。 
     109  * 値 (パーミッション) の前に `!` を付けると、そのパーミッションは 
     110    拒否されます。 
     111 
     112  通常の Trac パーミッションのルールを適用していれば、ユーザ名は、 'anonymous', 'authenticated', <username>  '*' 等とマッチするはずです。 || '''Note:''' ユーザによって作成された (例えば、ブラウザ上から //管理 / 権限// (英語版では //Admin / Permissions//) の '権限グループの追加' (英語版では 'adding subjects to groups')) グループには使えません。詳細については [trac:ticket:5648 #5648] を参照してください。 || 
    38113 
    39114例えば、 `authz_file` が次の内容を含み: 
     
    44119[wiki:PrivatePage@*] 
    45120john = WIKI_VIEW 
    46 * = 
     121* = !WIKI_VIEW 
    47122}}} 
    48123デフォルトパーミッションが次のような内容の場合: 
     
    53128}}} 
    54129 
    55 パーミッションは以下の通りとなります: 
    56  - WikiStart の全てのバージョンは、 (匿名ユーザも含む) 全員が閲覧できます。 
    57  - !PrivatePage は john が表示可能です。 
    58  - 他のページは john と jack が表示可能です。 
    59  
    60  
    61 === mod_authz_svn ライクなパーミッションポリシー === #mod_authz_svn-likepermissionpolicy 
    62  
    63 この文書が書かれている時点では、 Trac 0.10 以前にリポジトリへの厳密なアクセス制御に使用されていた、古い「粒度が細かいパーミッション」システムは、まだパーミッションポリシーのコンポーネントにコンバートされていません。しかし、ユーザの視点では、実現できる機能に大きな違いはありません。 
     130結果: 
     131  * WikiStart の全てのバージョンは、 (匿名ユーザも含む) 全員が閲覧できます。 
     132  * !PrivatePage は john が表示可能です。 
     133  * 他のページは john と jack が表示可能です。 
     134 
     135Groups: 
     136{{{ 
     137[groups] 
     138admins = john, jack 
     139devs = alice, bob 
     140 
     141[wiki:Dev@*] 
     142@admins = TRAC_ADMIN 
     143@devs = WIKI_VIEW 
     144* = 
     145 
     146[*] 
     147@admins = TRAC_ADMIN 
     148* = 
     149}}} 
     150 
     151結果: 
     152- すべてのアクセスがブロックされます (ホワイトリストアプローチ)。しかし 
     153- admins グループはすべてにおいて TRAC_ADMIN 権限を取得しており、 
     154- devs グループは Wiki ページを閲覧可能です。 
     155 
     156リポジトリの例 (閲覧ソースの詳細設定): 
     157{{{ 
     158# 単一のリポジトリ: 
     159[repository:test_repo@*] 
     160john = BROWSER_VIEW, FILE_VIEW 
     161# John は test_repo に対して BROWSER_VIEW と FILE_VIEW の権限を持つ 
     162 
     163# すべてのリポジトリ: 
     164[repository:*@*] 
     165john = BROWSER_VIEW, FILE_VIEW 
     166# John はすべてのリポジトリに対して BROWSER_VIEW と FILE_VIEW の権限を持つ 
     167}}} 
     168 
     169より詳細なリポジトリのアクセス許可: 
     170{{{ 
     171# John は  trunk/src/some/location/ へアクセスする場合のみ、BROWSER_VIEW と FILE_VIEW の権限を持つ 
     172[repository:test_repo@*/source:trunk/src/some/location/*@*] 
     173john = BROWSER_VIEW, FILE_VIEW 
     174 
     175 
     176# John は trunk/src/some/location のリビジョン 1 へアクセスする場合のみ、BROWSER_VIEW と FILE_VIEW の権限を持つ 
     177[repository:test_repo@*/source:trunk/src/some/location/*@1] 
     178john = BROWSER_VIEW, FILE_VIEW 
     179 
     180 
     181# John は trunk/src/some/location の 'somefile' へアクセスする場合のみ、BROWSER_VIEW と FILE_VIEW の権限を持つ 
     182[repository:test_repo@*/source:trunk/src/some/location/somefile@*] 
     183john = BROWSER_VIEW, FILE_VIEW 
     184 
     185 
     186# John は trunk/src/some/location のリビジョン 1 の 'somefile' へアクセスする場合のみ、BROWSER_VIEW と FILE_VIEW の権限を持つ 
     187[repository:test_repo@*/source:trunk/src/some/location/somefile@1] 
     188john = BROWSER_VIEW, FILE_VIEW 
     189}}} 
     190 
     191Note: Timeline での通知を John に表示するためには、上記パーミッションリストに CHANGESET_VIEW を追加する必要があります。 
     192 
     193 
     194==== 備わっていない機能 ==== #MissingFeatures 
     195粒度が細かいパーミッションでは!DefaultPermissionPolicyで行っていたような (管理画面での) グループ機能は備わっていません ([trac:ticket:9573 #9573], [trac:ticket:5648 #5648] 参照)。パッチは一部利用可能です( [trac:ticket:6680 #6680] にある authz_policy.2.patch を参照してください) 
     196 
     197利用不可となる機能: 
     198{{{ 
     199[groups] 
     200team1 = a, b, c 
     201team2 = d, e, f 
     202team3 = g, h, i 
     203departmentA = team1, team2 
     204}}} 
     205 
     206パーミッショングループも同様にサポートされていません。利用不可となる機能: 
     207{{{ 
     208[groups] 
     209permission_level_1 = WIKI_VIEW, TICKET_VIEW 
     210permission_level_2  = permission_level_1, WIKI_MODIFY, TICKET_MODIFY 
     211[*] 
     212@team1 = permission_level_1 
     213@team2 = permission_level_2 
     214@team3 = permission_level_2, TICKET_CREATE 
     215}}} 
     216 
     217=== !AuthzSourcePolicy  (mod_authz_svn のようなパーミッションポリシー) === #AuthzSourcePolicy 
     218 
     219この文書が書かれている時点では、 Trac 0.11 以前にリポジトリへの厳密なアクセス制御に使用されていた、古い「粒度が細かいパーミッション」システムは、パーミッションポリシーのコンポーネントにコンバートされました。しかし、ユーザの視点では、実現できる機能に大きな違いはありません。 
    64220 
    65221「粒度が細かいパーミッション」の制御に定義ファイルを必要とします。この定義ファイルは Subversion の mod_authz_svn で使用しているものを使います。 
    66 このファイルの形式と Subversion での用法に関する情報は [http://svnbook.red-bean.com/svnbook/book.html#svn-ch-6-sect-4.4.2 Subversion Book (ディレクトリごとのアクセス制御)] を参照してください。 
     222このファイルの形式と Subversion での用法に関する情報は、 svn book の Server Configuration (サーバ設定) の章にある [http://svnbook.red-bean.com/en/1.5/svn.serverconfig.pathbasedauthz.html Path-Based Authorization (ディレクトリごとのアクセス制御)] の項を参照してください。 
    67223 
    68224例: 
     
    98254}}} 
    99255 
    100 ''modulename'' には、 `[trac]` セクション中の `repository_dir` に設定したリポジトリと同じものを設定します。 (訳注: Subversion で `SVNParentPath` を使用して複数のリポジトリをホストしている場合のリポジトリ指定方法です。 ''modulename'' は個々のリポジトリを指します。) 
     256''modulename'' には、 `[trac]` セクション中の `repository_dir` に設定したリポジトリと同じものを設定します。例えば `[trac]` セクション内の `repository_dir` に {{{/srv/active/svn/blahblah}}} を設定している場合は次のように設定します: 
     257 
     258{{{ 
     259[trac] 
     260authz_file = /path/to/svnaccessfile 
     261authz_module_name = blahblah 
     262... 
     263repository_dir = /srv/active/svn/blahblah 
     264}}} 
     265 
     266Subversion の Authz ファイル {{{/path/to/svnaccessfile}}} では、 {{{[blahblah:/some/path]}}} のようにエントリを記載します。 
    101267 
    102268'''Note:''' Authz ファイルで使用するユーザ名と、 Trac で使用するユーザ名は __同じでなければなりません__。 
     269 
     2700.12 では、 trac.ini の permission_policies に ''!AuthzSourcePolicy'' を必ず含めて下さい。さもないと、 authz のパーミッションファイルは無視されます。 
     271 
     272{{{ 
     273[trac] 
     274permission_policies = AuthzSourcePolicy, DefaultPermissionPolicy, LegacyAttachmentPolicy 
     275}}} 
    103276 
    104277==== Subversion の設定 ==== #SubversionConfiguration 
     
    117290複数のプロジェクト Environment において、プロジェクト全体にどのようにアクセス制限を行うかについての情報は [http://trac.edgewall.org/wiki/TracMultipleProjectsSVNAccess] を参照してください。 
    118291 
    119 == TracFineGrainedPermissions を動かすために == #GettingTracFineGrainedPermissionstowork 
    120  
    121 tracd を使用している場合、新しい設定を読み込ませるために、 Trac を再起動するのを忘れないでください。 
     292== デバッグ用パーミッション #DebuggingPermissions 
     293trac.ini の設定: 
     294{{{ 
     295[logging] 
     296log_file = trac.log 
     297log_level = DEBUG 
     298log_type = file 
     299}}} 
     300 
     301ウォッチコマンド: 
     302{{{ 
     303tail -n 0 -f log/trac.log | egrep '\[perm\]|\[authz_policy\]' 
     304}}} 
     305 
     306どんなチェックが行なわれているか見ることができます。より詳細な情報については、プラグインのソースに添付されているドキュメントを参照して下さい。 
     307 
    122308 
    123309---- 
    124 See also: TracPermissions 
    125 http://trac-hacks.org/wiki/FineGrainedPageAuthzEditorPlugin は設定を編集するプラグインです。 
     310See also: TracPermissions, 
     311[http://trac-hacks.org/wiki/FineGrainedPageAuthzEditorPlugin TracHacks:FineGrainedPageAuthzEditorPlugin] は設定を編集するプラグインです。