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 `AuthzPolicy`, an optional component in `tracopt.perm.authz_policy.*` which is not activated by default. It can be activated via the //Plugins// panel in the Trac administration module. |
| 8 | |
| 9 | See TracPermissions for a more general introduction to Trac permissions and permission policies. |
| 10 | |
| 11 | == Permission Policies |
| 12 | |
| 13 | A great diversity of permission policies can be implemented and Trac comes with a few examples. |
| 14 | |
| 15 | The active policies are determined by a [TracIni#trac-permission_policies-option configuration setting]: |
| 16 | |
| 17 | {{{#!ini |
| 18 | [trac] |
| 19 | permission_policies = DefaultWikiPolicy, |
| 20 | DefaultTicketPolicy, |
| 21 | DefaultPermissionPolicy, |
| 22 | LegacyAttachmentPolicy |
| 23 | }}} |
| 24 | |
| 25 | * [#DefaultWikiPolicyandDefaultTicketPolicy DefaultWikiPolicy] controls readonly access to wiki pages. |
| 26 | * [#DefaultWikiPolicyandDefaultTicketPolicy DefaultTicketPolicy] provides elevated privileges in the ticket system for authenticated users. |
| 27 | * !DefaultPermissionPolicy checks for the traditional coarse-grained permissions described in TracPermissions. |
| 28 | * !LegacyAttachmentPolicy uses the coarse-grained permissions to check permissions on attachments. |
| 29 | |
| 30 | Among the optional choices, there is [#AuthzPolicy], a very generic permission policy, based on an Authz-style system. See |
| 31 | [trac:source:branches/1.4-stable/tracopt/perm/authz_policy.py authz_policy.py] for details. |
| 32 | |
| 33 | 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. |
| 34 | |
| 35 | See also [trac:source:branches/1.4-stable/sample-plugins/permissions sample-plugins/permissions] for more examples. |
| 36 | |
| 37 | === !AuthzPolicy |
| 38 | ==== Configuration |
| 39 | * Put an empty conf file (`authzpolicy.conf`) 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. |
| 40 | * Update your `trac.ini`: |
| 41 | 1. modify the [TracIni#trac-permission_policies-option permission_policies] option in the `[trac]` section: |
| 42 | {{{#!ini |
| 43 | [trac] |
| 44 | permission_policies = AuthzPolicy, DefaultWikiPolicy, DefaultTicketPolicy, DefaultPermissionPolicy, LegacyAttachmentPolicy |
| 45 | }}} |
| 46 | 1. add a new `[authz_policy]` section and point the `authz_file` option to the conf file: |
| 47 | {{{#!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 | | {{{ |
| 55 | }}} |
| 56 | |
| 57 | ==== Usage Notes |
| 58 | |
| 59 | Note the order in which permission policies are specified: policies are implemented in the sequence provided and therefore may override earlier policy specifications. |
| 60 | |
| 61 | 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. |
| 62 | |
| 63 | 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. |
| 64 | |
| 65 | The `authzpolicy.conf` file is a `.ini` style configuration file: |
| 66 | {{{#!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 | | {{{ |
| 90 | [wiki:WikiStart@*/attachment:*] |
| 91 | [wiki:WikiStart@117/attachment:FOO.JPG] |
| 92 | }}} |
| 93 | |
| 94 | * Sections are checked against the current Trac resource descriptor '''IN ORDER''' of appearance in the configuration file. '''ORDER IS CRITICAL'''. |
| 95 | |
| 96 | * Once a section matches, the current username is matched against the keys (usernames) of the section, '''IN ORDER'''. |
| 97 | * If a key (username) is prefixed with a `@`, it is treated as a group. |
| 98 | * If a value (permission) is prefixed with a `!`, the permission is denied rather than granted. |
| 99 | |
| 100 | The username will match any of 'anonymous', 'authenticated', <username> or '*', using normal Trac permission rules. |
| 101 | |
| 102 | || '''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:#5648] for details about this missing feature. || |
| 103 | |
| 104 | For example, if the `authz_file` contains: |
| 105 | {{{#!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] |
| 226 | * '''/''' = ''Everyone has read access by default'' |
| 227 | * '''/branches/calc/bug-142''' = ''harry has read/write access, sally read only'' |
| 228 | * '''/branches/calc/bug-142/secret''' = ''harry has no access, sally has read access (inherited as a sub folder permission)'' |
| 229 | |
| 230 | ==== Trac Configuration |
| 231 | |
| 232 | 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. |
| 233 | |
| 234 | {{{#!ini |
| 235 | [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 | | {{{ |
| 252 | [repositories] |
| 253 | somemodule.dir = /srv/active/svn/somemodule |
| 254 | }}} |
| 255 | |
| 256 | where the svn access file, {{{/path/to/svnaccessfile}}}, contains entries such as {{{[somemodule:/some/path]}}}. |
| 257 | |
| 258 | '''Note:''' Usernames inside the Authz file __must__ be the same as those used inside trac. |
| 259 | |
| 260 | Make sure you have ''!AuthzSourcePolicy'' included in the permission_policies list in trac.ini, otherwise the authz permissions file will be ignored. |
| 261 | |
| 262 | {{{#!ini |
| 263 | [trac] |
| 264 | permission_policies = AuthzSourcePolicy, DefaultWikiPolicy, DefaultTicketPolicy, DefaultPermissionPolicy, LegacyAttachmentPolicy |
| 265 | }}} |
| 266 | |
| 267 | ==== Subversion Configuration |
| 268 | |
| 269 | The same access file is typically applied to the corresponding Subversion repository using an Apache directive like this: |
| 270 | {{{#!apache |
290 | | 複数のプロジェクト Environment において、プロジェクト全体にどのようにアクセス制限を行うかについての情報は [trac:TracMultipleProjectsSVNAccess] を参照してください。 |
291 | | |
292 | | == デバッグ用パーミッション #DebuggingPermissions |
293 | | trac.ini の設定: |
294 | | {{{ |
| 280 | For information about how to restrict access to entire projects in a multiple project environment see [trac:wiki:TracMultipleProjectsSVNAccess]. |
| 281 | |
| 282 | === !DefaultWikiPolicy and !DefaultTicketPolicy |
| 283 | |
| 284 | Since 1.1.2, the read-only attribute of wiki pages is enabled and enforced when `DefaultWikiPolicy` is in the list of active permission policies (`DefaultWikiPolicy` was named `ReadonlyWikiPolicy` from Trac 1.1.2 to 1.3.1). The default for new Trac installations in 1.3.2 and later is: |
| 285 | {{{#!ini |
| 286 | [trac] |
| 287 | permission_policies = DefaultWikiPolicy, |
| 288 | DefaultTicketPolicy, |
| 289 | DefaultPermissionPolicy, |
| 290 | LegacyAttachmentPolicy |
| 291 | }}} |
| 292 | |
| 293 | `DefaultWikiPolicy` 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, which causes the next permission policy in the list to be consulted. |
| 294 | |
| 295 | Since 1.3.2 `DefaultTicketPolicy` implements the following behaviors: |
| 296 | * Authenticated user can edit their own comments. |
| 297 | * Authenticated user with `TICKET_APPEND` or `TICKET_CHGPROP` can modify the description of a ticket they reported. |
| 298 | * User with `MILESTONE_VIEW` can change the ticket milestone. |
| 299 | |
| 300 | The wiki- and ticket-specific behaviors are implemented in permission policies so they can be easily replaced in case other behavior is desired. |
| 301 | |
| 302 | When upgrading from earlier versions of Trac, `DefaultWikiPolicy, DefaultTicketPolicy` will be appended to the list of `permission_policies` when upgrading the environment, provided that `permission_policies` has the default value (`ReadonlyWikiPolicy, DefaultPermissionPolicy, LegacyAttachmentPolicy` if upgrading from Trac 1.1.2 or later). If any non-default `permission_polices` are active, `DefaultWikiPolicy, DefaultTicketPolicy` **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. |
| 303 | |
| 304 | **!DefaultWikiPolicy and !DefaultTicketPolicy 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. Similarly, some of the behaviors implemented in `DefaultTicketPolicy` won't be considered if `DefaultPermissionPolicy` is executed first. |
| 305 | |
| 306 | When active, the [#AuthzPolicy] should therefore come before `DefaultWikiPolicy, DefaultTicketPolicy`, allowing it to grant or deny the actions on individual resources, which is the usual ordering for `AuthzPolicy` in the `permission_policies` list. |
| 307 | {{{#!ini |
| 308 | [trac] |
| 309 | permission_policies = AuthzPolicy, |
| 310 | DefaultWikiPolicy, |
| 311 | DefaultTicketPolicy, |
| 312 | DefaultPermissionPolicy, |
| 313 | LegacyAttachmentPolicy |
| 314 | }}} |
| 315 | |
| 316 | The placement of [#AuthzSourcePolicy] relative to `DefaultWikiPolicy, DefaultTicketPolicy` does not matter since they don't perform checks on the same realms. |
| 317 | |
| 318 | 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 checks performed by `DefaultWikiPolicy` or `DefaultTicketPolicy`, it should come before the policy it overrides. If `DefaultWikiPolicy` or `DefaultTicketPolicy` should override the check performed by another permission policy, as is the case for those policies relative to `DefaultPermissionPolicy`, then the overriding policy should come first. |
| 319 | |
| 320 | == Debugging permissions |
| 321 | In trac.ini set: |
| 322 | {{{#!ini |