8.2. Using Roles
8.2. Using Roles Roles are an entry grouping mechanism that unify the static and dynamic groups described in the 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 the nsManagedRoleDefinition object class, which in turn inherits from the LdapSubEntry , nsRoleDefinition , and nsSimpleRoleDefinition object classes. Assign the role to the marketing staff members, one by one, using ldapmodify : The nsRoleDN 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 the LdapSubEntry , nsRoleDefinition , and nsComplexRoleDefinition object classes. The nsRoleFilter attribute sets a filter for o (organization) attributes that contain a value of 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: 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) The nsRoleDN attributes contain the DNs for both the marketing managed role and the sales managers filtered role. Both of the users in the 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: 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 LDAP Browser 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 Red Hat Directory Server . After the web console loads the Red Hat Directory Server interface, click LDAP Browser . Select an LDAP entry and click the Options menu. From the drop-down menu, select New and click Create a new role . Follow the steps in the wizard and click the button after you complete each step. To create the role, review the role settings in the Create Role step and click the Create button . You can click the Back button to modify the role settings or click the Cancel button to cancel the role creation. To close the wizard window, click the Finish button. 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 LDAP Browser 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 Red Hat Directory Server . After the web console loads the Red Hat Directory Server interface, click LDAP Browser . Expand the LDAP entry and select the role you are modifying. Click the Options menu and select Edit to modify the parameters of the role or Rename to rename the role. In the wizard window modify the necessary parameters and click after each step until you observe the LDIF Statements step. Check the updated parameters and click Modify Entry or Change Entry Name . To close the wizard window, click the Finish button. 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 LDAP Browser 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 Red Hat Directory Server . After the web console loads the Red Hat Directory Server interface, click LDAP Browser . Expand the LDAP entry and select the role which you want to delete. Open the Options menu and select Delete . Verify the data about the role you want to delete and click the button until you reach the Deletion step. Toggle the switch to the Yes, I'm sure position and click the Delete button. To close the wizard window, click the Finish button. 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 : 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" .
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 dn: cn=Bob,ou=people,dc=example,dc=com changetype: modify add: nsRoleDN nsRoleDN: cn=Marketing,ou=people,dc=example,dc=com 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 dn: cn=Pat Smith,ou=people,dc=example,dc=com objectclass: person cn: Pat sn: Smith userPassword: secret o: sales managers 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 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 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;)