16cd6a6acSopenharmony_ciRole Statements
26cd6a6acSopenharmony_ci===============
36cd6a6acSopenharmony_ci
46cd6a6acSopenharmony_cirole
56cd6a6acSopenharmony_ci----
66cd6a6acSopenharmony_ci
76cd6a6acSopenharmony_ciDeclares a role identifier in the current namespace.
86cd6a6acSopenharmony_ci
96cd6a6acSopenharmony_ci**Statement definition:**
106cd6a6acSopenharmony_ci
116cd6a6acSopenharmony_ci```secil
126cd6a6acSopenharmony_ci    (role role_id)
136cd6a6acSopenharmony_ci```
146cd6a6acSopenharmony_ci
156cd6a6acSopenharmony_ci**Where:**
166cd6a6acSopenharmony_ci
176cd6a6acSopenharmony_ci<table>
186cd6a6acSopenharmony_ci<colgroup>
196cd6a6acSopenharmony_ci<col width="25%" />
206cd6a6acSopenharmony_ci<col width="75%" />
216cd6a6acSopenharmony_ci</colgroup>
226cd6a6acSopenharmony_ci<tbody>
236cd6a6acSopenharmony_ci<tr class="odd">
246cd6a6acSopenharmony_ci<td align="left"><p><code>role</code></p></td>
256cd6a6acSopenharmony_ci<td align="left"><p>The <code>role</code> keyword.</p></td>
266cd6a6acSopenharmony_ci</tr>
276cd6a6acSopenharmony_ci<tr class="even">
286cd6a6acSopenharmony_ci<td align="left"><p><code>role_id</code></p></td>
296cd6a6acSopenharmony_ci<td align="left"><p>The <code>role</code> identifier.</p></td>
306cd6a6acSopenharmony_ci</tr>
316cd6a6acSopenharmony_ci</tbody>
326cd6a6acSopenharmony_ci</table>
336cd6a6acSopenharmony_ci
346cd6a6acSopenharmony_ci**Example:**
356cd6a6acSopenharmony_ci
366cd6a6acSopenharmony_ciThis example declares two roles: `object_r` in the global namespace and `unconfined.role`:
376cd6a6acSopenharmony_ci
386cd6a6acSopenharmony_ci```secil
396cd6a6acSopenharmony_ci    (role object_r)
406cd6a6acSopenharmony_ci
416cd6a6acSopenharmony_ci    (block unconfined
426cd6a6acSopenharmony_ci        (role role)
436cd6a6acSopenharmony_ci    )
446cd6a6acSopenharmony_ci```
456cd6a6acSopenharmony_ci
466cd6a6acSopenharmony_ciroletype
476cd6a6acSopenharmony_ci--------
486cd6a6acSopenharmony_ci
496cd6a6acSopenharmony_ciAuthorises a [`role`](cil_role_statements.md#role) to access a [`type`](cil_type_statements.md#type) identifier.
506cd6a6acSopenharmony_ci
516cd6a6acSopenharmony_ci**Statement definition:**
526cd6a6acSopenharmony_ci
536cd6a6acSopenharmony_ci```secil
546cd6a6acSopenharmony_ci    (role role_id type_id)
556cd6a6acSopenharmony_ci```
566cd6a6acSopenharmony_ci
576cd6a6acSopenharmony_ci**Where:**
586cd6a6acSopenharmony_ci
596cd6a6acSopenharmony_ci<table>
606cd6a6acSopenharmony_ci<colgroup>
616cd6a6acSopenharmony_ci<col width="25%" />
626cd6a6acSopenharmony_ci<col width="75%" />
636cd6a6acSopenharmony_ci</colgroup>
646cd6a6acSopenharmony_ci<tbody>
656cd6a6acSopenharmony_ci<tr class="odd">
666cd6a6acSopenharmony_ci<td align="left"><p><code>roletype</code></p></td>
676cd6a6acSopenharmony_ci<td align="left"><p>The <code>roletype</code> keyword.</p></td>
686cd6a6acSopenharmony_ci</tr>
696cd6a6acSopenharmony_ci<tr class="even">
706cd6a6acSopenharmony_ci<td align="left"><p><code>role_id</code></p></td>
716cd6a6acSopenharmony_ci<td align="left"><p>A single previously declared <code>role</code> or <code>roleattribute</code> identifier.</p></td>
726cd6a6acSopenharmony_ci</tr>
736cd6a6acSopenharmony_ci<tr class="odd">
746cd6a6acSopenharmony_ci<td align="left"><p><code>type_id</code></p></td>
756cd6a6acSopenharmony_ci<td align="left"><p>A single previously declared <code>type</code>, <code>typealias</code> or <code>typeattribute</code> identifier.</p></td>
766cd6a6acSopenharmony_ci</tr>
776cd6a6acSopenharmony_ci</tbody>
786cd6a6acSopenharmony_ci</table>
796cd6a6acSopenharmony_ci
806cd6a6acSopenharmony_ci**Example:**
816cd6a6acSopenharmony_ci
826cd6a6acSopenharmony_ciThis example will declare [`role`](cil_role_statements.md#role) and [`type`](cil_type_statements.md#type) identifiers, then associate them:
836cd6a6acSopenharmony_ci
846cd6a6acSopenharmony_ci```secil
856cd6a6acSopenharmony_ci    (block unconfined
866cd6a6acSopenharmony_ci        (role role)
876cd6a6acSopenharmony_ci        (type process)
886cd6a6acSopenharmony_ci        (roletype role process)
896cd6a6acSopenharmony_ci    )
906cd6a6acSopenharmony_ci```
916cd6a6acSopenharmony_ci
926cd6a6acSopenharmony_ciroleattribute
936cd6a6acSopenharmony_ci-------------
946cd6a6acSopenharmony_ci
956cd6a6acSopenharmony_ciDeclares 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 [`roleattributeset`](cil_role_statements.md#roleattributeset) statement.
966cd6a6acSopenharmony_ci
976cd6a6acSopenharmony_ci**Statement definition:**
986cd6a6acSopenharmony_ci
996cd6a6acSopenharmony_ci```secil
1006cd6a6acSopenharmony_ci    (roleattribute roleattribute_id)
1016cd6a6acSopenharmony_ci```
1026cd6a6acSopenharmony_ci
1036cd6a6acSopenharmony_ci**Where:**
1046cd6a6acSopenharmony_ci
1056cd6a6acSopenharmony_ci<table>
1066cd6a6acSopenharmony_ci<colgroup>
1076cd6a6acSopenharmony_ci<col width="25%" />
1086cd6a6acSopenharmony_ci<col width="75%" />
1096cd6a6acSopenharmony_ci</colgroup>
1106cd6a6acSopenharmony_ci<tbody>
1116cd6a6acSopenharmony_ci<tr class="odd">
1126cd6a6acSopenharmony_ci<td align="left"><p><code>roleattribute</code></p></td>
1136cd6a6acSopenharmony_ci<td align="left"><p>The <code>roleattribute</code> keyword.</p></td>
1146cd6a6acSopenharmony_ci</tr>
1156cd6a6acSopenharmony_ci<tr class="even">
1166cd6a6acSopenharmony_ci<td align="left"><p><code>roleattribute_id</code></p></td>
1176cd6a6acSopenharmony_ci<td align="left"><p>The <code>roleattribute</code> identifier.</p></td>
1186cd6a6acSopenharmony_ci</tr>
1196cd6a6acSopenharmony_ci</tbody>
1206cd6a6acSopenharmony_ci</table>
1216cd6a6acSopenharmony_ci
1226cd6a6acSopenharmony_ci**Example:**
1236cd6a6acSopenharmony_ci
1246cd6a6acSopenharmony_ciThis example will declare a role attribute `roles.role_holder` that will have an empty set:
1256cd6a6acSopenharmony_ci
1266cd6a6acSopenharmony_ci```secil
1276cd6a6acSopenharmony_ci    (block roles
1286cd6a6acSopenharmony_ci        (roleattribute role_holder)
1296cd6a6acSopenharmony_ci    )
1306cd6a6acSopenharmony_ci```
1316cd6a6acSopenharmony_ci
1326cd6a6acSopenharmony_ciroleattributeset
1336cd6a6acSopenharmony_ci----------------
1346cd6a6acSopenharmony_ci
1356cd6a6acSopenharmony_ciAllows 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.
1366cd6a6acSopenharmony_ci
1376cd6a6acSopenharmony_ci**Statement definition:**
1386cd6a6acSopenharmony_ci
1396cd6a6acSopenharmony_ci```secil
1406cd6a6acSopenharmony_ci    (roleattributeset roleattribute_id (role_id ... | expr ...))
1416cd6a6acSopenharmony_ci```
1426cd6a6acSopenharmony_ci
1436cd6a6acSopenharmony_ci**Where:**
1446cd6a6acSopenharmony_ci
1456cd6a6acSopenharmony_ci<table>
1466cd6a6acSopenharmony_ci<colgroup>
1476cd6a6acSopenharmony_ci<col width="25%" />
1486cd6a6acSopenharmony_ci<col width="75%" />
1496cd6a6acSopenharmony_ci</colgroup>
1506cd6a6acSopenharmony_ci<tbody>
1516cd6a6acSopenharmony_ci<tr class="odd">
1526cd6a6acSopenharmony_ci<td align="left"><p><code>roleattributeset</code></p></td>
1536cd6a6acSopenharmony_ci<td align="left"><p>The <code>roleattributeset</code> keyword.</p></td>
1546cd6a6acSopenharmony_ci</tr>
1556cd6a6acSopenharmony_ci<tr class="even">
1566cd6a6acSopenharmony_ci<td align="left"><p><code>roleattribute_id</code></p></td>
1576cd6a6acSopenharmony_ci<td align="left"><p>A single previously declared <code>roleattribute</code> identifier.</p></td>
1586cd6a6acSopenharmony_ci</tr>
1596cd6a6acSopenharmony_ci<tr class="odd">
1606cd6a6acSopenharmony_ci<td align="left"><p><code>role_id</code></p></td>
1616cd6a6acSopenharmony_ci<td align="left"><p>Zero or more previously declared <code>role</code> or <code>roleattribute</code> identifiers.</p>
1626cd6a6acSopenharmony_ci<p>Note that there must be at least one <code>role_id</code> or <code>expr</code> parameter declared.</p></td>
1636cd6a6acSopenharmony_ci</tr>
1646cd6a6acSopenharmony_ci<tr class="even">
1656cd6a6acSopenharmony_ci<td align="left"><p><code>expr</code></p></td>
1666cd6a6acSopenharmony_ci<td align="left"><p>Zero or more <code>expr</code>'s, the valid operators and syntax are:</p>
1676cd6a6acSopenharmony_ci<p><code>    (and (role_id ...) (role_id ...))</code></p>
1686cd6a6acSopenharmony_ci<p><code>    (or  (role_id ...) (role_id ...))</code></p>
1696cd6a6acSopenharmony_ci<p><code>    (xor (role_id ...) (role_id ...))</code></p>
1706cd6a6acSopenharmony_ci<p><code>    (not (role_id ...))</code></p>
1716cd6a6acSopenharmony_ci<p><code>    (all)</code></p></td>
1726cd6a6acSopenharmony_ci</tr>
1736cd6a6acSopenharmony_ci</tbody>
1746cd6a6acSopenharmony_ci</table>
1756cd6a6acSopenharmony_ci
1766cd6a6acSopenharmony_ci**Example:**
1776cd6a6acSopenharmony_ci
1786cd6a6acSopenharmony_ciThis example will declare three roles and two role attributes, then associate all the roles to them as shown:
1796cd6a6acSopenharmony_ci
1806cd6a6acSopenharmony_ci```secil
1816cd6a6acSopenharmony_ci    (block roles
1826cd6a6acSopenharmony_ci        (role role_1)
1836cd6a6acSopenharmony_ci        (role role_2)
1846cd6a6acSopenharmony_ci        (role role_3)
1856cd6a6acSopenharmony_ci
1866cd6a6acSopenharmony_ci        (roleattribute role_holder)
1876cd6a6acSopenharmony_ci        (roleattributeset role_holder (role_1 role_2 role_3))
1886cd6a6acSopenharmony_ci
1896cd6a6acSopenharmony_ci        (roleattribute role_holder_all)
1906cd6a6acSopenharmony_ci        (roleattributeset role_holder_all (all))
1916cd6a6acSopenharmony_ci    )
1926cd6a6acSopenharmony_ci```
1936cd6a6acSopenharmony_ci
1946cd6a6acSopenharmony_ciroleallow
1956cd6a6acSopenharmony_ci---------
1966cd6a6acSopenharmony_ci
1976cd6a6acSopenharmony_ciAuthorise the current role to assume a new role.
1986cd6a6acSopenharmony_ci
1996cd6a6acSopenharmony_ciNotes:
2006cd6a6acSopenharmony_ci
2016cd6a6acSopenharmony_ci-   May require a [`roletransition`](cil_role_statements.md#roletransition) rule to ensure transition to the new role.
2026cd6a6acSopenharmony_ci
2036cd6a6acSopenharmony_ci-   This rule is not allowed in [`booleanif`](cil_conditional_statements.md#booleanif) statements.
2046cd6a6acSopenharmony_ci
2056cd6a6acSopenharmony_ci**Statement definition:**
2066cd6a6acSopenharmony_ci
2076cd6a6acSopenharmony_ci```secil
2086cd6a6acSopenharmony_ci    (roleallow current_role_id new_role_id)
2096cd6a6acSopenharmony_ci```
2106cd6a6acSopenharmony_ci
2116cd6a6acSopenharmony_ci**Where:**
2126cd6a6acSopenharmony_ci
2136cd6a6acSopenharmony_ci<table>
2146cd6a6acSopenharmony_ci<colgroup>
2156cd6a6acSopenharmony_ci<col width="25%" />
2166cd6a6acSopenharmony_ci<col width="75%" />
2176cd6a6acSopenharmony_ci</colgroup>
2186cd6a6acSopenharmony_ci<tbody>
2196cd6a6acSopenharmony_ci<tr class="odd">
2206cd6a6acSopenharmony_ci<td align="left"><p><code>roleallow</code></p></td>
2216cd6a6acSopenharmony_ci<td align="left"><p>The <code>roleallow</code> keyword.</p></td>
2226cd6a6acSopenharmony_ci</tr>
2236cd6a6acSopenharmony_ci<tr class="even">
2246cd6a6acSopenharmony_ci<td align="left"><p><code>current_role_id</code></p></td>
2256cd6a6acSopenharmony_ci<td align="left"><p>A single previously declared <code>role</code> or <code>roleattribute</code> identifier.</p></td>
2266cd6a6acSopenharmony_ci</tr>
2276cd6a6acSopenharmony_ci<tr class="odd">
2286cd6a6acSopenharmony_ci<td align="left"><p><code>new_role_id</code></p></td>
2296cd6a6acSopenharmony_ci<td align="left"><p>A single previously declared <code>role</code> or <code>roleattribute</code> identifier.</p></td>
2306cd6a6acSopenharmony_ci</tr>
2316cd6a6acSopenharmony_ci</tbody>
2326cd6a6acSopenharmony_ci</table>
2336cd6a6acSopenharmony_ci
2346cd6a6acSopenharmony_ci**Example:**
2356cd6a6acSopenharmony_ci
2366cd6a6acSopenharmony_ciSee the [`roletransition`](cil_role_statements.md#roletransition) statement for an example.
2376cd6a6acSopenharmony_ci
2386cd6a6acSopenharmony_ciroletransition
2396cd6a6acSopenharmony_ci--------------
2406cd6a6acSopenharmony_ci
2416cd6a6acSopenharmony_ciSpecify 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.
2426cd6a6acSopenharmony_ci
2436cd6a6acSopenharmony_ci**Statement definition:**
2446cd6a6acSopenharmony_ci
2456cd6a6acSopenharmony_ci```secil
2466cd6a6acSopenharmony_ci    (roletransition current_role_id target_type_id class_id new_role_id)
2476cd6a6acSopenharmony_ci```
2486cd6a6acSopenharmony_ci
2496cd6a6acSopenharmony_ci**Where:**
2506cd6a6acSopenharmony_ci
2516cd6a6acSopenharmony_ci<table>
2526cd6a6acSopenharmony_ci<colgroup>
2536cd6a6acSopenharmony_ci<col width="25%" />
2546cd6a6acSopenharmony_ci<col width="75%" />
2556cd6a6acSopenharmony_ci</colgroup>
2566cd6a6acSopenharmony_ci<tbody>
2576cd6a6acSopenharmony_ci<tr class="odd">
2586cd6a6acSopenharmony_ci<td align="left"><p><code>roletransition</code></p></td>
2596cd6a6acSopenharmony_ci<td align="left"><p>The <code>roletransition</code> keyword.</p></td>
2606cd6a6acSopenharmony_ci</tr>
2616cd6a6acSopenharmony_ci<tr class="even">
2626cd6a6acSopenharmony_ci<td align="left"><p><code>current_role_id</code></p></td>
2636cd6a6acSopenharmony_ci<td align="left"><p>A single previously declared <code>role</code> or <code>roleattribute</code> identifier.</p></td>
2646cd6a6acSopenharmony_ci</tr>
2656cd6a6acSopenharmony_ci<tr class="odd">
2666cd6a6acSopenharmony_ci<td align="left"><p><code>target_type_id</code></p></td>
2676cd6a6acSopenharmony_ci<td align="left"><p>A single previously declared <code>type</code>, <code>typealias</code> or <code>typeattribute</code> identifier.</p></td>
2686cd6a6acSopenharmony_ci</tr>
2696cd6a6acSopenharmony_ci<tr class="even">
2706cd6a6acSopenharmony_ci<td align="left"><p><code>class_id</code></p></td>
2716cd6a6acSopenharmony_ci<td align="left"><p>A single previously declared <code>class</code> or <code>classmap</code> identifier.</p></td>
2726cd6a6acSopenharmony_ci</tr>
2736cd6a6acSopenharmony_ci<tr class="odd">
2746cd6a6acSopenharmony_ci<td align="left"><p><code>new_role_id</code></p></td>
2756cd6a6acSopenharmony_ci<td align="left"><p>A single previously declared <code>role</code> identifier to be set on transition.</p></td>
2766cd6a6acSopenharmony_ci</tr>
2776cd6a6acSopenharmony_ci</tbody>
2786cd6a6acSopenharmony_ci</table>
2796cd6a6acSopenharmony_ci
2806cd6a6acSopenharmony_ci**Example:**
2816cd6a6acSopenharmony_ci
2826cd6a6acSopenharmony_ciThis example will authorise the `unconfined.role` to assume the `msg_filter.role` role, and then transition to that role:
2836cd6a6acSopenharmony_ci
2846cd6a6acSopenharmony_ci```secil
2856cd6a6acSopenharmony_ci    (block ext_gateway
2866cd6a6acSopenharmony_ci        (type process)
2876cd6a6acSopenharmony_ci        (type exec)
2886cd6a6acSopenharmony_ci
2896cd6a6acSopenharmony_ci        (roletype msg_filter.role process)
2906cd6a6acSopenharmony_ci        (roleallow unconfined.role msg_filter.role)
2916cd6a6acSopenharmony_ci        (roletransition unconfined.role exec process msg_filter.role)
2926cd6a6acSopenharmony_ci    )
2936cd6a6acSopenharmony_ci```
2946cd6a6acSopenharmony_ci
2956cd6a6acSopenharmony_cirolebounds
2966cd6a6acSopenharmony_ci----------
2976cd6a6acSopenharmony_ci
2986cd6a6acSopenharmony_ciDefines a hierarchical relationship between roles where the child role cannot have more privileges than the parent.
2996cd6a6acSopenharmony_ci
3006cd6a6acSopenharmony_ciNotes:
3016cd6a6acSopenharmony_ci
3026cd6a6acSopenharmony_ci-   It is not possible to bind the parent role to more than one child role.
3036cd6a6acSopenharmony_ci
3046cd6a6acSopenharmony_ci-   While this is added to the binary policy, it is not enforced by the SELinux kernel services.
3056cd6a6acSopenharmony_ci
3066cd6a6acSopenharmony_ci**Statement definition:**
3076cd6a6acSopenharmony_ci
3086cd6a6acSopenharmony_ci```secil
3096cd6a6acSopenharmony_ci    (rolebounds parent_role_id child_role_id)
3106cd6a6acSopenharmony_ci```
3116cd6a6acSopenharmony_ci
3126cd6a6acSopenharmony_ci**Where:**
3136cd6a6acSopenharmony_ci
3146cd6a6acSopenharmony_ci<table>
3156cd6a6acSopenharmony_ci<colgroup>
3166cd6a6acSopenharmony_ci<col width="25%" />
3176cd6a6acSopenharmony_ci<col width="75%" />
3186cd6a6acSopenharmony_ci</colgroup>
3196cd6a6acSopenharmony_ci<tbody>
3206cd6a6acSopenharmony_ci<tr class="odd">
3216cd6a6acSopenharmony_ci<td align="left"><p><code>rolebounds</code></p></td>
3226cd6a6acSopenharmony_ci<td align="left"><p>The <code>rolebounds</code> keyword.</p></td>
3236cd6a6acSopenharmony_ci</tr>
3246cd6a6acSopenharmony_ci<tr class="even">
3256cd6a6acSopenharmony_ci<td align="left"><p><code>parent_role_id</code></p></td>
3266cd6a6acSopenharmony_ci<td align="left"><p>A single previously declared <code>role</code> identifier.</p></td>
3276cd6a6acSopenharmony_ci</tr>
3286cd6a6acSopenharmony_ci<tr class="odd">
3296cd6a6acSopenharmony_ci<td align="left"><p><code>child_role_id</code></p></td>
3306cd6a6acSopenharmony_ci<td align="left"><p>A single previously declared <code>role</code> identifier.</p></td>
3316cd6a6acSopenharmony_ci</tr>
3326cd6a6acSopenharmony_ci</tbody>
3336cd6a6acSopenharmony_ci</table>
3346cd6a6acSopenharmony_ci
3356cd6a6acSopenharmony_ci**Example:**
3366cd6a6acSopenharmony_ci
3376cd6a6acSopenharmony_ciIn this example the role `test` cannot have greater privileges than `unconfined.role`:
3386cd6a6acSopenharmony_ci
3396cd6a6acSopenharmony_ci```secil
3406cd6a6acSopenharmony_ci    (role test)
3416cd6a6acSopenharmony_ci
3426cd6a6acSopenharmony_ci    (block unconfined
3436cd6a6acSopenharmony_ci        (role role)
3446cd6a6acSopenharmony_ci        (rolebounds role .test)
3456cd6a6acSopenharmony_ci    )
3466cd6a6acSopenharmony_ci```
347