Home | History | Annotate | Download | only in docs
      1 Role Statements
      2 ===============
      3 
      4 role
      5 ----
      6 
      7 Declares a role identifier in the current namespace.
      8 
      9 **Statement definition:**
     10 
     11     (role role_id)
     12 
     13 **Where:**
     14 
     15 <table>
     16 <colgroup>
     17 <col width="25%" />
     18 <col width="75%" />
     19 </colgroup>
     20 <tbody>
     21 <tr class="odd">
     22 <td align="left"><p><code>role</code></p></td>
     23 <td align="left"><p>The <code>role</code> keyword.</p></td>
     24 </tr>
     25 <tr class="even">
     26 <td align="left"><p><code>role_id</code></p></td>
     27 <td align="left"><p>The <code>role</code> identifier.</p></td>
     28 </tr>
     29 </tbody>
     30 </table>
     31 
     32 **Example:**
     33 
     34 This example declares two roles: `object_r` in the global namespace and `unconfined.role`:
     35 
     36     (role object_r)
     37 
     38     (block unconfined
     39         (role role)
     40     )
     41 
     42 roletype
     43 --------
     44 
     45 Authorises a [`role`](cil_role_statements.md#role) to access a [`type`](cil_type_statements.md#type) identifier.
     46 
     47 **Statement definition:**
     48 
     49     (role role_id type_id)
     50 
     51 **Where:**
     52 
     53 <table>
     54 <colgroup>
     55 <col width="25%" />
     56 <col width="75%" />
     57 </colgroup>
     58 <tbody>
     59 <tr class="odd">
     60 <td align="left"><p><code>roletype</code></p></td>
     61 <td align="left"><p>The <code>roletype</code> keyword.</p></td>
     62 </tr>
     63 <tr class="even">
     64 <td align="left"><p><code>role_id</code></p></td>
     65 <td align="left"><p>A single previously declared <code>role</code> or <code>roleattribute</code> identifier.</p></td>
     66 </tr>
     67 <tr class="odd">
     68 <td align="left"><p><code>type_id</code></p></td>
     69 <td align="left"><p>A single previously declared <code>type</code>, <code>typealias</code> or <code>typeattribute</code> identifier.</p></td>
     70 </tr>
     71 </tbody>
     72 </table>
     73 
     74 **Example:**
     75 
     76 This example will declare [`role`](cil_role_statements.md#role) and [`type`](cil_type_statements.md#type) identifiers, then associate them:
     77 
     78     (block unconfined
     79         (role role)
     80         (type process)
     81         (roletype role process)
     82     )
     83 
     84 roleattribute
     85 -------------
     86 
     87 Declares a role attribute identifier in the current namespace. The identifier may have zero or more [`role`](cil_role_statements.md#role) and [`roleattribute`](cil_role_statements.md#roleattribute) identifiers associated to it via the [`typeattributeset`](cil_type_statements.md#typeattributeset) statement.
     88 
     89 **Statement definition:**
     90 
     91     (roleattribute roleattribute_id)
     92 
     93 **Where:**
     94 
     95 <table>
     96 <colgroup>
     97 <col width="25%" />
     98 <col width="75%" />
     99 </colgroup>
    100 <tbody>
    101 <tr class="odd">
    102 <td align="left"><p><code>roleattribute</code></p></td>
    103 <td align="left"><p>The <code>roleattribute</code> keyword.</p></td>
    104 </tr>
    105 <tr class="even">
    106 <td align="left"><p><code>roleattribute_id</code></p></td>
    107 <td align="left"><p>The <code>roleattribute</code> identifier.</p></td>
    108 </tr>
    109 </tbody>
    110 </table>
    111 
    112 **Example:**
    113 
    114 This example will declare a role attribute `roles.role_holder` that will have an empty set:
    115 
    116     (block roles
    117         (roleattribute role_holder)
    118     )
    119 
    120 roleattributeset
    121 ----------------
    122 
    123 Allows the association of one or more previously declared [`role`](cil_role_statements.md#role) identifiers to a [`roleattribute`](cil_role_statements.md#roleattribute) identifier. Expressions may be used to refine the associations as shown in the examples.
    124 
    125 **Statement definition:**
    126 
    127     (roleattributeset roleattribute_id (role_id ... | expr ...))
    128 
    129 **Where:**
    130 
    131 <table>
    132 <colgroup>
    133 <col width="25%" />
    134 <col width="75%" />
    135 </colgroup>
    136 <tbody>
    137 <tr class="odd">
    138 <td align="left"><p><code>roleattributeset</code></p></td>
    139 <td align="left"><p>The <code>roleattributeset</code> keyword.</p></td>
    140 </tr>
    141 <tr class="even">
    142 <td align="left"><p><code>roleattribute_id</code></p></td>
    143 <td align="left"><p>A single previously declared <code>roleattribute</code> identifier.</p></td>
    144 </tr>
    145 <tr class="odd">
    146 <td align="left"><p><code>role_id</code></p></td>
    147 <td align="left"><p>Zero or more previously declared <code>role</code> or <code>roleattribute</code> identifiers.</p>
    148 <p>Note that there must be at least one <code>role_id</code> or <code>expr</code> parameter declared.</p></td>
    149 </tr>
    150 <tr class="even">
    151 <td align="left"><p><code>expr</code></p></td>
    152 <td align="left"><p>Zero or more <code>expr</code>'s, the valid operators and syntax are:</p>
    153 <p><code>    (and (role_id ...) (role_id ...))</code></p>
    154 <p><code>    (or  (role_id ...) (role_id ...))</code></p>
    155 <p><code>    (xor (role_id ...) (role_id ...))</code></p>
    156 <p><code>    (not (role_id ...))</code></p>
    157 <p><code>    (all)</code></p></td>
    158 </tr>
    159 </tbody>
    160 </table>
    161 
    162 **Example:**
    163 
    164 This example will declare three roles and two role attributes, then associate all the roles to them as shown:
    165 
    166     (block roles
    167         (role role_1)
    168         (role role_2)
    169         (role role_3)
    170 
    171         (roleattribute role_holder)
    172         (roleattributeset role_holder (role_1 role_2 role_3))
    173 
    174         (roleattribute role_holder_all)
    175         (roleattributeset role_holder_all (all))
    176     )
    177 
    178 roleallow
    179 ---------
    180 
    181 Authorise the current role to assume a new role.
    182 
    183 Notes:
    184 
    185 -   May require a [`roletransition`](cil_role_statements.md#roletransition) rule to ensure transition to the new role.
    186 
    187 -   This rule is not allowed in [`booleanif`](cil_conditional_statements.md#booleanif) statements.
    188 
    189 **Statement definition:**
    190 
    191     (roleallow current_role_id new_role_id)
    192 
    193 **Where:**
    194 
    195 <table>
    196 <colgroup>
    197 <col width="25%" />
    198 <col width="75%" />
    199 </colgroup>
    200 <tbody>
    201 <tr class="odd">
    202 <td align="left"><p><code>roleallow</code></p></td>
    203 <td align="left"><p>The <code>roleallow</code> keyword.</p></td>
    204 </tr>
    205 <tr class="even">
    206 <td align="left"><p><code>current_role_id</code></p></td>
    207 <td align="left"><p>A single previously declared <code>role</code> or <code>roleattribute</code> identifier.</p></td>
    208 </tr>
    209 <tr class="odd">
    210 <td align="left"><p><code>new_role_id</code></p></td>
    211 <td align="left"><p>A single previously declared <code>role</code> or <code>roleattribute</code> identifier.</p></td>
    212 </tr>
    213 </tbody>
    214 </table>
    215 
    216 **Example:**
    217 
    218 See the [`roletransition`](cil_role_statements.md#roletransition) statement for an example.
    219 
    220 roletransition
    221 --------------
    222 
    223 Specify a role transition from the current role to a new role when computing a context for the target type. The [`class`](cil_class_and_permission_statements.md#class) identifier would normally be `process`, however for kernel versions 2.6.39 with policy version \>= 25 and above, any valid class may be used. Note that a [`roleallow`](cil_role_statements.md#roleallow) rule must be used to authorise the transition.
    224 
    225 **Statement definition:**
    226 
    227     (roletransition current_role_id target_type_id class_id new_role_id)
    228 
    229 **Where:**
    230 
    231 <table>
    232 <colgroup>
    233 <col width="25%" />
    234 <col width="75%" />
    235 </colgroup>
    236 <tbody>
    237 <tr class="odd">
    238 <td align="left"><p><code>roletransition</code></p></td>
    239 <td align="left"><p>The <code>roletransition</code> keyword.</p></td>
    240 </tr>
    241 <tr class="even">
    242 <td align="left"><p><code>current_role_id</code></p></td>
    243 <td align="left"><p>A single previously declared <code>role</code> or <code>roleattribute</code> identifier.</p></td>
    244 </tr>
    245 <tr class="odd">
    246 <td align="left"><p><code>target_type_id</code></p></td>
    247 <td align="left"><p>A single previously declared <code>type</code>, <code>typealias</code> or <code>typeattribute</code> identifier.</p></td>
    248 </tr>
    249 <tr class="even">
    250 <td align="left"><p><code>class_id</code></p></td>
    251 <td align="left"><p>A single previously declared <code>class</code> or <code>classmap</code> identifier.</p></td>
    252 </tr>
    253 <tr class="odd">
    254 <td align="left"><p><code>new_role_id</code></p></td>
    255 <td align="left"><p>A single previously declared <code>role</code> identifier to be set on transition.</p></td>
    256 </tr>
    257 </tbody>
    258 </table>
    259 
    260 **Example:**
    261 
    262 This example will authorise the `unconfined.role` to assume the `msg_filter.role` role, and then transition to that role:
    263 
    264     (block ext_gateway
    265         (type process)
    266         (type exec)
    267 
    268         (roletype msg_filter.role process)
    269         (roleallow unconfined.role msg_filter.role)
    270         (roletransition unconfined.role exec process msg_filter.role)
    271     )
    272 
    273 rolebounds
    274 ----------
    275 
    276 Defines a hierarchical relationship between roles where the child role cannot have more privileges than the parent.
    277 
    278 Notes:
    279 
    280 -   It is not possible to bind the parent role to more than one child role.
    281 
    282 -   While this is added to the binary policy, it is not enforced by the SELinux kernel services.
    283 
    284 **Statement definition:**
    285 
    286     (rolebounds parent_role_id child_role_id)
    287 
    288 **Where:**
    289 
    290 <table>
    291 <colgroup>
    292 <col width="25%" />
    293 <col width="75%" />
    294 </colgroup>
    295 <tbody>
    296 <tr class="odd">
    297 <td align="left"><p><code>rolebounds</code></p></td>
    298 <td align="left"><p>The <code>rolebounds</code> keyword.</p></td>
    299 </tr>
    300 <tr class="even">
    301 <td align="left"><p><code>parent_role_id</code></p></td>
    302 <td align="left"><p>A single previously declared <code>role</code> identifier.</p></td>
    303 </tr>
    304 <tr class="odd">
    305 <td align="left"><p><code>child_role_id</code></p></td>
    306 <td align="left"><p>A single previously declared <code>role</code> identifier.</p></td>
    307 </tr>
    308 </tbody>
    309 </table>
    310 
    311 **Example:**
    312 
    313 In this example the role `test` cannot have greater priviledges than `unconfined.role`:
    314 
    315     (role test)
    316 
    317     (unconfined
    318         (role role)
    319         (rolebounds role .test)
    320     )
    321