Changes between Initial Version and Version 1 of TracFineGrainedPermissions


Ignore:
Timestamp:
Apr 10, 2015, 1:03:53 PM (10 years ago)
Author:
trac
Comment:

--

Legend:

Unmodified
Added
Removed
Modified
  • TracFineGrainedPermissions

    v1 v1  
     1[[PageOutline(2-5, Contents, floated)]]
     2= 粒度が細かいパーミッション = #Finegrainedpermissions
     3
     4Trac 0.11 より前は、リポジトリブラウザ サブシステムだけで「粒度が細かいパーミッション (fine grained permissions)」を定義することができました。
     5
     60.11 以降、カスタマイズした **パーミッションポリシーのプラグイン** を各所に使用するための共通のメカニズムが導入されたので、すべての種類の Trac リソースのあらゆるアクションについて、そのリソースの特定バージョンのレベルまで含めて許可/拒否を設定できるようになりました。
     7
     8Note: Trac 0.12 では、 `authz_policy` はオプションモジュールとして実装されました( `tracopt.perm.authz_policy.*` 配下 ) 。したがって、デフォルトでインストールされ、 Trac の管理 Web インタフェースの //プラグイン// パネルで簡単に有効にすることができます。
     9
     10
     11== パーミッションポリシー == #PermissionPolicies
     12
     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
     31=== !AuthzPolicy === #AuthzPolicy
     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] を編集する
     38{{{
     39[trac]
     40...
     41permission_policies = AuthzPolicy, DefaultPermissionPolicy, LegacyAttachmentPolicy
     42}}}
     43  1. 新規に `[authz_policy]` セクションを追加する
     44{{{
     45[authz_policy]
     46authz_file = /some/trac/env/conf/authzpolicy.conf
     47}}}
     48  1. [/admin/general/plugin WebAdmin]でプラグインを有効にするか、 `[components]` のセクションを編集する
     49{{{
     50[components]
     51...
     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
     60パーミッションポリシーを指定する順序はとても重要です。
     61ポリシーは設定された順序で評価されます。
     62
     63個々のポリシーはパーミッションチェックに対して `True`, `False`, `None` を返します。 ポリシーが明示的にパーミッションを許可する場合は、 `True` を返します。明示的に拒否する場合は、 `False` を返します。そして、パーミッションを許可も拒否もできない場合、 `None` が返されます。
     64
     65Note: 戻り値が `None` の場合のみ、 ''次の'' パーミッションポリシーに問い合わせを行います。
     66どのポリシーも明示的にパーミッションを許可しない場合、最終的な結果は `False` となります
     67(つまり、権限なしとみなされます)。
     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:#5648 #5648] を参照してください。 ||
     113
     114例えば、 `authz_file` が次の内容を含み:
     115{{{
     116[wiki:WikiStart@*]
     117* = WIKI_VIEW
     118
     119[wiki:PrivatePage@*]
     120john = WIKI_VIEW
     121* = !WIKI_VIEW
     122}}}
     123デフォルトパーミッションが次のような内容の場合:
     124{{{
     125john           WIKI_VIEW
     126jack           WIKI_VIEW
     127# anonymous に WIKI_VIEW は付与されていない
     128}}}
     129
     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:#9573 #9573], [trac:#5648 #5648] 参照)。パッチは一部利用可能です( [trac:#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 以前にリポジトリへの厳密なアクセス制御に使用されていた、古い「粒度が細かいパーミッション」システムは、パーミッションポリシーのコンポーネントにコンバートされました。しかし、ユーザの視点では、実現できる機能に大きな違いはありません。
     220
     221「粒度が細かいパーミッション」の制御に定義ファイルを必要とします。この定義ファイルは Subversion の mod_authz_svn で使用しているものを使います。
     222このファイルの形式と Subversion での用法に関する情報は、 svn book の Server Configuration (サーバ設定) の章にある [http://svnbook.red-bean.com/en/1.5/svn.serverconfig.pathbasedauthz.html Path-Based Authorization (ディレクトリごとのアクセス制御)] の項を参照してください。
     223
     224例:
     225{{{
     226[/]
     227* = r
     228
     229[/branches/calc/bug-142]
     230harry = rw
     231sally = r
     232
     233[/branches/calc/bug-142/secret]
     234harry =
     235}}}
     236
     237 * '''/''' = ''全員 read アクセスが可能です。これはデフォルトの動作となります''
     238 * '''/branches/calc/bug-142''' = ''harry は read/write アクセス権を持ち、 sally は read アクセス権のみを持ちます''
     239 * '''/branches/calc/bug-142/secret''' = ''harry はアクセス権を持たず、 sally は read アクセス権を持ちます (パーミッションはサブフォルダに継承されます)''
     240
     241==== Trac の設定 ==== #TracConfiguration
     242
     243「粒度が細かいパーミッション」を有効にするには、 trac.ini ファイルの {{{[trac]}}} セクションに {{{authz_file}}} オプションを __設定しなければなりません__ 。オプションが空値に設定されていたり、そもそも指定されていない場合、パーミッションは適用されません。
     244
     245{{{
     246[trac]
     247authz_file = /path/to/svnaccessfile
     248}}}
     249
     250`auth_file` 内でシンタックス `[`''modulename''`:/`''some''`/`''path''`]` を使用する場合、以下の設定を追加してください:
     251
     252{{{
     253authz_module_name = modulename
     254}}}
     255
     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]}}} のようにエントリを記載します。
     267
     268'''Note:''' Authz ファイルで使用するユーザ名と、 Trac で使用するユーザ名は __同じでなければなりません__。
     269
     2700.12 では、 trac.ini の permission_policies に ''!AuthzSourcePolicy'' を必ず含めて下さい。さもないと、 authz のパーミッションファイルは無視されます。
     271
     272{{{
     273[trac]
     274permission_policies = AuthzSourcePolicy, DefaultPermissionPolicy, LegacyAttachmentPolicy
     275}}}
     276
     277==== Subversion の設定 ==== #SubversionConfiguration
     278
     279通常は同じアクセスファイルを対応する Subversion リポジトリに適用します。 Apache のディレクティブには以下のように設定してください:
     280{{{
     281<Location /repos>
     282  DAV svn
     283  SVNParentPath /usr/local/svn
     284
     285  # our access control policy
     286  AuthzSVNAccessFile /path/to/svnaccessfile
     287</Location>
     288}}}
     289
     290複数のプロジェクト Environment において、プロジェクト全体にどのようにアクセス制限を行うかについての情報は [trac:TracMultipleProjectsSVNAccess] を参照してください。
     291
     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
     308
     309----
     310See also: TracPermissions,
     311[http://trac-hacks.org/wiki/FineGrainedPageAuthzEditorPlugin TracHacks:FineGrainedPageAuthzEditorPlugin] は設定を編集するプラグインです。