|
||
|
|
Chapter 6 Managing Access Control
Netscape Directory Server (Directory Server) provides you with the ability to control access to your directory. This chapter describes the access control mechanism.
This section includes the following topics:
- Access Control Principles
![]()
- Default ACIs
![]()
- Creating ACIs Manually
![]()
- Bind Rules
![]()
- Creating ACIs From the Console
![]()
- Access Control Usage Examples
![]()
- Viewing the ACIs for an Entry
![]()
- Advanced Access Control: Using Macro ACIs
![]()
- Access Control and Replication
![]()
- Logging Access Control Information
![]()
- Compatibility with Earlier Releases
![]()
To take full advantage of the power and flexiblity of the access control mechanism, while you are in the planning phase for your directory deployment, you should define an access control strategy as an integral part of your overall security policy. Refer to Netscape Directory Server Deployment Guide for tips on planning your access control strategy.
The mechanism by which you define access is called access control. When the server receives a request, it uses the authentication information provided by the user in the bind operation, and the access control instructions (ACIs) defined in the server to allow or deny access to directory information. The server can allow or deny permissions such as read, write, search, and compare. The permission level granted to a user may be dependent on the authentication information provided.
Using access control, you can control access to the entire directory, a subtree of the directory, specific entries in the directory (including entries defining configuration tasks), or a specific set of entry attributes. You can set permissions for a specific user, all users belonging to a specific group or role, or all users of the directory. Finally, you can define access for a specific location such as an IP address or a DNS name.
Access control instructions are stored in the directory, as attributes of entries. The
aciattribute is an operational attribute; it is available for use on every entry in the directory, regardless of whether it is defined for the object class of the entry. It is used by the Directory Server to evaluate what rights are granted or denied when it receives an LDAP request from a client. Theaciattribute is returned in anldapsearchoperation if specifically requested.The three main parts of an ACI statement are:
The permission and bind rule portions of the ACI are set as a pair, also called an Access Control Rule (ACR). The specified permission is granted or denied depending on whether the accompanying rule is evaluated to be true.
If an entry containing an ACI does not have any child entries, the ACI applies to that entry only. If the entry has child entries, the ACI applies to the entry itself and all entries below it. As a direct consequence, when the server evaluates access permissions to any given entry, it verifies the ACIs for every entry between the one requested and the directory suffix, as well as the ACIs on the entry itself.
The
aciattribute is multi-valued, which means that you can define several ACIs for the same entry or subtree.You can create an ACI on an entry that does not apply directly to that entry but to some or all of the entries in the subtree below it. The advantage of this is that you can place at a high level in the directory tree a general ACI that effectively applies to entries more likely to be located lower in the tree. For example, at the level of an
organizationalUnitentry or alocalityentry, you could create an ACI that targets entries that include theinetorgpersonobject class.You can use this feature to minimize the number of ACIs in the directory tree by placing general rules at high level branch points. To limit the scope of more specific rules, you should place them as close as possible to leaf entries.
To evaluate the access rights to a particular entry, the server compiles a list of the ACIs present on the entry itself and on the parent entries back up to the top level entry stored on the Directory Server. ACIs are evaluated across all of the databases for a particular Directory Server, but not across Directory Servers.
The evaluation of this list of ACIs is done based on the semantics of the ACIs, not on their placement in the directory tree. This means that ACIs that are close to the root of the directory tree do not take precedence over ACIs that are closer to the leaves of the directory tree.
The precedence rule that applies is as follows: ACIs that deny access take precedence over ACIs that allow access. Between ACIs that allow access, union semantics apply, so there is no precedence.
For example, if you deny write permission at the directory's root level, then none of the users can write to the directory regardless of the specific permissions you grant them. To grant a specific user write permissions to the directory, you have to restrict the scope of the original denial for write permission so that it does not include the user.
When creating an access control policy for your directory service, you need to be aware of the following restrictions:
- If your directory tree is distributed over several servers using the chaining feature, some restrictions apply to the keywords you can use in access control statements:
![]()
- ACIs that depend on group entries (
groupdnkeyword) must be located on the same server as the group entry. If the group is dynamic, then all members of the group must have an entry on the server too. If the group is static, the members's entries can be located on remote servers.![]()
- ACIs that depend on role definitions (
rolednkeyword) must be located on the same server as the role definition entry. Every entry that is intended to have the role must also be located on the same server.![]()
- However, you can do value matching of values stored in the target entry with values stored in the entry of the bind user (for example, using the userattr keyword). Access will be evaluated normally even if the bind user does not have an entry on server that holds the ACI.
- For more information on how to chain access control evaluation, see "Database Links and Access Control Evaluation".
- Attributes generated by a CoS cannot be used in all ACI keywords. Specifically, you should not use attributes generated by CoS with the following keywords:
![]()
targetfilter(see "Targeting Entries or Attributes Using LDAP Filters")![]()
targattrfilters(see "Targeting Attribute Values Using LDAP Filters")![]()
userattr(see "Using the userattr Keyword")![]()
- If you create target filters or bind rules that depend on the value of attributes generated by CoS, the access control rule will not work. For more information on CoS, see Chapter 5 "Advanced Entry Management."
- Access control rules are always evaluated on the local server. Therefore, it is not necessary to specify the hostname or port number of the server in LDAP URLs used in ACI keywords. If you do, the LDAP URL will not be taken into account at all. For more information on LDAP URLs, see Appendix C "LDAP URLs."
![]()
When you install the Directory Server, the following default ACIs apply to your directory information stored in the
userRootdatabase:
- Users can modify a list of common attributes in their own entries. Those attributes include, for example,
telephoneNumer,userPassword,seeAlso, and so on. Operational and most of the security attributes such asaci,nsroledn,passwordExpirationTime, and so on can't be modified by the users.![]()
- Users have anonymous access to the directory for search, compare, and read operations.
![]()
- The administrator (by default
uid=admin,ou=Administrators, ou=TopologyManagement,o=NetscapeRoot) has all rights except proxy rights.![]()
- All members of the Configuration Administrators group have all rights except proxy rights.
![]()
- All members of the Directory Administrators group have all rights except proxy rights.
![]()
- SIE group.
![]()
Whenever you create a new database in the directory, the top entry has the default ACIs listed above.
The
NetscapeRootsubtree has its own set of default ACIs:
- All members of the Configuration Administrators group have all rights on the
NetscapeRootsubtree except proxy rights.![]()
- Users have anonymous access to the
NetscapeRootsubtree for search and read operations.![]()
- Group expansion.
![]()
- All authenticated users have search, compare, and read rights to configuration attributes that identify the Administration Server.
![]()
The following sections explain how to modify these default settings to suit the needs of your organization.
You can create access control instructions manually using LDIF statements, and add them to your directory tree using the
ldapmodifyutility. The following sections explain in detail how to create the LDIF statements.
The
aciattribute uses the following syntax:aci: (target)(version 3.0;acl "name";permission bind_rules;)
- target specifies the entry, attributes, or set of entries and attributes for which you want to control access. The target can be a distinguished name, one or more attributes, or a single LDAP filter. The target is an optional part of the ACI.
![]()
version 3.0is a required string that identifies the ACI version.![]()
"name" is a name for the ACI. The name can be any string that identifies the ACI. The ACI name is required.![]()
- permission specifically outlines what rights you are either allowing or denying (for example, read or search rights).
![]()
- bind_rules specify the credentials and bind parameters that a user has to provide to be granted access. Bind rules can also specifically deny access to certain users or groups of users.
![]()
You can have multiple permission-bind rule pairs for each target. This allows you to efficiently set multiple access controls for a given target. For example:
target(permission bind_rule)(permission bind_rule)...
If you have several ACRs in one ACI statement, the syntax is of the form:
aci: (target)(version 3.0;acl "name";permission bind_rule; permission bind_rule; ... permission bind_rule;)
The following is an example of a complete LDIF ACI:
aci: (target="ldap:///uid=bjensen,dc=example,dc=com")(targetattr=*)
(version 3.0;acl "aci1";allow (write) userdn="ldap:///self";)In this example, the ACI states that the user
bjensenhas rights to modify all attributes in her own directory entry.The following sections describe the syntax of each portion of the ACI in more detail.
The target identifies what the ACI applies to. If the target is not specified, the ACI applies to the entry containing the
aciattribute and to the entries below it.
- A directory entry or all of the entries in a subtree, as described in "Targeting a Directory Entry".
![]()
- Attributes of an entry, as described in "Targeting Attributes".
![]()
- A set of entries or attributes that match a specified LDAP filter, as described in "Targeting Entries or Attributes Using LDAP Filters".
![]()
- An attribute value, or a combination of values, that match a specified LDAP filter, as described in "Targeting Attribute Values Using LDAP Filters".
![]()
The general syntax for a target is:
The quotation marks ("") around expression are required. What you use for expression is dependent upon the keyword that you supply.
The following table lists each keyword and the associated expressions:
Table 6-1 LDIF Target Keywords
In all cases, you must keep in mind that when you place an ACI on an entry, if it is not a leaf entry, the ACI also applies to all entries below it. For example, if you target the entry
ou=accounting,dc=example,dc=com, the permissions you set will apply to all entries in the accounting branch of theexample.comtree.As a counter example, if you place an ACI on the
ou=accounting,dc=example,dc=comentry, you cannot target theuid=sarette,ou=people,dc=example,dc=comentry because it is not located under the accounting tree.Be wary of using
!=when specifying an attribute you want to deny. ACLs are logically ORed, which means that if you created two ACLs
acl1: ( target=...)( targetattr!=a )(version 3.0; acl "name";allow (...)..
acl2: ( target=...)( targetattr!=b )(version 3.0; acl "name";allow (...)..the result would be to allow all values of the target attribute. The first ACL (
acl1) will allowband the second ACL (acl2) will allowa. The result of these two ACLs will be the same as the one resulting from using an ACL of the form:
acl3: ( targetattr="*" ) allow (...) ...Notice that nothing is denied. This could give rise to security problems.
When you want to deny access to a particular attribute, use
denyin the permissions clause rather than usingallowwith( targetattr != value ). For example, usages such as these are recommended:
acl1: ( target=...)( targetattr=a )(version 3.0; acl "name";deny (...)..acl2: ( target=...)( targetattr=b )(version 3.0; acl "name";deny (...)..
To target a directory entry (and the entries below it), you must use the
targetkeyword.The
targetkeyword can accept a value of the following format:
target="ldap:///distinguished_name"This identifies the distinguished name of the entry to which the access control rule applies. For example:
(target = "ldap:///uid=bjensen,dc=example,dc=com")
You can also use a wildcard when targeting a distinguished name using the
targetkeyword. The wildcard indicates that any character or string or substring is a match for the wildcard. Pattern matching is based on any other strings that have been specified with the wildcard.The following are legal examples of wildcard usage:
(target="ldap:///uid=*,dc=example,dc=com")![]()
- Matches every entry in the entire
example.comtree that has theuidattribute in the entry's RDN.
(target="ldap:///uid=*Anderson,dc=example,dc=com")![]()
- Matches every entry directly under the
example.comnode with auidending in Anderson.
(target="ldap:///uid=C*A,dc=example,dc=com")![]()
- Matches every entry directly under the
example.comnode with auidbeginning with C and ending with A.
Depending on the position of the wildcard, it can apply to the full DN, not only to attribute values. Therefore, the wildcard can be used as a substitute for portions of the DN. For example,
uid=andy*,dc=example,dc=comtargets all the directory entries in the entireexample.comtree with a matching uid attribute, and not just the entries that are immediately below thedc=example,dc=comnode. In other words, this target matches with longer expressions such asuid=andy,ou=eng,dc=example,dc=com, oruid=andy,ou=marketing,dc=example,dc=com.Some other valid examples follow:
(target="ldap:///uid=*,dc=example,dc=com")![]()
- Matches every entry in the entire
example.comtree that has theuidattribute in the entry's RDN.
(target="ldap:///uid=*,ou=*,dc=example,dc=com")![]()
- Matches every entry in the
example.comtree whose distinguished name contains theuidandouattributes. Thus:
uid=fchen,ou=Engineering,dc=example,dc=com
- or
uid=claire,ou=Engineering,ou=people,dc=example,dc=com
- would match, but the following would not:
uid=bjensen,dc=example,dc=com
ou=Engineering,dc=example,dc=com
You cannot use wildcards in the suffix part of a distinguished name. That is, if your directory uses the suffixes
c=USandc=GB, then you cannot use the following target to reference both suffixes:
In addition to targeting directory entries, you can also target one or more attributes included in the targeted entries. This is useful when you want to deny or allow access to partial information about an entry. For example, you could allow access to only the common name, surname, and telephone number attributes of a given entry. Or you could deny access to sensitive information such as passwords.
You can specify that the target is equal or is not equal to a specific attribute. The attributes you supply do not need to be defined in the schema. This absence of schema checking makes it possible to implement an access control policy when you set up your directory service for the first time, even if the ACLs you create do not apply to the current directory content.
To target attributes, you use the
targetattrkeyword. The keyword uses the following syntax:You can target multiple attributes by using the
targetattrkeyword with the following syntax:(targetattr = "attribute1 || attribute2 ... || attributen")
Where attribute is the name of the attribute you want to target.
For example, to target the common name attribute you would use:
To target an entry's common name, surname, and uid attributes, you would use the following:
(targetattr = "cn || sn || uid")
The attributes specified in the
targetattrkeyword apply to the entry that the ACI is targeting, and to all the entries below it. That is, if you target the password attribute on the entryuid=bjensen,ou=Marketing,dc=example,dc=com, only the password attribute on thebjensenentry is affected by the ACI because it is a leaf entry.If, however, you target the tree's branch point
ou=Marketing,dc=example,dc=com, then all the entries beneath the branch point that can contain a password attribute are affected by the ACI.Targeting Both an Entry and Attributes
By default, the entry targeted by an ACI containing a
targetattrkeyword is the entry on which the ACI is placed. That is, if you put the ACIaci: (targetattr = "uid")(access_control_rules;)
on the
ou=Marketing,dc=example,dc=comentry, then the ACI applies to the entire Marketing subtree. However, you can also explicitly specify a target using thetargetkeyword as follows:aci: (target="ldap:///ou=Marketing,
dc=example,dc=com")(targetattr="uid") (access_control_rules;)The order in which you specify the
targetand thetargetattrkeywords is not important.Targeting Entries or Attributes Using LDAP Filters
You can use LDAP filters to target a group of entries that match certain criteria. To do this, you must use the
targetfilterkeyword with an LDAP filter.The syntax of the
targetfilterkeyword is:(targetfilter = "LDAP_filter")
where LDAP_filter is a standard LDAP search filter. For more information on the syntax of LDAP search filters, see Appendix B "Finding Directory Entries."
For example, suppose that all entries in the accounting department include the attribute- value pair
ou=accounting, and all entries in the engineering department include the attribute- value pairou=engineeringsubtree. To target all the entries in the accounting and engineering branches of the directory tree, you could use the following filter:(targetfilter = "(|(ou=accounting)(ou=engineering))")
This type of filter targets whole entries. You can associate the
targetfilterand thetargetattrkeywords to create ACIs that apply to a subset of attributes in the targeted entries.The following LDIF example allows members of the Engineering Admins group to modify the
departmentNumberandmanagerattributes of all entries in the Engineering business category. This example uses LDAP filtering to select all entries withbusinessCategoryattributes set to Engineering:dn: dc=example,dc=com
objectClass: top
objectClass: organization
aci: (targetattr="departmentNumber || manager")
(targetfilter="(businessCategory=Engineering)")
(version 3.0; acl "eng-admins-write"; allow (write)
groupdn ="ldap:///cn=Engineering Admins, dc=example,dc=com";)
Targeting Attribute Values Using LDAP Filters
You can use access control to target specific attribute values. This means that you can grant or deny permissions on an attribute if that attribute's value meets the criteria defined in the ACI. An ACI that grants or denies access based on an attribute's value, is called a value-based ACI.
For example, you might grant all users in your organization permission to modify the
nsRoleDNattribute in their own entry. However, you would also want to ensure that they do not give themselves certain key roles such as "Top Level Administrator." LDAP filters are used to check that the conditions on attribute values are satisfied.To create a value based ACI, you must use the
targattrfilterskeyword with the following syntax:(targattrfilters="add=attr1:F1 && attr2:F2... && attrn:Fn,del=attr1:F1 && attr2:F2 ... && attrn:Fn")
addrepresents the operation of creating an attribute![]()
delrepresents the operation of deleting an attribute![]()
- attrx represents the target attributes
![]()
- Fx represents filters that apply only to the associated attribute
![]()
When creating an entry, if a filter applies to an attribute in the new entry, then each instance of that attribute must satisfy the filter. When deleting an entry, if a filter applies to an attribute in the entry, then each instance of that attribute must also satisfy the filter.
When modifying an entry, if the operation adds an attribute, then the add filter that applies to that attribute must be satisfied; if the operation deletes an attribute, then the delete filter that applies to that attribute must be satisfied. If individual values of an attribute already present in the entry are replaced, then both the add and delete filters must be satisfied.
For example consider the following attribute filter:
(targattrfilters="add=nsroleDN:(!(nsRoleDN=cn=superAdmin)) && telephoneNumber:(telephoneNumber=123*))
This filter can be used to allow users to add any role (
nsRoleDNattribute) to their own entry, except thesuperAdminrole. It also allows users to add a telephone number with a 123 prefix.
Targeting a Single Directory Entry
Targeting a single directory entry is not straightforward because it goes against the design philosophy of the access control mechanism. However, it can be done:
- By creating a bind rule that matches user input in the bind request with an attribute value stored in the targeted entry. For more details, see "Defining Access Based on Value Matching".
![]()
- By using the
targetattrandtargetfilterkeywords![]()
You can use the
targetattrkeyword to specify an attribute that is only present in the entry you want to target, and not in any of the entries below your target. For example, if you want to targetou=people,dc=example,dc=com, and there aren't any organizational units (ou) defined below that node you could specify an ACI that contains:A safer method is to use the
targetfilterkeyword and to explicitly specify an attribute value that appears in the entry alone. For example, during the installation of the Directory Server, the following ACI is created:aci: (targetattr="*")(targetfilter=(o=NetscapeRoot))(version 3.0; acl "Default anonymous access"; allow (read, search) userdn="ldap:///anyone";)
This ACI can apply only to the
o=NetscapeRootentry.The risk associated with these methods is that your directory tree might change in the future, and you would have to remember to modify this ACI.
Permissions specify the type of access you are allowing or denying. You can either allow or deny permission to perform specific operations in the directory. The various operations that can be assigned are known as rights.
There are two parts to setting permissions:
You can either explicitly allow or deny access permissions to your directory tree. For more guidelines on when to allow and when to deny access, refer to the Netscape Directory Server Deployment Guide.
From the Server Console, you cannot explicitly deny access, but only grant permissions.
Rights detail the specific operations a user can perform on directory data. You can allow or deny all rights, or you can assign one or more of the following rights:
Read. Indicates whether users can read directory data. This permission applies only to the search operation.
Write. Indicates whether users can modify an entry by adding, modifying, or deleting attributes. This permission applies to the modify and modrdn operations.
Add. Indicates whether users can create entries. This permission applies only to the add operation.
Delete. Indicates whether users can delete entries. This permission applies only to the delete operation.
Search. Indicates whether users can search for the directory data. Users must have Search and Read rights in order to view the data returned as part of a search result. This permission applies only to the search operation.
Compare. Indicates whether the users can compare data they supply with data stored in the directory. With compare rights, the directory returns a success or failure message in response to an inquiry, but the user cannot see the value of the entry or attribute. This permission applies only to the compare operation.
Selfwrite. Indicates whether users can add or delete their own DN from a group. This right is used only for group management.
Proxy. Indicates whether the specified DN can access the target with the rights of another entry. For an overview of proxy access, refer to the Netscape Directory Server Deployment Guide.
All. Indicates that the specified DN has all rights (read, write, search, delete, compare, and selfwrite) to the targeted entry, excluding proxy rights.
Rights are granted independently of one another. This means, for example, that a user who is granted add rights can create an entry but cannot delete it if delete rights have not been specifically granted. Therefore, when planning the access control policy for your directory, you must ensure that you grant rights in a way that makes sense for users. For example, it doesn't usually make sense to grant write permission without granting read and search permissions.
The proxy mechanism is very powerful and must be used sparingly. Proxy rights are granted within the scope of the ACL and there is no way to restrict who an entry that has the proxy right can impersonatethat is, when you grant a user proxy rights, that user has the ability to proxy for any user under the target; there is no way to restrict the proxy rights to only certain users. For example, if an entity has proxy rights to the
dc=example,dc=comtree, that entity can do anything. So, make sure you set the proxy ACI at the lowest possible level of the DIT; see "Proxied Authorization ACI Example".For a general overview, see "Proxy Authentication" in Chapter 7, "Designing a Secure Directory" of Netscape Directory Server Deployment Guide.
Rights Required for LDAP Operations
This section describes the rights you need to grant to users depending on the type of LDAP operation you want to authorize them to perform.
- Grant add permission on the entry being added.
![]()
- Grant write permission on the value of each attribute in the entry. This right is granted by default but could be restricted using the
targattrfilterskeyword.![]()
- Grant delete permission on the entry to be deleted.
![]()
- Grant write permission on the value of each attribute in the entry. This right is granted by default but could be restricted using the
targattrfilterskeyword.![]()
Modifying an attribute in an entry:
- Grant write permission on the attribute type.
![]()
- Grant write permission on the value of each attribute type. This right is granted by default but could be restricted using the
targattrfilterskeyword.![]()
Modifying the RDN of an entry:
- Grant write permission on the entry.
![]()
- Grant write permission on the attribute type used in the new RDN.
![]()
- Grant write permission on the attribute type used in the old RDN, if you want to grant the right to delete the old RDN.
![]()
- Grant write permission on the value of attribute type used in the new RDN. This right is granted by default but could be restricted using the
targattrfilterskeyword.![]()
Comparing the value of an attribute:
- Grant search permission on each attribute type used in the search filter.
![]()
- Grant read permission on attribute types used in the entry.
![]()
The permissions you need to set up to allow users to search the directory are more readily understood with an example. Consider the following
ldapsearchoperation:% ldapsearch -h host -s base -b "uid=bkolics,
dc=example,dc=com" objectclass=* mailThe following ACI is used to determine whether user
bkolicscan be granted access:aci: (targetattr = "mail")(version 3.0; acl "self access to mail"; allow (read, search) userdn = "ldap:///self";)
The search result list is empty, because this ACI does not grant access to the objectclass attribute. If you want the search operation described above to be successful, you must modify the ACI to read as follows:
aci: (targetattr = "mail || objectclass")(version 3.0; acl "self access to mail"; allow (read, search) userdn = "ldap:///self";)
In an ACI statement, the syntax for permissions is:
where rights is a list of 1 to 8 comma-separated keywords enclosed within parentheses. Valid keywords are
read,write,add,delete,search,compare,selfwrite,proxy, orall.In the following example, read, search, and compare access is allowed, provided the bind rule is evaluated to be true:
aci: (target="ldap:///dc=example,dc=com") (version 3.0;acl "example";
allow (read, search, compare) bind_rule;)
Depending on the ACIs defined for the directory, for certain operations, you need to bind to the directory. Binding means logging in or authenticating yourself to the directory by providing a bind DN and password, or, if using SSL, a certificate. The credentials provided in the bind operation, and the circumstances of the bind determine whether access to the directory is allowed or denied.
Every permission set in an ACI has a corresponding bind rule that details the required credentials and bind parameters.
Bind rules can be simple. For example, a bind rule can simply state that the person accessing the directory must belong to a specific group. Bind rules can also be more complex. For example, a bind rule can state that a person must belong to a specific group and must log in from a machine with a specific IP address, between 8 am and 5 pm.
Bind rules define who can access the directory, when, and from where. More specifically, bind rules can specify:
- Users, groups, and roles that are granted access
![]()
- Location from which an entity must bind
![]()
- Time or day on which binding must occur
![]()
- Type of authentication that must be in use during binding
![]()
Additionally, bind rules can be complex constructions that combine these criteria by using Boolean operators. See "Using Boolean Bind Rules" for more information.
Whether access is allowed or denied depends on whether an ACI's bind rule is evaluated to be true. Bind rules use one of the two following patterns:
where equal (=) indicates that keyword and expression must match in order for the bind rule to be true, and not equal (!=) indicates that keyword and expression must not match in order for the bind rule to be true.
The timeofday keyword also supports the inequality expressions (<, <=, >, >=). This is the only keyword that supports these expressions.
The quotation marks (
"") around expression and the delimiting semicolon (;) are required. The expressions you can use depend on the associated keyword.The following table lists each keyword and the associated expressions. It also indicates whether wildcard characters are allowed in the expression.
Table 6-2 LDIF Bind Rule Keywords
The sections that follow contain further detail on bind rule syntax for each keyword.
Defining User Access - userdn Keyword
User access is defined using the
userdnkeyword. Theuserdnkeyword requires one or more valid distinguished names in the following format :userdn = "ldap:///dn [|| ldap:///dn]...[||ldap:///dn]"
where dn can be a DN or one of the expressions
anyone,all,self, orparent:
userdn = "ldap:///anyone" - defines anonymous access
userdn = "ldap:///all" - defines general access
userdn ="ldap:///self" - defines self access
userdn ="ldap:///parent" - defines access for the parent entryThe
userdnkeyword can also be expressed as an LDAP filter of the form:
If a DN contains a comma, the comma must be preceded by a backslash (\) escape character.
Anonymous Access (anyone Keyword)
Granting anonymous access to the directory means that anyone can access it without providing a bind DN or password, and regardless of the circumstances of the bind. You can limit anonymous access to specific types of access (for example, access for read or access for search) or to specific subtrees or individual entries within the directory.
From the Server Console, you define anonymous access through the Access Control Editor. See "Creating ACIs From the Console".
You can use bind rules to indicate that a permission applies to anyone who has successfully bound to the directory; that is, all authenticated users. This allows general access while preventing anonymous access.
From the Server Console, you define general access on the Access Control Editor. For more information, see "Creating ACIs From the Console".
Specifies that users are granted or denied access to their own entries. In this case, access is granted or denied if the bind DN matches the DN of the targeted entry.
From the Server Console, you set up self access on the Access Control Editor. For more information, see "Creating ACIs From the Console".
Parent Access (parent Keyword)
Specifies that users are granted or denied access to the entry only if their bind DN is the parent of the targeted entry.
You cannot set up parent access control using the Server Console.
You can dynamically target users in ACIs using a URL with a filter as follows:
userdn = "ldap:///<suffix>??sub?(filter)"
For example, all users in the accounting and engineering branches of the
example.comtree would be granted or denied access to the targeted resource dynamically based on the following URL:userdn = "ldap:///dc=example,dc=com??sub?(|(ou=engineering)
(ou=accounting))"
Do not specify a hostname or port number within the LDAP URL. LDAP URLs always apply to the local server.
For more information about LDAP URLs, see Appendix C "LDAP URLs."
You can also specify a set of users by using the wildcard character (*). For example, specifying a user DN of
uid=u*,dc=example,dc=comindicates that only users with a bind DN beginning with the letteruwill be allowed or denied access based on the permissions you set.From the Server Console, you set user access from the Access Control Editor. For more information, see "Creating ACIs From the Console".
This section contains examples of the
userdnsyntax.Userdn keyword containing an LDAP URL:
userdn = "ldap:///uid=*,dc=example,dc=com";
The bind rule is evaluated to be true if the user binds to the directory using any distinguished name of the specified pattern. For example, both of the following bind DNs would be evaluated to be true:
uid=ssarette,dc=example,dc=com
uid=tjaz,ou=Accounting,dc=example,dc=comwhereas the following bind DN would be evaluated to be false:
cn=Babs Jensen,dc=example,dc=comUserdn keyword containing logical OR of LDAP URLs:
userdn="ldap:///uid=bj,c=example.com || ldap:///uid=kc,dc=example,dc=com";
The bind rule is evaluated to be true if the client binds as either of the two supplied distinguished names.
Userdn keyword excluding a specific LDAP URL:
userdn != "ldap:///uid=*,ou=Accounting,dc=example,dc=com";
The bind rule is evaluated to be true if the client is not binding as a UID-based distinguished name in the accounting subtree. This bind rule only makes sense if the targeted entry is not under the accounting branch of the directory tree.
Userdn keyword containing self keyword:
The bind rule is evaluated to be true if the user is accessing the entry represented by the DN with which the user bound to the directory. That is, if the user has bound as
uid=ssarette,dc=example,dc=comand the user is attempting an operation on theuid=ssarette,dc=example,dc=comentry, then the bind rule is true.For example, if you want to grant all users in the
example.comtree write access to theiruserPasswordattribute, you would create the following ACI on thedc=example,dc=comnode.aci: (targetattr = "userPassword") (version 3.0; acl "write-self"; allow (write) userdn = "ldap:///self";)
Userdn keyword containing the all keyword:
The bind rule is evaluated to be true for any valid bind DN. To be true, a valid distinguished name and password must have been presented by the user during the bind operation.
For example, if you want to grant read access to the entire tree to all authenticated users, you would create the following ACI on the
dc=example,dc=comnode:aci:(version 3.0; acl "all-read"; allow (read) userdn="ldap:///all";)
Userdn keyword containing the anyone keyword:
The bind rule is evaluated to be true for anyone; use this keyword to provide anonymous access to your directory.
For example, if you want to allow anonymous read and search access to the entire
example.comtree, you would create the following ACI on thedc=example,dc=comnode:aci: (version 3.0; acl "anonymous-read-search"; allow (read, search) userdn = "ldap:///anyone";)
Userdn keyword containing the parent keyword:
The bind rule is evaluated to be true if the bind DN is the parent of the targeted entry.
For example, if you want to grant write access to every user's child entries, you would create the following ACI on the
dc=example,dc=comnode:
aci:(version 3.0; acl "parent access"; allow (write) userdn="ldap:///parent";)userdn = "ldap:///dc=example,dc=com???(|(ou=engineering)
(ou=sales))";The bind rule is evaluated to be true if the user belongs to the engineering or sales subtree.
Defining Group Access - groupdn Keyword
Members of a specific group can access a targeted resource. This is known as group access. Group access is defined using the
groupdnkeyword to specify that access to a targeted entry will be granted or denied if the user binds using a DN that belongs to a specific group.The
groupdnkeyword requires one or more valid distinguished names in the following format :groupdn="ldap:///dn [|| ldap:///dn]...[|| ldap:///dn]"
The bind rule is evaluated to be true if the bind DN belongs to the named group.
If a DN contains a comma, the comma must be escaped by a backslash (\).
From the Server Console, you can define specific groups using the Access Control Editor. For more information, see "Creating ACIs From the Console".
This section contains examples of the
groupdnsyntax.Groupdn keyword containing an LDAP URL:
groupdn = "ldap:///cn=Administrators,dc=example,dc=com";
The bind rule is evaluated to be true if the bind DN belongs to the Administrators group. If you wanted to grant the Administrators group permission to write to the entire directory tree, you would create the following ACI on the
dc=example,dc=comnode:aci: (version 3.0; acl "Administrators-write"; allow (write) groupdn="ldap:///cn=Administrators,dc=example,dc=com";)
Groupdn keyword containing logical OR of LDAP URLs:
groupdn = "ldap:///cn=Administrators,dc=example,dc=com" || "ldap:///cn=Mail Administrators,dc=example,dc=com";
The bind rule is evaluated to be true if the bind DN belongs to either the Administrators or the Mail Administrators group.
Defining Role Access - roledn Keyword
Members of a specific role can access a targeted resource. This is known as role access. Role access is defined using the
rolednkeyword to specify that access to a targeted entry will be granted or denied if the user binds using a DN that belongs to a specific role.The
rolednkeyword requires one or more valid distinguished names in the following format :roledn = "ldap:///dn [|| ldap:///dn]... [|| ldap:///dn]"
The bind rule is evaluated to be true if the bind DN belongs to the specified role.
If a DN contains a comma, the comma must be escaped by a backslash (\).
The
rolednkeyword has the same syntax and is used in the same way as thegroupdnkeyword.Defining Access Based on Value Matching
You can set bind rules to specify that an attribute value of the entry used to bind to the directory must match an attribute value of the targeted entry.
For example, you can specify that the bind DN must match the DN in the
managerattribute of a user entry in order for the ACI to apply. In this case, only the user's manager would have access to the entry.This example is based on DN matching. However, you can match any attribute of the entry used in the bind with the targeted entry. For example, you could create an ACI that allowed any user whose
favoriteDrinkattribute is "beer" to read all the entries of other users that have the same value forfavoriteDrink.The
userattrkeyword can be used to specify which attribute values must match between the entry used to bind and the targeted entry. You can specify:The LDIF syntax of the
userattrkeyword is as follows:userattr = "attrName#bindType"
or, if you are using an attribute type that requires a value other than a user DN, group DN, role DN, or an LDAP filter:
userattr = "attrName#attrValue"
- attrName is the name of the attribute used for value matching
![]()
- bindType is one of
USERDN,GROUPDN,LDAPURL![]()
- attrValue is any string representing an attribute value
![]()
The following sections provide examples of the
userattrkeyword with the various possible bind types.The following is an example of the
userattrkeyword associated with a bind based on the user DN:The bind rule is evaluated to be true if the bind DN matches the value of the
managerattribute in the targeted entry. You can use this to allow a user's manager to modify employees' attributes. This mechanism only works if themanagerattribute in the targeted entry is expressed as a full DN.The following example grants a manager full access to his or her employees' entries:
aci: (target="ldap:///dc=example,dc=com")(targetattr=*) (version 3.0;
acl "manager-write"; allow (all) userattr = "manager#USERDN";)Example with GROUPDN Bind Type
The following is an example of the
userattrkeyword associated with a bind based on a group DN:The bind rule is evaluated to be true if the bind DN is a member of the group specified in the
ownerattribute of the targeted entry. For example, you can use this mechanism to allow a group to manage employees' status information. You can use an attribute other thanowner, as long as the attribute you use contains the DN of a group entry.The group you point to can be a dynamic group, and the DN of the group can be under any suffix in the database. However, the evaluation of this type of ACI by the server is very resource intensive.
If you are using static groups that are under the same suffix as the targeted entry, you can use the following expression:
userattr = "ldap:///dc=example,dc=com?owner#GROUPDN"
In this example, the group entry is under the
dc=example,dc=comsuffix. The server can process this type of syntax more quickly than the previous example.(By default,
owneris not an allowed entry in a user's entry. You would have to extend your schema to allow this attribute in apersonobject.)The following is an example of the
userattrkeyword associated with a bind based on a role DN:userattr = "exampleEmployeeReportsTo#ROLEDN"
The bind rule is evaluated to be true if the bind DN belongs to the role specified in the
exampleEmployeeReportsToattribute of the targeted entry. For example, if you create a nested role for all managers in your company, you can use this mechanism to grant managers at all levels access to information about employees that are at a lower grade than themselves.
This example assumes that you have added the
exampleEmployeeReportsToattribute to the schema, and that all employee entries contain this attribute. It also assumes that the value of this attribute is the DN of a role entry.For information on designing your schema, refer to Netscape Directory Server Deployment Guide. For information on adding attributes to the schema, see "Creating Attributes".
The DN of the role can be under any suffix in the database. If, in addition, you are using filtered roles, the evaluation of this type of ACI uses a lot of resources on the server.
If you are using a static role definition, and the role entry is under the same suffix as the targeted entry, you can use the following expression:
userattr = "ldap:///dc=example,dc=com?employeeReportsTo#ROLEDN"
In this example, the role entry is under the
dc=example,dc=comsuffix. The server can process this type of syntax more quickly than the previous example.Example With LDAPURL Bind Type
The following is an example of the
userattrkeyword associated with a bind based on an LDAP filter:The bind rule is evaluated to be true if the bind DN matches the filter specified in the myfilter attribute of the targeted entry. The myfilter attribute can be replaced by any attribute that contains an LDAP filter.
Example With Any Attribute Value
The following is an example of the
userattrkeyword associated with a bind based on any attribute value:userattr = "favoriteDrink#Beer"
The bind rule is evaluated to be true if the bind DN and the target DN include the
favoriteDrinkattribute with a value ofBeer.Using the userattr Keyword With Inheritance
When you use the
userattrkeyword to associate the entry used to bind with the target entry, the ACI applies only to the target specified and not to the entries below it. In some circumstances, you might want to extend the application of the ACI several levels below the targeted entry. This is possible by using the parent keyword, and specifying the number of levels below the target that should inherit the ACI.When you use the
userattrkeyword in association with theparentkeyword, the syntax is as follows:userattr = "parent[inheritance_level].attrName#bindType"
or, if you are using an attribute type that requires a value other than a user DN, group DN, role DN, or an LDAP filter:
userattr = "parent[inheritance_level].attrName#attrValue"
- inheritance_level is a comma separated list that indicates how many levels below the target will inherit the ACI. You can include five levels
[0,1,2,3,4]below the targeted entry; zero (0) indicates the targeted entry.![]()
- attribute is the attribute targeted by the
userattrorgroupattrkeyword.![]()
- bindType can be one of
USERDN,GROUPDN,LDAPURL.![]()
userattr = "parent[0,1].manager#USERDN"
This bind rule is evaluated to be true if the bindDN matches the manager attribute of the targeted entry. The permissions granted when the bind rule is evaluated to be true apply to the target entry and to all entries immediately below it.
Example With userattr Inheritance
The example in Figure 6-1 indicates that user
bjensenis allowed to read and search thecn=Profilesentry as well as the first level of child entries which includescn=mailandcn=news, thus allowing her to search through her own mail and news IDs.Figure 6-1 Using Inheritance With the userattr Keyword
![]()
In this example, if you did not use inheritance you would have to do one of the following to achieve the same result:
- Explicitly set read and search access for user
bjensenon thecn=Profiles,cn=mail, andcn=newsentries in the directory.![]()
- Add the owner attribute with a value of
bjensento thecn=mailandcn=newsentries and then add the following ACI to thecn=mailandcn=newsentries.![]()
aci: (targetattr="*") (version 3.0; acl "profiles access"; allow (read,search) userattr="owner#USERDN";)
Granting Add Permission Using the userattr Keyword
If you use the
userattrkeyword in conjunction withalloraddpermissions, you might find that the behavior of the server is not what you expect. Typically, when a new entry is created in the directory, Directory Server evaluates access rights on the entry being created, and not on the parent entry. However, in the case of ACIs using theuserattrkeyword, this behavior could create a security hole, and the server's normal behavior is modified to avoid it.Consider the following example:
aci: (target="ldap:///dc=example,dc=com")(targetattr=*) (version 3.0;
acl "manager-write"; allow (all) userattr = "manager#USERDN";)This ACI grants managers all rights on the entries of employees that report to them. However, because access rights are evaluated on the entry being created, this type of ACI would also allow any employee to create an entry in which the manager attribute is set to their own DN. For example, disgruntled employee Joe (
cn=Joe,ou=eng,dc=example,dc=com), might want to create an entry in the Human Resources branch of the tree, to use (or misuse) the privileges granted to Human Resources employees.He could do this by creating the following entry:
dn: cn= Trojan Horse,ou=Human Resources,dc=example,dc=com
objectclass: top
...
cn: Trojan Horse
manager: cn=Joe,ou=eng,dc=example,dc=comTo avoid this type of security threat, the ACI evaluation process does not grant add permission at level 0, that is, to the entry itself. You can, however, use the
parentkeyword to grant add rights below existing entries. You must specify the number of levels below the parent for add rights. For example, the following ACI allows child entries to be added to any entry in thedc=example,dc=comthat has amanagerattribute that matches the bind DN:aci: (target="ldap:///dc=example,dc=com")(targetattr=*)
(version 3.0; acl "parent-access"; allow (add)
userattr = "parent[0,1].manager#USERDN";)This ACI ensures that add permission is granted only to users whose bind DN matches the manager attribute of the parent entry.
Defining Access From a Specific IP Address
Using bind rules, you can indicate that the bind operation must originate from a specific IP address. This is often used to force all directory updates to occur from a given machine or network domain.
The LDIF syntax for setting a bind rule based on an IP address is as follows:
ip = "IP_address" orip != "IP_address"The IP address must be expressed in dot notation.You can use the wildcard character (*) to include multiple machines. For example, the following string is valid:
The bind rule is evaluated to be true if the client accessing the directory is located at the named IP address. This can be useful for allowing certain kinds of directory access only from a specific subnet or machine.
For example, you could use a wildcard IP address such as 12.3.45.* to specify a specific subnetwork or 123.45.6.*+255.255.255.115 to specify a subnetwork mask.
From the Server Console, you can define specific machines to which the ACI applies through the Access Control Editor. For more information, see "Creating ACIs From the Console".
Defining Access from a Specific Domain
A bind rule can specify that the bind operation must originate from a particular domain or host machine. This is often used to force all directory updates to occur from a given machine or network domain.
The LDIF syntax for setting a bind rule based on the DNS host name is as follows:
dns = "DNS_Hostname" ordns != "DNS_Hostname"
The
dnskeyword requires that the naming service used on your machine is DNS. If the name service is not DNS, you should use theipkeyword instead.
The
dnskeyword requires a fully qualified DNS domain name. Granting access to a host without specifying the domain creates a potential security threat. For example, the following expression is allowed but not recommended:You should use a fully qualified name such as:
dns = "legend.eng.example.com";
The dns keyword allows wildcards. For example:
The bind rule is evaluated to be true if the client accessing the directory is located in the named domain. This can be useful for allowing access only from a specific domain. Note that wildcards will not work if your system uses a naming service other than DNS. In such a case, if you want to restrict access to a particular domain, use the ip keyword, as described in "Defining Access From a Specific IP Address".
Defining Access at a Specific Time of Day or Day of Week
You can use bind rules to specify that binding can only occur at a certain time of day or on a certain day of the week. For example, you can set a rule that will allow access only if it is between the hours of 8 am and 5 pm Monday through Friday. The time used to evaluate access rights is the time on the Directory Server, not the time on the client.
The LDIF syntax for setting a bind rule based on the time of day is as follows:
where operator can be one of the following symbols: equal to (=), not equal to (!=), greater than (>), greater than or equal to (>=), less than (<), or less than or equal to (<=).
The
timeofdaykeyword requires a time of day expressed in hours and minutes in the 24 hour clock (0 to 2359).
The time on the server is used for the evaluation, and not the time on the client.
The LDIF syntax for setting a bind rule based on the day in the week is as follows:
The possible values for the dayofweek keyword are the English three-letter abbreviations for the days of the week: sun, mon, tue, wed, thu, fri, sat.
The following are examples of the
timeofdayanddayofweeksyntax:
- The bind rule is evaluated to be true if the client is accessing the directory at noon.
- The bind rule is evaluated to be true if the client is accessing the directory at any time other than 1 am.
- The bind rule is evaluated to be true if the client is accessing the directory at any time after 8 am.
- The bind rule is evaluated to be true if the client is accessing the directory at any time before 6 pm.
- The bind rule is evaluated to be true if the client is accessing the directory at 8am or later.
- The bind rule is evaluated to be true if the client is accessing the directory at 6 pm or earlier.
- The bind rule is evaluated to be true if the client is accessing the directory on Sunday, Monday, or Tuesday.
Defining Access Based on Authentication Method
You can set bind rules that state that a client must bind to the directory using a specific authentication method. The authentication methods available are:
- NoneAuthentication is not required. This is the default. It represents anonymous access.
![]()
- SimpleThe client must provide a user name and password to bind to the directory.
![]()
- SSLThe client must bind to the directory over a Secure Sockets Layer (SSL) or Transport Layer Security (TLS) connection.
![]()
- In the case of SSL, the connection is established to the LDAPS second port; in the case of TLS, the connection is established through a Start TLS operation.In both cases, a certificate must be provided. For information on setting up SSL, see Chapter 11 "Managing SSL."
- SASLThe client must bind to the directory over a Simple Authentication and Security Layer (SASL) connection. Note that Directory Server does not provide a SASL module.
![]()
You cannot set up authentication-based bind rules through the Access Control Editor.
The LDIF syntax for setting a bind rule based on an authentication method is as follows:
authmethod = "authentication_method"where authentication_method is
none,simple,ssl, or"saslsasl_mechanism".The following are examples of the
authmethodkeyword:
- Authentication is not checked during bind rule evaluation.
- The bind rule is evaluated to be true if the client is accessing the directory using a username and password.
- The bind rule is evaluated to be true if the client authenticates to the directory using a certificate over LDAPS. This is not evaluated to be true if the client authenticates using simple authentication (bind DN and password) over ldaps.
authmethod = "sasl DIGEST-MD5";
- The bind rule is evaluated to be true if the client is accessing the directory using the SASL DIGEST-MD5 mechanism. The other supported SASL mechanism is EXTERNAL.
Bind rules can be complex expressions that use the Boolean expressions
AND,OR, andNOTto set very precise access rules. You cannot use the Server Console to create Boolean bind rules. You must create an LDIF statement.The LDIF syntax for a Boolean bind rule is as follows:
bind_rule [boolean][bind_rule][boolean][bind_rule]...;)
For example, the following bind rule will be evaluated to be true if the bind DN is a member of either the administrator's group or the mail administrator's group, and if the client is running from within the
example.comdomain:(groupdn = "ldap:///cn=administrators,dc=example,dc=com" or groupdn = "ldap:///cn=mail administrators,dc=example,dc=com" and dns = "*.example.com";)
The trailing semicolon (;) is a required delimiter that must appear after the final bind rule.
Boolean expressions are evaluated in the following order:
- Innermost to outermost parenthetical expressions first
![]()
- All expressions from left to right
![]()
- NOT before AND or OR operators
![]()
The Boolean
ORand BooleanANDoperators have no order of precedence.Consider the following Boolean bind rules:
(bind_rule_A) OR (bind_rule_B)
(bind_rule_B) OR (bind_rule_A)Because Boolean expressions are evaluated from left to right, in the first case, bind rule A is evaluated before bind rule B, and in the second case, bind rule B is evaluated before bind rule A.
However, the Boolean
NOTis evaluated before the BooleanORand BooleanAND. Thus, in the following example:
(bind_rule_A) AND NOT (bind_rule_B)bind rule B is evaluated before bind rule A despite the left-to-right rule.
Creating ACIs From the Console
You can use the Directory Server Console to view, create, edit, and delete access control instructions for your directory. This section provides general instructions for:
- Displaying the Access Control Editor
![]()
- Viewing Current ACIs
![]()
- Creating a New ACI
![]()
- Editing an ACI
![]()
- Deleting an ACI
![]()
See "Access Control Usage Examples" for a collection of access control rules commonly used in Directory Server security policies, along with step-by-step instructions for using the Directory Server Console to create them.
The Access Control Editor does not enable you to construct some of the more complex ACIs when you are in Visual editing mode. In particular, from the Access Control Editor you cannot:
- Deny access (see "Permissions Syntax")
![]()
- Create value-based ACIs (see "Targeting Attribute Values Using LDAP Filters")
![]()
- Define parent access (see "Parent Access (parent Keyword)")
![]()
- Create ACIs that contain Boolean bind rules (see "Using Boolean Bind Rules")
![]()
- Generally, create ACIs that use the following keywords:
roledn,userattr, authmethod![]()
In the Access Control Editor, you can click on the Edit Manually button at any time to check the LDIF representation of the changes you make through the graphical interface.
Displaying the Access Control Editor
- Start the Directory Server Console. Log in using the bind DN and password of a privileged user such as the directory manager who has write access to the ACIs configured for the directory.
![]()
- For instructions, refer to "Using the Directory Server Console".
- In the Directory Server Console, select the Directory tab.
![]()
- Right-click the entry in the navigation tree for which you want to set access control, and select Set Access Permissions from the pop-up menu (Figure 6-2).
![]()
- Alternatively, highlight the entry, and select Set Access Permissions from the Object menu.
Figure 6-2 Selecting an Object in the Navigation Tree to Set Access Control l
![]()
Figure 6-3 Access Control Editor Window
![]()
For information on navigating through the Access Control dialog boxes, refer to the online help.
If you want to see what ACIs apply to a particular subtree in your directory, follow these steps:
- In the Directory tab, right-click the top entry in the subtree, and choose Set Access Permissions from the pop-up menu.
![]()
- The Access Control Manager window is displayed. It contains the list of ACIs belonging to the entry.
- Check the checkbox for Show Inherited ACIs, if you want to display the full list of ACIs that apply to the entry.
![]()
- Display the Access Control Editor.
![]()
- This task is explained in "Displaying the Access Control Editor".
- If the view displayed is different from Figure 6-3, click the Edit Visually button.
- Name the ACI, by typing a name in the ACI Name text box.
![]()
- The name can be any string you want to use to uniquely identify the ACI. If you do not enter a name, the server uses
unnamed ACI.
- In the Users/Groups tab, select the users to whom you are granting access by highlighting All Users, or clicking the Add button to search the directory for the users to add.
![]()
- In the Add Users and Groups window:
- Select a search area from the drop-down list, enter a search string in the Search field, and click the Search button.
![]()
- The search results are displayed in the list below.
- Highlight the entries you want in the search result list, and click the Add button to add them to the list of entries which have access permission.
![]()
- Click OK to dismiss the Add Users and Groups window.
![]()
- The entries you selected are now listed on the Users/Groups tab in the ACI editor.
- In the Access Control Editor, click the Rights tab, and use the checkboxes to select the rights to grant.
![]()
- Click the Targets tab, then click This Entry to display the node targeted by the ACI.
![]()
- You can change the value of the target DN, but the new DN must be a direct or indirect child of the selected entry.
- If you do not want every entry in the subtree under this node to be targeted by the ACI, you must enter a filter in the Filter for Sub-entries field.
- Additionally, you can restrict the scope of the ACI to only certain attributes by selecting the attributes you want to target in the attribute list.
- Click the Hosts tab, then the Add button to display the Add Host Filter dialog box.
![]()
- You can specify a hostname or an IP address. If you specify an IP address, you can use the wildcard character (*).
- Click the Times tab to display the table showing at what times access is allowed.
![]()
- By default, access is allowed at all times. You can change the access times by clicking and dragging the cursor over the table. You cannot select discrete blocks of time.
- When you have finished editing the ACI, click OK.
![]()
- The ACI Editor is dismissed and the new ACI is listed in the ACI Manager window.
- In the Directory tab, right-click the top entry in the subtree, and choose Set Access Permissions from the pop-up menu.
![]()
- The Access Control Manager window is displayed. It contains the list of ACIs belonging to the entry.
- In the Access Control Manager window, highlight the ACI that you want to edit, and click Edit.
![]()
- The Access Control Editor is displayed. For details on the information you can edit using this dialog box, refer to the online help.
- Make the changes you want under the various tabs of the Access Control Editor.
![]()
- When you have finished editing the ACI, click OK.
![]()
- The ACI Editor is dismissed, and the modified ACI is listed in the ACI Manager.