2 | | = 粒度が細かいパーミッション = #Finegrainedpermissions |
3 | | |
4 | | Trac 0.11 より前は、リポジトリブラウザ サブシステムだけで「粒度が細かいパーミッション (fine grained permissions)」を定義することができました。 |
5 | | |
6 | | 0.11 以降、カスタマイズした **パーミッションポリシーのプラグイン** を各所に使用するための共通のメカニズムが導入されたので、すべての種類の Trac リソースのあらゆるアクションについて、そのリソースの特定バージョンのレベルまで含めて許可/拒否を設定できるようになりました。 |
7 | | |
8 | | Note: 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] |
19 | | permission_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 | | ... |
41 | | permission_policies = AuthzPolicy, DefaultPermissionPolicy, LegacyAttachmentPolicy |
42 | | }}} |
43 | | 1. 新規に `[authz_policy]` セクションを追加する |
44 | | {{{ |
| 3 | [[TracGuideToc]] |
| 4 | |
| 5 | There is a general mechanism in place that allows custom **permission policies** to grant or deny any action on any Trac resource, or even specific versions of a resource. |
| 6 | |
| 7 | That mechanism is `authz_policy`, which is an optional module in `tracopt.perm.authz_policy.*`, so it is installed by default. It can be activated via the //Plugins// panel in the Trac administration module. |
| 8 | |
| 9 | == Permission Policies |
| 10 | |
| 11 | A great diversity of permission policies can be implemented and Trac comes with a few examples. |
| 12 | |
| 13 | The active policies are determined by a [TracIni#trac-permission_policies-option configuration setting]: |
| 14 | |
| 15 | {{{#!ini |
| 16 | [trac] |
| 17 | permission_policies = ReadonlyWikiPolicy, DefaultPermissionPolicy, LegacyAttachmentPolicy |
| 18 | }}} |
| 19 | |
| 20 | * [#ReadonlyWikiPolicy] controls readonly access to wiki pages. |
| 21 | * !DefaultPermissionPolicy checks for the traditional coarse-grained permissions described in TracPermissions. |
| 22 | * !LegacyAttachmentPolicy uses the coarse-grained permissions to check permissions on attachments. |
| 23 | |
| 24 | Among the optional choices, there is [#AuthzPolicy], a very generic permission policy, based on an Authz-style system. See |
| 25 | [trac:source:branches/1.2-stable/tracopt/perm/authz_policy.py authz_policy.py] for details. |
| 26 | |
| 27 | Another permission policy [#AuthzSourcePolicy], uses the [http://svnbook.red-bean.com/nightly/en/svn.serverconfig.pathbasedauthz.html path-based authorization] defined by Subversion to enforce permissions on the version control system. |
| 28 | |
| 29 | See also [trac:source:branches/1.2-stable/sample-plugins/permissions sample-plugins/permissions] for more examples. |
| 30 | |
| 31 | === !AuthzPolicy |
| 32 | ==== Configuration |
| 33 | * Put a [http://swapoff.org/files/authzpolicy.conf conf] file in a secure location on the server, not readable by users other than the webuser. If the file contains non-ASCII characters, the UTF-8 encoding should be used. |
| 34 | * Update your `trac.ini`: |
| 35 | 1. modify the [TracIni#trac-section permission_policies] entry in the `[trac]` section: |
| 36 | {{{#!ini |
| 37 | [trac] |
| 38 | permission_policies = AuthzPolicy, ReadonlyWikiPolicy, DefaultPermissionPolicy, LegacyAttachmentPolicy |
| 39 | }}} |
| 40 | 1. add a new `[authz_policy]` section and point the `authz_file` option to the conf file: |
| 41 | {{{#!ini |
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 | | |
65 | | Note: 戻り値が `None` の場合のみ、 ''次の'' パーミッションポリシーに問い合わせを行います。 |
66 | | どのポリシーも明示的にパーミッションを許可しない場合、最終的な結果は `False` となります |
67 | | (つまり、権限なしとみなされます)。 |
68 | | |
69 | | `authzpolicy.conf` は `.ini` スタイルの設定ファイルです: |
70 | | {{{ |
| 49 | }}} |
| 50 | |
| 51 | ==== Usage Notes |
| 52 | |
| 53 | Note the order in which permission policies are specified: policies are implemented in the sequence provided and therefore may override earlier policy specifications. |
| 54 | |
| 55 | A policy will return either `True`, `False` or `None` for a given permission check. `True` is returned if the policy explicitly grants the permission. `False` is returned if the policy explicitly denies the permission. `None` is returned if the policy is unable to either grant or deny the permission. |
| 56 | |
| 57 | NOTE: Only if the return value is `None` will the ''next'' permission policy be consulted. If none of the policies explicitly grants the permission, the final result will be `False`, i.e. permission denied. |
| 58 | |
| 59 | The `authzpolicy.conf` file is a `.ini` style configuration file: |
| 60 | {{{#!ini |
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 | | {{{ |
| 84 | [wiki:WikiStart@*/attachment:*] |
| 85 | [wiki:WikiStart@117/attachment:FOO.JPG] |
| 86 | }}} |
| 87 | |
| 88 | * Sections are checked against the current Trac resource descriptor '''IN ORDER''' of appearance in the configuration file. '''ORDER IS CRITICAL'''. |
| 89 | |
| 90 | * Once a section matches, the current username is matched against the keys (usernames) of the section, '''IN ORDER'''. |
| 91 | * If a key (username) is prefixed with a `@`, it is treated as a group. |
| 92 | * If a value (permission) is prefixed with a `!`, the permission is denied rather than granted. |
| 93 | |
| 94 | The username will match any of 'anonymous', 'authenticated', <username> or '*', using normal Trac permission rules. || '''Note:''' Other groups which are created by user (e.g. by 'adding subjects to groups' on web interface page //Admin / Permissions//) cannot be used. See [trac:ticket:5648 #5648] for details about this missing feature. || |
| 95 | |
| 96 | For example, if the `authz_file` contains: |
| 97 | {{{#!ini |
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] |
| 218 | * '''/''' = ''Everyone has read access by default'' |
| 219 | * '''/branches/calc/bug-142''' = ''harry has read/write access, sally read only'' |
| 220 | * '''/branches/calc/bug-142/secret''' = ''harry has no access, sally has read access (inherited as a sub folder permission)'' |
| 221 | |
| 222 | ==== Trac Configuration |
| 223 | |
| 224 | To activate granular permissions you __must__ specify the {{{authz_file}}} option in the `[svn]` section of trac.ini. If this option is set to null or not specified, the permissions will not be used. |
| 225 | |
| 226 | {{{#!ini |
| 227 | [svn] |
263 | | repository_dir = /srv/active/svn/blahblah |
264 | | }}} |
265 | | |
266 | | Subversion の Authz ファイル {{{/path/to/svnaccessfile}}} では、 {{{[blahblah:/some/path]}}} のようにエントリを記載します。 |
267 | | |
268 | | '''Note:''' Authz ファイルで使用するユーザ名と、 Trac で使用するユーザ名は __同じでなければなりません__。 |
269 | | |
270 | | 0.12 では、 trac.ini の permission_policies に ''!AuthzSourcePolicy'' を必ず含めて下さい。さもないと、 authz のパーミッションファイルは無視されます。 |
271 | | |
272 | | {{{ |
273 | | [trac] |
274 | | permission_policies = AuthzSourcePolicy, DefaultPermissionPolicy, LegacyAttachmentPolicy |
275 | | }}} |
276 | | |
277 | | ==== Subversion の設定 ==== #SubversionConfiguration |
278 | | |
279 | | 通常は同じアクセスファイルを対応する Subversion リポジトリに適用します。 Apache のディレクティブには以下のように設定してください: |
280 | | {{{ |
| 244 | [repositories] |
| 245 | somemodule.dir = /srv/active/svn/somemodule |
| 246 | }}} |
| 247 | |
| 248 | where the svn access file, {{{/path/to/svnaccessfile}}}, contains entries such as {{{[somemodule:/some/path]}}}. |
| 249 | |
| 250 | '''Note:''' Usernames inside the Authz file __must__ be the same as those used inside trac. |
| 251 | |
| 252 | As of version 0.12, make sure you have ''!AuthzSourcePolicy'' included in the permission_policies list in trac.ini, otherwise the authz permissions file will be ignored. |
| 253 | |
| 254 | {{{#!ini |
| 255 | [trac] |
| 256 | permission_policies = AuthzSourcePolicy, ReadonlyWikiPolicy, DefaultPermissionPolicy, LegacyAttachmentPolicy |
| 257 | }}} |
| 258 | |
| 259 | ==== Subversion Configuration |
| 260 | |
| 261 | The same access file is typically applied to the corresponding Subversion repository using an Apache directive like this: |
| 262 | {{{#!apache |
| 278 | [trac] |
| 279 | permission_policies = ReadonlyWikiPolicy, |
| 280 | DefaultPermissionPolicy, |
| 281 | LegacyAttachmentPolicy |
| 282 | }}} |
| 283 | |
| 284 | When upgrading from earlier versions of Trac, `ReadonlyWikiPolicy` will be appended to the list of `permission_policies` when upgrading the environment, provided that `permission_policies` has the default value. If any non-default `permission_polices` are active, `ReadonlyWikiPolicy` **will need to be manually added** to the list. A message will be echoed to the console when upgrading the environment, indicating if any action needs to be taken. |
| 285 | |
| 286 | **!ReadonlyWikiPolicy must be listed //before// !DefaultPermissionPolicy**. The latter returns `True` to allow modify, delete or rename actions when the user has the respective `WIKI_*` permission, without consideration for the read-only attribute. |
| 287 | |
| 288 | The `ReadonlyWikiPolicy` returns `False` to deny modify, delete and rename actions on wiki pages when the page has the read-only attribute set and the user does not have `WIKI_ADMIN`, regardless of `WIKI_MODIFY`, `WIKI_DELETE` and `WIKI_RENAME` permissions. It returns `None` for all other cases. |
| 289 | |
| 290 | When active, the [#AuthzPolicy] should therefore come before `ReadonlyWikiPolicy`, allowing it to grant or deny the actions on individual resources, which is the usual ordering for `AuthzPolicy` in the `permission_policies` list. |
| 291 | {{{ |
| 292 | [trac] |
| 293 | permission_policies = AuthzPolicy, |
| 294 | ReadonlyWikiPolicy, |
| 295 | DefaultPermissionPolicy, |
| 296 | LegacyAttachmentPolicy |
| 297 | }}} |
| 298 | |
| 299 | The placement of [#AuthzSourcePolicy] relative to `ReadonlyWikiPolicy` does not matter since they don't perform checks on the same realms. |
| 300 | |
| 301 | For all other permission policies, the user will need to decide the proper ordering. Generally, if the permission policy should be capable of overriding the check performed by `ReadonlyWikiPolicy`, it should come before `ReadonlyWikiPolicy` in the list. If the `ReadonlyWikiPolicy` should override the check performed by another permission policy, as is the case for `DefaultPermissionPolicy`, then `ReadonlyWikiPolicy` should come first. |
| 302 | |
| 303 | == Debugging permissions |
| 304 | In trac.ini set: |
| 305 | {{{#!ini |