8.2. Using Roles
Roles are an entry grouping mechanism that unify the static and dynamic groups described in the previous sections. Roles are designed to be more efficient and easier to use for applications. For example, an application can get the list of roles of which an entry is a member by querying the entry itself, rather than selecting a group and browsing the members list of several groups.
8.2.1. About Roles
Red Hat has two kinds of groups. Static groups have a finite and defined list of members. Dynamic groups used filters to recognize which entries are members of the group, so the group membership is constantly changed as the entries which match the group filter change. (Both kinds of groups are described in Section 8.1, “Using Groups”.)
Roles are a sort of hybrid group, behaving as both a static and a dynamic group. With a group, entries are added to a group entry as members. With a role, the role attribute is added to an entry and then that attribute is used to identify members in the role entry automatically.
Role members are entries that possess the role. Members can be specified either explicitly or dynamically. How role membership is specified depends upon the type of role. Directory Server supports three types of roles:
- Managed roles have an explicit enumerated list of members.
- Filtered roles are assigned entries to the role depending upon the attribute contained by each entry, specified in an LDAP filter. Entries that match the filter possess the role.
- Nested roles are roles that contain other roles.
Managed roles can do everything that can normally be done with static groups. The role members can be filtered using filtered roles, similarly to the filtering with dynamic groups. Roles are easier to use than groups, more flexible in their implementation, and reduce client complexity.
When a role is created, determine whether a user can add themselves or remove themselves from the role. See Section 8.2.4, “Using Roles Securely” for more information about roles and access control.
Note
Evaluating roles is more resource-intensive for the Directory Server than evaluating groups because the server does the work for the client application. With roles, the client application can check role membership by searching for the
nsRole
attribute. The nsRole
attribute is a computed attribute, which identifies to which roles an entry belongs; the nsRole
attribute is not stored with the entry itself. From the client application point of view, the method for checking membership is uniform and is performed on the server side.
Considerations for using roles are covered in the Red Hat Directory Server Deployment Guide.
8.2.2. Managing Roles Using the Command Line
You can view, create, and delete roles using the command line.
8.2.2.1. Creating a Managed Role
Managed roles have an explicit enumerated list of members. Managed roles are added to entries by adding the
nsRoleDN
attribute to the entry.
8.2.2.1.1. Creating Managed Roles through the Command Line
Roles inherit from the
ldapsubentry
object class, which is defined in the ITU X.509 standard. In addition, each managed role requires two object classes that inherit from the nsRoleDefinition
object class:
- nsSimpleRoleDefinition
- nsManagedRoleDefinition
A managed role also allows an optional
description
attribute.
Members of a managed role have the
nsRoleDN
attribute in their entry.
This example creates a role which can be assigned to the marketing department.
- Use
ldapmodify
with the-a
option to add the managed role entry. The new entry must contain thensManagedRoleDefinition
object class, which in turn inherits from theLdapSubEntry
,nsRoleDefinition
, andnsSimpleRoleDefinition
object classes.dn: cn=Marketing,ou=people,dc=example,dc=com objectclass: top objectclass: LdapSubEntry objectclass: nsRoleDefinition objectclass: nsSimpleRoleDefinition objectclass: nsManagedRoleDefinition cn: Marketing description: managed role for marketing staff
- Assign the role to the marketing staff members, one by one, using
ldapmodify
:dn: cn=Bob,ou=people,dc=example,dc=com changetype: modify add: nsRoleDN nsRoleDN: cn=Marketing,ou=people,dc=example,dc=com
ThensRoleDN
attribute in the entry indicates that the entry is a member of a managed role,cn=Marketing,ou=people,dc=example,dc=com
.
8.2.2.2. Creating a Filtered Role
Entries are assigned to a filtered role depending whether the entry possesses a specific attribute defined in the role. The role definition specifies an LDAP filter for the target attributes. Entries that match the filter possess (are members of) the role.
8.2.2.2.1. Creating a Filtered Role through the Command Line
Roles inherit from the
ldapsubentry
object class, which is defined in the ITU X.509 standard. In addition, each filtered role requires two object classes that inherit from the nsRoleDefinition
object class:
- nsComplexRoleDefinition
- nsFilteredRoleDefinition
A filtered role entry also requires the
nsRoleFilter
attribute to define the LDAP filter to determine role members. Optionally, the role can take a description
attribute.
Members of a filtered role are entries that match the filter specified in the
nsRoleFilter
attribute.
This example creates a filtered role which is applied to all sales managers.
- Run
ldapmodify
with the-a
option to add a new entry. - Create the filtered role entry.The role entry has the
nsFilteredRoleDefinition
object class, which inherits from theLdapSubEntry
,nsRoleDefinition
, andnsComplexRoleDefinition
object classes.ThensRoleFilter
attribute sets a filter foro
(organization) attributes that contain a value ofsales managers
.dn: cn=SalesManagerFilter,ou=people,dc=example,dc=com changetype: add objectclass: top objectclass: LDAPsubentry objectclass: nsRoleDefinition objectclass: nsComplexRoleDefinition objectclass: nsFilteredRoleDefinition cn: SalesManagerFilter nsRoleFilter: o=sales managers Description: filtered role for sales managers
The following entry matches the filter (possesses the
o
attribute with the value sales managers
), and, therefore, it is a member of this filtered role automatically:
dn: cn=Pat Smith,ou=people,dc=example,dc=com objectclass: person cn: Pat sn: Smith userPassword: secret o: sales managers
8.2.2.3. Creating a Nested Role
Nested roles are roles that contain other roles. Before it is possible to create a nested role, another role must exist. The roles nested within the nested role are specified using the
nsRoleDN
attribute.
8.2.2.3.1. Creating Nested Role through the Command Line
Roles inherit from the
ldapsubentry
object class, which is defined in the ITU X.509 standard. In addition, each nested role requires two object classes that inherit from the nsRoleDefinition
object class:
- nsComplexRoleDefinition
- nsNestedRoleDefinition
A nested role entry also requires the
nsRoleDN
attribute to identify the roles to nest within the container role. Optionally, the role can take a description
attribute.
Members of a nested role are members of the roles specified in the
nsRoleDN
attributes of the nested role definition entry.
This example creates a single role out of the managed marketing role and filtered sales manager role.
- Run
ldapmodify
with the-a
option to add a new entry. - Create the nested role entry. The nested role has four object classes:
nsNestedRoleDefinition
LDAPsubentry
(inherited)nsRoleDefinition
(inherited)nsComplexRoleDefinition
(inherited)
ThensRoleDN
attributes contain the DNs for both the marketing managed role and the sales managers filtered role.dn: cn=MarketingSales,ou=people,dc=example,dc=com objectclass: top objectclass: LDAPsubentry objectclass: nsRoleDefinition objectclass: nsComplexRoleDefinition objectclass: nsNestedRoleDefinition cn: MarketingSales nsRoleDN: cn=SalesManagerFilter,ou=people,dc=example,dc=com nsRoleDN: cn=Marketing,ou=people,dc=example,dc=com
Both of the users in the previous examples, Bob and Pat, are members of this new nested role.
8.2.2.4. Viewing Roles for an Entry through the Command Line
Role assignments are not returned automatically through the command line.
The nsRole attribute is an operational attribute. In LDAP, operational attributes must be requested explicitly. They are not returned by default with the regular attributes in the schema of the entry. You can either explicitly request single operational attributes by listing them or use
+
to output all operational attributes for result objects. For example, this ldapsearch
command returns the list of roles of which uid=user_name
is a member, in addition to the regular attributes for the entry:
# ldapsearch -D "cn=Directory Manager" -W -p 389 -h server.example.com -b "dc=example,dc=com" -s sub -x "(uid=user_name)"” \* nsRole dn: uid=user_name,ou=people,dc=example,dc=com ... nsRole: cn=Role for Managers,dc=example,dc=com nsRole: cn=Role for Accounting,dc=example,dc=com
8.2.2.5. About Deleting Roles
Deleting a role deletes the role entry but does not delete the
nsRoleDN
attribute for each role member. To delete the nsRoleDN
attribute for each role member, enable the Referential Integrity plug-in, and configure it to manage the nsRoleDN
attribute. For more information on the Referential Integrity plug-in, see Chapter 5, Maintaining Referential Integrity.
8.2.3. Managing Roles in Directory Server Using the LDAP Browser
A role is a grouping mechanism that unifies static and dynamic groups.
8.2.3.1. Creating a role in the LDAP browser
You can create a role for a Red Hat Directory Server entry by using the
wizard in the web console.
Prerequisites
- Access to the web console.
- A parent entry exists in the Red Hat Directory Server.
Procedure
- Log in to the web console and click.
- After the web console loads theinterface, click .
- Select an LDAP entry and click the Options menu.
- From the drop-down menu, selectand click .
- Follow the steps in the wizard and click thebutton after you complete each step.
- To create the role, review the role settings in thestep and click the . You can click the button to modify the role settings or click the button to cancel the role creation.
- To close the wizard window, click thebutton.
Verification
- Expand the LDAP entry and verify the new role appears among the entry parameters.
8.2.3.2. Modifying a Role in the LDAP browser
You can modify the role parameters for a Red Hat Directory Server entry using the
in the web console.
Prerequisites
- Access to the web console.
- A parent entry exists in the Red Hat Directory Server.
Procedure
- Log in to the web console and click.
- After the web console loads theinterface, click .
- Expand the LDAP entry and select the role you are modifying.
- Click the Options menu and selectto modify the parameters of the role or to rename the role.
- In the wizard window modify the necessary parameters and clickafter each step until you observe the step.
- Check the updated parameters and clickor .
- To close the wizard window, click thebutton.
Verification
- Expand the LDAP entry and verify the updated parameters are listed for the role.
8.2.3.3. Deleting a Role in the LDAP browser
You can delete a role from the Red Hat Directory Server entry by using the
in the web console.
Prerequisites
- Access to the web console.
- A parent entry exists in the Red Hat Directory Server.
Procedure
- Log in to the web console and click.
- After the web console loads theinterface, click .
- Expand the LDAP entry and select the role which you want to delete.
- Open the Options menu and select.
- Verify the data about the role you want to delete and click thebutton until you reach the step.
- Toggle the switch to theposition and click the button.
- To close the wizard window, click thebutton.
Verification
- Expand the LDAP entry and verify the role is no longer a part of the entry details.
8.2.4. Using Roles Securely
Not every role is suitable for use in a security context. When creating a new role, consider how easily the role can be assigned to and removed from an entry. Sometimes it is appropriate for users to be able to add or remove themselves easily from a role. For example, if there is an interest group role called
Mountain Biking
, interested users should be able to add themselves or remove themselves easily.
However, it is inappropriate to have such open roles for some security situations. One potential security risk is inactivating user accounts by inactivating roles. Inactive roles have special ACIs defined for their suffix. If an administrator allows users to add and remove themselves from roles freely, then in some circumstance, they may be able to remove themselves from an inactive role to prevent their accounts from being locked.
For example, user A possesses the managed role,
MR
. The MR
role has been locked using account inactivation. This means that user A cannot bind to the server because the nsAccountLock
attribute is computed as true
for that user. However, if user A was already bound to Directory Server and noticed that he is now locked through the MR role, the user can remove the nsRoleDN
attribute from his entry and unlock himself if there are no ACIs preventing him.
To prevent users from removing the
nsRoleDN
attribute, use the following ACIs depending upon the type of role being used.
- Managed roles. For entries that are members of a managed role, use the following ACI to prevent users from unlocking themselves by removing the appropriate
nsRoleDN
:aci: (targetattr="nsRoleDN") (targattrfilters= add=nsRoleDN:(!(nsRoleDN=cn=AdministratorRole,dc=example,dc=com)), del=nsRoleDN:(!(nsRoleDN=cn=nsManagedDisabledRole,dc=example,dc=com))) (version3.0;acl "allow mod of nsRoleDN by self but not to critical values"; allow(write) userdn=ldap:///self;)
- Filtered roles. The attributes that are part of the filter should be protected so that the user cannot relinquish the filtered role by modifying an attribute. The user should not be allowed to add, delete, or modify the attribute used by the filtered role. If the value of the filter attribute is computed, then all attributes that can modify the value of the filter attribute should be protected in the same way.
- Nested roles. A nested role is comprised of filtered and managed roles, so both ACIs should be considered for modifying the attributes (
nsRoleDN
or something else) of the roles that comprise the nested role.
For more information about account inactivation, see Section 20.16, “Manually Inactivating Users and Roles”.