8 Internet-Draft E. Stokes
9 LDAP Extensions WG B. Blakley
10 Intended Category: Standards Track Tivoli Systems
11 Expires: 14 January 2001 D. Rinkevich
17 Access Control Model for LDAPv3
18 <draft-ietf-ldapext-acl-model-06.txt>
22 This document is an Internet-Draft and is in full
23 conformance with all provisions of Section 10 of RFC2026.
25 Internet-Drafts are working documents of the Internet
26 Engineering Task Force (IETF), its areas, and its working
27 groups. Note that other groups may also distribute working
28 documents as Internet-Drafts. Internet-Drafts are draft
29 documents valid for a maximum of six months and may be
30 updated, replaced, or obsoleted by other documents at any
31 time. It is inappropriate to use Internet-Drafts as
32 reference material or to cite them other than as "work in
35 The list of current Internet-Drafts can be accessed at
36 http://www.ietf.org/ietf/1id-abstracts.txt
38 The list of Internet-Draft Shadow Directories can be
39 accessed at http://www.ietf.org/shadow.html.
41 Comments and suggestions on this document are encouraged.
42 Comments on this document should be sent to the LDAPEXT
43 working group discussion list:
45 ietf-ldapext@netscape.com
49 Copyright (C) The Internet Society (2000). All Rights
54 This document describes the access control model for the
55 Lightweight Directory Application Protocol V3 (LDAPv3)
56 directory service. It includes a description of the model,
57 the LDAP controls, and the extended operations to the LDAP
58 protocol. The current LDAP APIs are sufficient for most
62 Stokes, et al Expires 14 January 2001 [Page 1]
68 Internet-Draft Access Control Model 14 July 2000
72 access control operations. An API (in a separate document)
73 is needed for the extended operation getEffectiveAccess. A
74 separate requirements document for access control exists
75 [REQTS]. The access control model used the requirements
76 documents as a guideline for the development of this
77 specification and are reflected in this specification to the
78 extent that the working group could agree on an access
82 The key words "MUST", "MUST NOT", "REQUIRED", "SHALL",
83 "SHALL NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", and
84 "MAY" used in this document are to be interpreted as
85 described in [Bradner97].
91 The ability to securely access (replicate and distribute)
92 directory information throughout the network is necessary
93 for successful deployment. LDAP's acceptance as an access
94 protocol for directory information is driving the need to
95 provide an access control model definition for LDAP
96 directory content among servers within an enterprise and the
97 Internet. Currently LDAP does not define an access control
98 model, but one is needed to ensure consistent secure access,
99 replication, and management across heterogeneous LDAP
100 implementations. The major objective is to provide a simple,
101 usable, and implementable, but secure and efficient access
102 control model for LDAP while also providing the appropriate
103 flexibility to meet the needs of both the Internet and
104 enterprise environments and policies. This document defines
105 the model and the protocol extensions (controls and extended
108 This draft does not (and cannot) fully specify the behavior
109 of the Access Control Model in a distributed environment
110 (e.g. propagating access control information across servers
111 and ACI administration) because there is no LDAP standard
112 defining how to distribute directory data between LDAP
113 servers. The behavior of the Access Control Model in
114 distributed environments is beyond the scope of this draft.
118 2. The LDAPv3 Access Control Model
120 Access Control mechanisms evaluate requests for access to
121 protected resources and make decisions about whether those
122 requests should be granted or denied. In order to make a
126 Stokes, et al Expires 14 January 2001 [Page 2]
132 Internet-Draft Access Control Model 14 July 2000
136 grant/deny decision about a request for access to a
137 protected resource, an access control mechanism needs to
138 evaluate policy data. This policy data describes security-
139 relevant characteristics of the requesting subject and the
140 rules which govern the use of the target object.
142 No mechanism is defined in this document for storage of
143 access control information at the server beyond indicating
144 that the attribute holding access control information is an
145 operational attribute.
147 The access control mechanisms specified in this document are
148 neutral with respect to policy inheritance mechanisms,
149 explicit vs. implicit denial, and group nesting.
151 The access control model defines
153 - What flows on the wire for interoperability
155 The existing LDAP protocol flows for ldap operations
156 are used to manipulate access control information. A
157 set of permissions and their semantics with respect to
158 ldap operations is defined. The permissions parallel
159 the types of ldap operations defined. What is
160 transmitted is exactly what is read back. Encoding of
161 access control information on the wire is per the
162 LDAPv3 specifications.
164 There is an additional LDAP control and extended
165 protocol operation defined, getEffectiveRights. LDAP
166 clients use the control and extended operation to
167 manage and administer access control policy enforced by
170 Servers may store access control information in any way
171 they choose. In particular, servers may use the access
172 control mechanisms of their datastores to store and
173 enforce LDAP access control, or they may implement
174 access control managers external to their datastores.
175 Datastores and external access control managers MAY
176 implement any access control rule syntax and semantics
177 they choose, but the semantics MUST be compatible with
178 those defined in the section titled "Operational
179 Semantics of Access Control Operations".
181 - Attributes and classes for application portability of
182 access control information
184 An access control information attribute (ldapACI) for
185 application portability: This attribute is used as
186 input to the LDAP APIs so access control information
190 Stokes, et al Expires 14 January 2001 [Page 3]
196 Internet-Draft Access Control Model 14 July 2000
200 can be addressed uniformly independent of how that
201 information is addressed and stored at the server.
202 This same attribute appears in LDIF output for
203 interchange of access control information.
205 An access control information subentry class
206 (ldapACISubEntry) and a set of attributes
207 (supportedAccessControlSchemes which is used in the
208 rootDSE and accessControlSchemes which is used in the
209 subentry ldapACISubEntry) to identity the access
210 control mechanisms supported by a server and in a given
211 part of the namespace, respectively.
213 - An attribute in the rootDSE, discloseOnError, to
214 control whether it is permissible for the server to
215 return the name of an entry or attribute in an error
216 (or empty set) operation result. This closes a hole on
217 the ability to discover information you are not
218 authorized to discover.
220 - A mechanism to control access to access control
221 information: The access control information attribute,
222 ldapACI, is used to control access to access control
223 information (controls access to itself). How to get an
224 initial ldapACI in the directory is server specific and
225 beyond the scope of this model.
227 Servers can support multiple access control mechanisms, but
228 MUST be capable of supporting the LDAP Mechanism in the DIT
229 scoped by the rootDSE (entire server's DIT) for that server
230 and SHOULD be capable of supporting the LDAP mechanism in an
231 arbitrary part (subtree) of the DIT.
233 The accessControlSchemes attribute in the ldapACISubEntry
234 indicates which access control mechanism is in effect for
235 the scope of that ldapACISubEntry. The
236 supportedAccessControlSchemes attribute in the rootDSE
237 indicates which acess control mechanisms are supported by
238 the server; those mechanisms are in effect in that server's
239 DIT unless overridden by a mechanism defined in a
240 ldapACISubEntry elsewhere in that DIT.
242 Changing the value(s) of either the
243 supportedAccessControlSchemes or accessControlSchemes
244 attributes changes the mechanism(s) in effect for the scope
245 of those attributes (where scope is either that of the
246 rootDSE or ldapACISubEntry).
248 Through the use of the mechanism rootDSE attribute and
249 ldapACI subentry, it is possible to run multiple mechanisms
250 in either the same subtree or separate subtrees. If two
254 Stokes, et al Expires 14 January 2001 [Page 4]
260 Internet-Draft Access Control Model 14 July 2000
264 mechanisms are run in the same subtree, it is desirable that
265 the result be the same independent of mechanism, but
266 definition and discussion of this is beyond the scope of
271 3. Access Control Mechanism Attributes
273 Two attributes are defined to identify which access control
274 mechanisms are supported by a given server and by a given
275 subtree: supportedAccessControlSchemes and
276 accessControlSchemes. (We chose these names based on the
277 X.500 attribute, AccessControlScheme which is single-valued
278 and defined in X.501).
281 3.1 Root DSE Attribute for Access Control Mechanism
283 The server advertises which access control mechanisms it
284 supports by inclusion of the 'supportedAccessControlSchemes'
285 attribute in the root DSE. This attribute is a list of
286 OIDs, each of which identify an access control mechanism
287 supported by the server. By default, these are also the
288 mechanisms in effect in subtrees beneath the root in that
289 server unless overridden by a ldapACISubEntry (see section
290 "Subentry Class Access Control Mechanism").
292 (<OID to be assigned>
293 NAME 'supportedAccessControlSchemes'
294 DESC list of access control mechanisms supported
295 by this directory server
300 The access control mechanism defined is:
301 LDAPv3 <OID to be assigned>
303 Other vendor access control mechanisms MAY be defined (by
304 OID) and are the responsibility of those vendors to provide
305 the definition and OID.
308 3.2 Root DSE Attribute for Control of Disclosing Errors
310 The server specifies whether it is permissible for the name
311 of an entry or attribute to be disclosed in an error (or
312 empty) operation result. This rootDSE attribute is
313 discloseOnError. The default for discloseOnError is false
314 (0) or not to disclose on error. The lack of this attribute
318 Stokes, et al Expires 14 January 2001 [Page 5]
324 Internet-Draft Access Control Model 14 July 2000
328 in the rootDSE is interpreted as the default.
330 (<OID to be assigned>
331 NAME 'discloseOnError'
332 DESC specify whether to return the name of an
333 entry or attribute in an error (or
334 empty) operation result; 0=do not
335 disclose (default); 1=disclose
340 3.3 Subentry Class Access Control Mechanism
342 A given naming context MUST provide information about which
343 access control mechanisms are in effect for that portion of
344 the namespace. This information is contained in a subentry
345 (ldapACISubEntry class), derived from [SUBENTRY].
346 ldapACISubEntry MAY be used to define the scope of an access
347 control mechanism. The value(s) held in the rootDSE
348 attribute, supportedAccessControlSchemes, are the mechanisms
349 in effect in subtrees beneath the root in that server unless
350 overridden in a ldapACISubEntry further down the tree held
351 by that server. The scope of that ldapACISubEntry is to the
352 end of the subtree held by that server or until another
353 ldapACISubEntry is encountered in that subtree held by that
354 server. The ldapACISubEntry class is defined as:
357 ( <OID to be assigned>
358 NAME 'ldapACISubEntry'
359 DESC 'LDAP ACI Subentry class'
360 SUP ldapSubEntry STRUCTURAL
361 MUST ( accessControlSchemes )
364 The accessControlSchemes attribute MUST be in each ldap
365 access control subentry entry associated with a naming
366 context whose access control mechanism is different from
367 adjacent naming contexts supported by that directory server.
368 accessControlSchemes lists the values (list of OIDs) that
369 define the access control mechanisms in effect for the scope
370 of that ldap access control subentry. Although, in general,
371 this attribute will define only a single mechanism (single
372 value), more than one mechanism MAY be in effect for the
373 scope of that subentry.
375 (<OID to be assigned>
376 NAME 'accessControlSchemes'
377 DESC list of access control mechanisms supported
382 Stokes, et al Expires 14 January 2001 [Page 6]
388 Internet-Draft Access Control Model 14 July 2000
398 4. The Access Control Information Attribute (ldapACI)
400 The access control information attribute, ldapACI, is
403 (<OID to be assigned>
405 DESC 'ldap access control information'
406 EQUALITY caseIgnoreMatch
407 SYNTAX directoryString
408 USAGE directoryOperation
411 The intent of the attribute definition is to design a common
412 interchange format. Any given LDAP server should be able to
413 translate the below defined attribute into meaningful
414 operation requests. Each server should be able to understand
415 the attribute; there should not be any ambiguity into what
416 any part of the syntax means.
418 While the end goal is to have a common behavior model
419 between different LDAP server implementations, the attribute
420 definition alone will not ensure identical ACL processing
421 behavior between servers. The semantics of how a server
422 interprets the ACI syntax are defined in the "Operational
423 Semantics of Access Control" section of this document.
424 Additionally, while the server must recognize and act on the
425 attribute when received over the wire, there are no
426 requirements for the server to physically store this
429 The attribute definition maintains an assumption that the
430 receiving server supports inheritance within the security
431 model. If the server does not support inheritance, the
432 receiving server must expand any inherited information based
433 on the scope flag. If the server does not support partial
434 inheritance and both the entry and subtree scope are used,
435 then entry is the prevailing scope. (It is possible for two
436 values in the ldapACI attribute to have different scopes
437 given the syntax of ldapACI; one might contain 'entry' and
438 another might contain 'subtree'. This implies that some
439 ldapACI values inherit down the DIT and othersdo not - hence
440 partial inheritance of the ldapACI attribute.)
442 The attribute is defined so access control information (ACI)
446 Stokes, et al Expires 14 January 2001 [Page 7]
452 Internet-Draft Access Control Model 14 July 2000
456 can be addressed in a server independent of server
457 implementation. This attribute is used in typical LDAP APIs
458 and in LDIF output of ACI. This attribute may be queried or
459 set on all directory objects. The BNF and definitions are
466 4.1.1 ACI String Representation
468 Values of this syntax are encoded according to the
469 following BNF which follows the BNF encoding
470 conventions described in [ABNF]:
472 ldapACI = scope "#" rights "#" attr "#" subject
474 scope = "entry" / "subtree"
476 rights = (("grant:" / "deny:") permissions) /
477 ("grant:" permissions ";deny:" permissions)
479 permissions = [permission *("," permission)]
481 permission = "a" / ; add
490 "w" / ; write (mod-add)
491 "o" / ; obliterate (mod-del)
495 attr = "[all]" / "[entry]" / (attribute *("," attribute))
497 attribute = ; OID syntax (1.3.6.1.4.1.1466.115.121.1.38)
500 subject = ["authnLevel:" authnLevel ":"]
501 (("authzID-" authzID) /
505 ("ipAddress:" ipAddress) /
510 Stokes, et al Expires 14 January 2001 [Page 8]
516 Internet-Draft Access Control Model 14 July 2000
530 mechanism = ; sasl mechanism from 4.2 of [LDAPv3]
532 authzID = ; authzID from [AuthMeth] repeated below
535 authzId = dnAuthzId / uAuthzId
537 ; distinguished-name-based authz id.
540 dn = utf8string ; with syntax defined in [UTF]
542 ; unspecified userid, UTF-8 encoded.
543 uAuthzId = "u:" userid
544 userid = utf8string ; syntax unspecified
546 ipAddress = printableString
547 ; dotted decimal form (e.g. 10.0.0.6)
548 ; or use wildcards such as 12.3.45.* to
549 ; specify a specific subnetwork
550 ; or 123.45.6.*+255.255.255.115 to
551 ; specify a subnetmask
552 ; or use a wildcard domain name such as
553 ; *.airius.com to specify a specific
556 printableString ; printableString syntax from [ATTR]
559 Note that the colon following the "public" and "this"
560 subject options exist only to simplify string parsing.
562 Note also that per [AuthMeth], authzID may be expanded in
565 See section titled 'ACI Examples' for examples of the string
574 Stokes, et al Expires 14 January 2001 [Page 9]
580 Internet-Draft Access Control Model 14 July 2000
584 4.1.2 ACI Binary Representation
586 The following ASN.1 data type is used to represent this
587 syntax when transferred in binary form:
589 ldapACI ::= SEQUENCE {
593 rights SEQUENCE OF CHOICE {
594 grant [0] Permissions,
595 deny [1] Permissions },
599 attributes [2] SEQUENCE OF Attribute },
606 mechanism [1] LDAPString -- from [LDAPv3]
615 ipAddress [4] IPAddress,
617 this [7] NULL }, } -- may be expanded
620 Permissions ::= SEQUENCE OF ENUMERATED {
638 Stokes, et al Expires 14 January 2001 [Page 10]
644 Internet-Draft Access Control Model 14 July 2000
648 Attribute ::= AttributeType -- from [LDAPv3]
650 IPAddress ::= PrintableString -- (e.g. 10.0.0.6)
654 4.2 The Components of ldapACI Attribute
656 This section defines components that comprise the access
657 control information attribute, ldapACI.
662 Two scopes for access control information are defined:
664 - entry - the access control information in the ldapACI
665 attribute applies only to the entry in which it is
668 - subtree - the access control information in the ldapACI
669 attribute applies to each entry down the subtree unless
670 it is overridden by an entry-specific ldapACI whose
671 values are more specific.
673 Use of prescriptive ACIs and scoping via use of a
674 ldapACISubEntry is outside the scope of this document.
677 4.2.2 Access Rights and Permissions
679 Access rights can apply to an entire object or to attributes
680 of the object. Access can be granted or denied. Either or
681 both of the actions "grant" | "deny" may be used when
682 creating or updating ldapACI.
684 Each of the LDAP access permissions are discrete. One
685 permission does not imply another permission. The
686 permissions which apply to attributes and the entry parallel
687 the type of ldap operations that can be performed.
689 Permissions which apply to attributes:
691 r Read Read attribute values
692 w Write Modify-add values
693 o Obliterate Modify-delete values
694 s Search Search entries with specified attributes
695 c Compare Compare attributes
696 m Make Make attributes on a new entry below
702 Stokes, et al Expires 14 January 2001 [Page 11]
708 Internet-Draft Access Control Model 14 July 2000
714 If granted, permits attributes and values to be
715 returned in a read or search operation.
719 If granted, permits attributes and values to be added
720 in a modify operation.
724 If granted, permits attributes and values to be
725 deleted in a modify operation.
729 If granted, permits attributes and values to be
730 included in a search operation.
734 If granted, permites attributes and value to be used
735 in a compare operation.
739 The attribute permission "m" is required for all
740 attributes that are placed on an object when it is
741 created. Just as the "w" and "o" permissions are used
742 in the Modify operation, the "m" permission is used in
743 the Add operation. Additionally, note that "w" and "o"
744 have no bearing on the Add operation and "m" has no
745 bearing on the Modify operation. Since a new object
746 does not yet exist, the "a" and "m" permissions needed
747 to create it must be granted on the new object's
748 parent. This differs from "w" and "o" which must be
749 granted on the object being modified. The "m"
750 permission is distinct and separate from the "w" and
751 "o" permissions so that there is no conflict between
752 the permissions needed to add new children to an entry
753 and the permissions needed to modify existing children
756 Note: Modify-replace values of an attribute requires "w"
759 Permissions that apply to an entire entry:
762 a Add Add an entry below this entry
766 Stokes, et al Expires 14 January 2001 [Page 12]
772 Internet-Draft Access Control Model 14 July 2000
776 d Delete Delete this entry
777 e Export Export entry & subordinates to new
779 i Import Import entry & subordinates from some
781 n RenameDN Rename an entry's DN
782 b BrowseDN Browse an entry's DN
783 t ReturnDN Allows DN of entry to be disclosed in
789 If granted, permits creation of an entry in the DIT
790 subject to control on all attributes and values to be
791 placed in the new entry at time of creation. In order
792 to add an entry, permission must also be granted to
793 add at least the mandatory attributes.
797 If granted, permits the entry to be removed from the
798 DIT regardless of controls on attributes within the
803 If granted, permits an entry and its subordinates (if
804 any) to be exported; that is, removed from the current
805 location and placed in a new location subject to the
806 granting of suitable permission at the destination.
807 If the last RDN is changed, Rename is also required at
808 the current location. In order to export an entry or
809 its subordinates, there are no prerequisite
810 permissions to contained attributed, including the RDN
811 attributes; this is true even when the operation
812 causes new attribute values to be added or removed as
813 the result of the changes of RDN.
817 If granted, permits an entry and its suordinates (if
818 any) to be imported; that is, removed from some other
819 location and placed a t the location to which the
820 permission applies subject to the granting of suitable
821 permissions at the source location. In order to
822 import an entry or its subordinates, there are no
823 prerequisite permissions to contained attributed,
824 including the RDN attributes; this is true even when
825 the operation causes new attribute values to be added
826 or removed as the result of the changes of RDN.
830 Stokes, et al Expires 14 January 2001 [Page 13]
836 Internet-Draft Access Control Model 14 July 2000
842 Granting Rename is necessary for an entry to be
843 renamed with a new RDN, taking into account
844 consequential changes to the distinguished names of
845 subordinate entries, if any; if the name of the
846 superior is unchanged, the grant is sufficient. In
847 order to rename an entry, there are no prerequisite
848 permissions to contained attributed, including the RDN
849 attributes; this is true even when the operation
850 causes new attribute values to be added or removed as
851 the result of the changes of RDN.
855 If granted, permits entries to be accessed using
856 directory operations which do not explicitly provide
857 the name of the entry.
861 If granted, allows the distinguished name of the entry
862 to be disclosed in the operation result.
864 All permissions (for grant and deny) for an attribute/entry
865 and a given subject MUST be contained within one ldapACI
866 value, i.e. (in abbreviated form)
868 ldapACI: ...grant OID.attr1 subjectA
869 ldapACI: ...deny OID.attr1 subjectA
871 must be ldapACI: ...grant ... deny... OID.attr1 subjectA
873 Using the defined BNF it is possible for the permission
874 string to be empty. The ACI
876 ldapACI: subtree#grant#OID.attr1#group:cn=Dept XYZ,c=US
878 ldapACI: subtree#grant:r,s#[all]#group:cn=Dept XYZ,c=US
880 means that this group (Dept XYZ) is granted permission to
881 read and search all attributes except OID.attr1 because
882 OID.attr1 is more specific than "[all]".
887 Attribute describes an attribute name in the form of a
888 dotted decimal OID for that <attr>. If the string (OID)
889 refers to an attribute not defined in the given server's
890 schema, the server SHOULD report an error. "[entry]" means
894 Stokes, et al Expires 14 January 2001 [Page 14]
900 Internet-Draft Access Control Model 14 July 2000
904 the permissions apply to the entire object. This could mean
905 actions such as delete the object, or add a child object.
906 "[all]" means the permission set apply to all attributes of
909 If the keyword "[all]" and another attribute are both
910 specified within an ACI, the more specific permission set
911 for the attribute overrides the less specific permission set
915 4.2.4 Subjects and Associated Authentication
917 The following subjects are defined and MUST be supported:
919 - authzID, defined per [authmeth]
921 - group, defined as the distinguished name of a
922 groupOfNames or groupOfUniqueNames entry
926 - subtree, defined as the distinguished name of a non-
931 - public, defined as public access
933 - this, defined as the user whose name matches that of
934 the entry being accessed
936 Other parties MAY define other subjects. It is the
937 responsibility of those parties to provide the definition.
939 A subject may be qualified by the type of authentication
940 required for access to a given attribute(s) or entry. If no
941 authnLevel is present, then no specific type of
942 authentication is additionally required for access. If
943 authnLevel is specified, then that type of authentication is
944 additionally required for access. The authnLevels parallel
945 the authentication mechanisms specified for LDAPv3: simple,
946 SASL (any type of SASL mechanism), and a SASL-specific
947 mechanism. The authnLevel of is not an acceptable mechanism
948 for this case) as part of obtaining access.
951 4.3 Grant/Deny Evaluation Rules
953 The decision whether to grant or deny a client access to a
954 particular piece of information is based on several pieces
958 Stokes, et al Expires 14 January 2001 [Page 15]
964 Internet-Draft Access Control Model 14 July 2000
968 of information found within the ldapaci value. Throughout
969 the decision making process, there are guiding principals.
971 - Specificity: More specific policies MUST override less
972 specific ones (e.g. individual user entry in ACI takes
973 precedence over group entry).
975 - Deny takes precedence over Grant.
977 - When there are conflicting ACI values, deny takes
978 precedence over grant.
980 - Deny is the default when there is no access control
983 Precendence of Scope Types (highest to lowest)
989 Precedence of Subjects within a Scope (highest to lowest):
995 - group, role, this, public
999 Although other types MAY be defined given the BNF, use of
1000 the well-known types aids in interoperability and
1001 operational consistency.
1003 Access Decision algorithm:
1005 1. Determine all the ldapACI values which could apply to
1006 the target DN which is being accessed. This is the DN
1007 of the entry which is being queried in a search,
1008 modified, deleted, etc. When determining all the
1009 ldapACI values, the scope field should be used. All
1010 ldapACI values with a scope of 'entry' take precedence
1011 over ldapACI values with a scope of 'subtree'.
1013 2. Determine which ldapACI (of the set determined in step
1014 1) apply to the bound DN. This is determined by
1015 looking at the subject (combination of subject type
1016 and subject value) and bind type. If no bind is in
1017 effect (this is possible in ldapv3), then treat this
1018 lack of bind as if bound as anonymous. Start with the
1022 Stokes, et al Expires 14 January 2001 [Page 16]
1028 Internet-Draft Access Control Model 14 July 2000
1032 most specific subject type. If at any time, at least
1033 one ldapACI value exists for a specificity level, then
1034 processing stops; the exception here is 'this' because
1035 this may also be combined with group to use power of
1036 'this'. Evaluation should take place on set of
1037 ldapACI values which are all of the same specificity
1038 level. Subjects of the same precedence are combined
1039 using union semantics.
1041 3. Evaluate the remaining ldapACI values and determine a
1042 grant/deny decision. If conflicting ldapACI value
1043 exists for the same attribute, or attributes (i.e. one
1044 ldapACI grants permission and another denies
1045 permission), then deny takes precedence over grant.
1046 For example, if one is granted permission to
1047 "objectclass" in one ldapACI value by being a member
1048 of group cn=Admin, and denied permission by being a
1049 member of cn = NontrustedAdmins, then the bound user
1050 would not receive permission to objectclass.
1052 The rule of specificity also applies to the
1053 attributes. If one is denied permission to "[ all ]"
1054 attributes, but granted permission to "objectclass"
1055 then the more specific value of "objectclass" takes
1056 precedence over the less specific value of "[ all ] ".
1057 In this case the user would be granted permission to
1058 "objectclass" but denied permission to all other
1063 5. Required Permissions for each LDAP Operation
1065 This section defines the required permissions for each LDAP
1066 operation but even if these requirements are satisfied the
1067 server MAY refuse to carry out the operation due to other
1068 implementation specific security considerations. For
1069 example, a server may refuse to modify an entry because the
1070 database where that entry resides is in read only mode.
1071 Another example might be that although the access control is
1072 available to the userPassword attribute a server may refuse
1073 modifications due to some server specific policy governing
1074 access to passwords.
1076 Here, we specify the rights required by a user when
1077 performing an LDAP operation in terms of the LDAP
1078 permissions specified in section 6.1. Recall that "a, d,
1079 e, i, n, b,t" are permissions that apply to entries as a
1080 whole while permissions "r, s, w, o, c, m" apply to
1081 attributes within entries.
1086 Stokes, et al Expires 14 January 2001 [Page 17]
1092 Internet-Draft Access Control Model 14 July 2000
1096 Required permissions for LDAP extended operations and LDAP
1097 controls are beyond the scope of this draft.
1099 There is a requirement that a user should not be able to
1100 infer the existence of data in the Directory, if the user
1101 does not have the required access rights to that data. An
1102 example of this requirement would be in a hosting
1103 environment where you would not want any users from the coke
1104 subtree to be able to even discover that the pepsi tree was
1105 hosted on the same server. This "discloseOnError" feature
1106 will be set once for server in the rootDSE advertised by the
1107 attribute discloseOnError. The default for discloseOnError
1108 is false (0). The lack of this attribute in the rootDSE is
1109 interpreted as the default. The details of its effects are
1110 addressed below, operation by operation.
1112 For the following, assume that the authorization identity of
1113 the user doing the operation is authzID.
1118 This draft does not require any permissions to allow a bind
1119 operation to proceed.
1122 5.2 Search Operation
1124 Recall that the parameters of the Search operation per RFC
1125 2251 [LDAPv3] Section 4.5 are:
1127 SearchRequest ::= [APPLICATION 3] SEQUENCE {
1133 derefAliases ENUMERATED {
1134 neverDerefAliases (0),
1135 derefInSearching (1),
1136 derefFindingBaseObj (2),
1138 sizeLimit INTEGER (0 .. maxInt),
1139 timeLimit INTEGER (0 .. maxInt),
1142 attributes AttributeDescriptionList }
1144 Suppose a server is processing a search request from user
1145 authzID with parameters as above and is processing the entry
1146 with dn candidateDN to decide if it may be returned or not.
1150 Stokes, et al Expires 14 January 2001 [Page 18]
1156 Internet-Draft Access Control Model 14 July 2000
1160 Then the permissions required by authzID that need to be
1161 evaluated are as follows:
1164 1. permission "b" to the entry candidateDN
1166 If this permission is not granted then the dn
1167 candidateDN MUST not be returned nor any attribute
1168 type nor attribute value from this entry.
1170 If this permission is granted then the dn candidateDN
1173 Note: The idea of the "b" permission is to say "a user
1174 has discovery rights" at a certain entry in the
1175 directory. Assuming that the further required
1176 permissions below are satisfied then having "b" right
1177 is enough to allow the server to return candidateDN.
1178 Of course candidateDN contains in it's components,
1179 attributes and attribute values for all the ancestors
1180 of candidateDN. This can lead to the slightly odd
1181 situation that we can discover the naming attribute of
1182 an entry and that attribute's value by virtue of
1183 having the required searching permissions to it's
1184 child but not by searching the entry directly.
1186 2. permission "s" to each attribute appearing in a
1187 presence test during the evaluation of the search
1188 filter. permission "r" to each attribute appearing in
1189 non-presence tests (see rfc1960, section 3:
1190 equalityMatch, substrings, greaterOrEquial,
1191 lessOrEqual, present, approxMatch, extensibleMatch)
1192 during the evaluation of the search filter.
1194 The above statement covers the case where the
1195 attributes are being evaluated as part of an
1196 extensibleMatch (RFC 2251 section 4.5.1) which appears
1197 in the filter. In the case where the dnAttributes
1198 field of the extensibleMatch is true then we do not
1199 require any access checks to the attributes of the dn
1200 candidateDN as access to these is taken to be granted
1201 by the "b" permission, which has already been required
1204 If there is an attribute in a filter element to which
1205 the required permission is not granted then that
1206 filter element evaluates to "Undefined" of the three-
1207 valued-logic of X.511(93).
1209 Note A: Although both "r" and "s" permissions will
1210 typically be granted to attributes we keep both
1214 Stokes, et al Expires 14 January 2001 [Page 19]
1220 Internet-Draft Access Control Model 14 July 2000
1224 permissions as there are cases where the distinction
1225 is useful. For example, the ability to grant the
1226 right to discover that a user entry contains a
1227 userPassword attribute, but not to read it's value
1228 ("s" but not "r"). The converse, granting "r" but not
1229 "s" permission is less easy to motivate.
1231 Note B: There is an unusual behaviour with respect to
1232 naming attributes illustrated in the following
1235 Suppose I have "b" rights to cn=fred,o=sun.com and "r"
1236 rights to attribute objectclass but not "r" rights to
1237 cn then with search filter (objectclass=*) I get back
1238 the dn and objectclass (and so can see the value of
1239 cn), but with a search filter of (cn=fred) I do not
1242 3. permission "r" to each attribute in the attribute list
1244 AttributeDescriptionList (or all attributes in the
1245 entry candidateDN if AttributeDescriptionList is *)
1246 whose type and/or value will be returned.
1248 Note: The presence of an attribute in an entry is only
1249 ever volunteered by the server if "r" permission is
1250 granted to it, though a user may infer the presence of
1251 an attribute with "s" permission by using a presence
1252 test on that attribute in the search filter.
1254 4. permission "t" to the entry candidateDN
1256 If this permission is not granted then the dn
1257 candidateDN MUST NOT be returned. If the server knows
1258 of an alias for the entry, this alias may be returned
1259 instead. If no alias name is available then the entry
1260 candidateDN MUST be omitted from the search results.
1263 5. Disclose on error for the Search operation
1265 If every entry in the scope of the search fails to
1266 satisfy item 1 (browse right on the candidate entry)
1267 or item 2 (right to use the filter on that entry) and
1268 if discloseOnError is not granted to the baseObject
1269 entry then the operation MUST fail with a "no such
1270 object error" and the matchedDN of the LDAPResult MUST
1271 be set to "". If every entry in the scope of the
1272 search fails to satisfy items 1 or 2 above and
1273 discloseOnError is granted to the baseObject then the
1274 empty set of results is returned.
1278 Stokes, et al Expires 14 January 2001 [Page 20]
1284 Internet-Draft Access Control Model 14 July 2000
1288 5.3 Modify Operation
1290 Recall that the parameters of the Modify operation per
1291 RFC2251 [LDAPv3] Section 4.6 are:
1293 ModifyRequest ::= [APPLICATION 6] SEQUENCE {
1295 modification SEQUENCE OF SEQUENCE {
1296 operation ENUMERATED {
1300 modification AttributeTypeAndValues } }
1303 AttributeTypeAndValues ::= SEQUENCE {
1304 type AttributeDescription,
1305 vals SET OF AttributeValue }
1307 Then the permissions required by authzID that need to be
1308 evaluated are as follows:
1311 1. permission "w" to each attribute being added to object
1313 If this permission is not granted to such an
1314 attribute, then the operation MUST fail. In this
1315 case, if discloseOnError is not granted to the entry
1316 then "no such object" error is returned; if
1317 discloseOnError is granted to the entry and a
1318 duplicate attribute value is being added then
1319 "attribute value already exists" error is returned; if
1320 discloseOnError is granted to the entry and no
1321 duplicate value is being added then an "insufficient
1322 access" error is returned.
1324 2. permission "o" to each attribute for which a value is
1325 being deleted from object
1327 If this permission is not granted to such an attribute
1328 then the operation MUST fail. In this case, if
1329 discloseOnError is not granted to the entry then "no
1330 such object" error is returned; if discloseOnError is
1331 granted to the entry and the attribute or one of the
1332 values to be deleted does not exist then a "no such
1333 attribute or value" error is returned; if
1334 discloseOnError is granted to the entry and the
1335 attribute and all values specified to be deleted exist
1336 then an "insufficient access" error is returned.
1342 Stokes, et al Expires 14 January 2001 [Page 21]
1348 Internet-Draft Access Control Model 14 July 2000
1352 3. permissions "o" and "w" to each attribute being
1355 If one of these these permissions is not granted to
1356 such an attribute then the operation MUST fail. In
1357 this case, if discloseOnError is not granted to the
1358 entry then a "no such object" error is returned; if
1359 discloseOnError is granted to the entry then
1360 "insufficient access" error is returned.
1365 Recall that the parameters of the Add operation per RFC2251
1366 [LDAPv3] Section 4.7 are:
1368 AddRequest ::= [APPLICATION 8] SEQUENCE {
1370 attributes AttributeList }
1373 AttributeList ::= SEQUENCE OF SEQUENCE {
1374 type AttributeDescription,
1375 vals SET OF AttributeValue }
1377 Then the permissions required by authzID that need to be
1378 evaluated are as follows:
1380 permission "a" to the parent of entry
1382 The access rights required for the creation of a root
1383 entry in the Directory are beyond the scope of this
1384 document. They will be vendor specific.
1386 1. permission "m" to the parent of entry for each
1387 attribute being added to entry
1389 If any of these permissions are not granted then the
1390 operation MUST fail. In this case if discloseOnError is on
1391 and the entry to be added does not already exist then
1392 "insufficient access" is returned. If it does exist then
1393 "Entry already exists" is returned. If discloseOnError is
1394 off then "No such object" is returned (meaning the parent
1397 If they are all granted then the operation MAY proceed.
1399 Note: We require "m" permission to each attribute to prevent
1400 an entry from aquiring "unintended" rights (via group or
1401 role membership), to stop a "rogue" ACI being added that
1402 would prevent even admins deleting the entry and general
1406 Stokes, et al Expires 14 January 2001 [Page 22]
1412 Internet-Draft Access Control Model 14 July 2000
1416 consistency with the MODIFY operation.
1418 Note: The access rights required for the creation of the
1419 first entry in the directory are beyond the scope of this
1423 5.5 Delete Operation
1425 Recall that the parameters of the Delete operation per
1426 RFC2251 [LDAPv3] Section 4.10 are:
1428 DelRequest ::= [APPLICATION 10] LDAPDN
1430 Then the permissions required by authzID that need to be
1431 evaluated are as follows:
1434 1. permission "d" to the entry in the Delete request
1436 If this permission is not granted, then the operation MUST
1437 fail. In this case if discloseOnError is on and the entry
1438 to be deleted exists then "insufficient access" is returned.
1439 If it does not exist then "No such Object" is returned. If
1440 discloseOnError is off then "No such object" is returned
1441 (meaning the parent object).
1443 If this permission is granted, then the operation MAY
1446 Note: One could also require the "o" permission to be
1447 granted to allow the operation to proceed, but customer
1448 experience has shown that the requirement of the additional
1449 permission is not useful nor expected, and X.500 requires
1450 only the "d" permission.
1453 5.6 Modify DN Operation
1455 Recall that the parameters of the Modify DN operation per
1456 RFC2251 [LDAPv3] Section 4.6 are:
1458 ModifyDNRequest ::= [APPLICATION 12] SEQUENCE {
1460 newrdn RelativeLDAPDN,
1461 deleteoldrdn BOOLEAN,
1462 newSuperior [0] LDAPDN OPTIONAL }
1464 Then the permissions required by authzID that need to be
1465 evaluated are as follows:
1470 Stokes, et al Expires 14 January 2001 [Page 23]
1476 Internet-Draft Access Control Model 14 July 2000
1480 1. If newSuperior is not present (ie. only the RDN is
1481 being renamed) then permission "n" to entry is
1484 2. If newSuperior is present then permission "e" to entry
1485 and permission "i" to newSuperior are required.
1487 If any of these permissions are not granted then the
1488 operation MUST fail. In this case, if discloseOnError is on
1489 then an "insufficient access error" is returned. Otherwise,
1490 "No such object" is returned.
1492 If they are all granted then the operation MAY proceed.
1494 Note A: We do not require any additional permissions in the
1495 case where deleteoldrdn is TRUE.
1497 Note B: These permissions allow the naming attribute of an
1498 entry (or entries) to be changed even though "o" and "w"
1499 permissions are not available on the entry. Distinguishing
1500 the permissions like this allows us to grant permissions for
1501 the ModifyDN operation, but not the Modify operation and
1505 5.7 Compare Operation
1507 Recall that the parameters of the Compare operation per
1508 RFC2251 [LDAPv3] Section 4.10 are:
1510 CompareRequest ::= [APPLICATION 14] SEQUENCE {
1512 ava AttributeValueAssertion }
1514 Then the permissions required by authzID that need to be
1515 evaluated are as follows:
1518 1. permission "c" to the attribute in entry on which the
1519 comparison is being made.
1521 If any of these permissions are not granted then the
1522 operation MUST fail. In this case, if discloseOnError is on
1523 then an "insufficient access error" is returned. Otherwise,
1524 "No such object" is returned.
1526 If they are all granted then the operation MAY proceed.
1534 Stokes, et al Expires 14 January 2001 [Page 24]
1540 Internet-Draft Access Control Model 14 July 2000
1544 5.8 Abandon Operation
1546 Recall that the parameters of the Abandon operation per
1547 RFC2251 [LDAPv3] Section 4.6 are:
1549 AbandonRequest ::= [APPLICATION 16] MessageID
1551 authzID always has the right to send an Abandon Operation
1552 for an operation he previously initiated.
1555 5.9 Extended Operation
1557 Recall that the parameters of the Extended operation per
1558 RFC2251 [LDA{v3] Section 4.12 are:
1560 ExtendedRequest ::= [APPLICATION 23] SEQUENCE {
1561 requestName [0] LDAPOID,
1562 requestValue [1] OCTET STRING OPTIONAL }
1564 The access required for an Extended Operation is beyond the
1565 scope of this document. The required access will normally
1566 be defined by the implementor of the extended request.
1570 6. Required Permissions for Handling Aliases and References
1573 Use of aliases and referrals are part of LDAPv3. However,
1574 neither is particularly well-defined. Alias
1575 objects/attributes are defined in RFC 2256 as derived from
1576 X.500, but LDAPv3 does not explicitly define its semantics
1577 or behavior. X.500 does define alias semantics and behavior
1578 with respect to access control; we define its behavior in
1579 LDAPv3 based on the X.511, section 7.11.1. Referrals and
1580 knowledge information are still under design in LDAPv3; they
1581 are defined in X.500, however, X.500 punts on their
1582 semantics and behavior with respect to access control. We
1583 define their semantics and behavior in LDAPv3 in terms that
1584 should be independent of the future LDAPv3 definition of
1585 referrals and knowledge information.
1588 6.1 ACI Distribution
1590 Currently there is no LDAP standard defining how to
1591 distribute directory data between LDAP servers. Consequently
1592 this draft cannot fully specify the behavior of the Access
1593 Control Model in a distributed environment. The case of
1594 distribution via referrals is treated in the "Referrals"
1598 Stokes, et al Expires 14 January 2001 [Page 25]
1604 Internet-Draft Access Control Model 14 July 2000
1608 section below. In the case of chaining (where one LDAP
1609 server forwards a request to another on behalf of a client)
1610 then it is server specific how the access control model
1611 behaves in this environment. Similarly it is server specific
1612 how the server determines whether the chaining of an
1613 operation is permitted in the first place. For example, the
1614 implementation may choose to regard the local naming context
1615 and the remote subordinate naming context as seperate Access
1616 Control Specific Areas, or it may regard the DIT as one
1617 Access Control Specific Area and implement mechanisms to
1618 propagate access control information between the two
1619 servers. The behavior of the Access Control Model in
1620 distributed environments such as these is beyond the scope
1626 There are two things to protect with respect to aliases:
1627 the real name of the aliased object and the location of the
1630 If alias de-referencing is required in the process of
1631 locating a target entry, no specifc permissions are
1632 necessary for alias de-referencing to take place. Access
1633 control is enforced at the object pointed to by the alias.
1635 If alias de-referencing would result in a
1636 continuationReference (e.g. from a search operation), then
1637 browse permission is required to the alias entry and read
1638 permission is required to the 'aliasedObjectName' attribute.
1639 Requiring these permission closes the hole of discovery.
1644 If a referral is to be followed, no specifc permissions are
1645 necessary for the ldap client to follow the referral. Access
1646 control is enforced at the referenced object. If a referral
1647 is returned, then browse is required on the entry and read
1648 permission is required to the attribute containing the
1649 referral (we cannot name this attribute exactly today
1650 because there are no RFCs on this - only drafts). If the
1651 server implements a default referral, then no special
1652 permissions are required to read and return that referral.
1653 Requiring these permissions closes the hole of discovery.
1654 In the default case, it is assumed that a default referral
1662 Stokes, et al Expires 14 January 2001 [Page 26]
1668 Internet-Draft Access Control Model 14 July 2000
1672 7. Controlling Access to Access Control Information
1674 The ldapACI attribute is used to specify control for who has
1675 permission to set/change access control information
1676 (ldapACI). The ldapACI attribute/OID is just another
1677 attribute described with a scope, set of rights and
1678 permissions, and subject as a value of the ldapACI
1679 attribute. (See the example in the "ACI Examples" section).
1681 If the policy for controlling the ldapACI attribute is not
1682 specified for any object in the tree, behavior is
1683 implementation defined. For instance, if no object anywhere
1684 in the tree defines the access for ldapACI within the
1685 ldapACI attribute, then the server could simply assert that
1686 the 'root DN' is considered the policy owner (controller for
1687 controlling access control) for all objects.
1693 Note that in the examples, the form "OID.<attrname>" refers
1694 to the OID in dotted decimal form for the attribute
1695 <attrname>. This shorthand notation is used only for the
1696 examples. In implementation, the dotted decimal form of the
1700 8.1 Attribute Definition
1702 The following examples show the access required to control
1703 access to the ldapACI attribute. The first example shows
1704 controlling the access control on an individual entry and
1705 its attributes. The second example shows controlling the
1706 access control on a subtree.
1708 ldapACI: entry#grant:r,w#
1709 OID.ldapACI#authnLevel:any:role:cn=aciAdmin
1711 ldapACI: subtree#grant:r,w#
1712 OID.ldapACI#authnLevel:any:role:cn=aciAdmin
1714 The next example shows a ldapACI attribute where a group
1715 "cn=Dept XYZ, c=US" is being given permissions to read,
1716 search, and compare attribute attr1. The permission applies
1717 to the entire subtree below the node containing this ACI.
1718 Authentication of a specified type is not required.
1720 ldapACI:subtree#grant;r,s,c#
1721 OID.attr1#group:cn=Dept XYZ,c=US
1726 Stokes, et al Expires 14 January 2001 [Page 27]
1732 Internet-Draft Access Control Model 14 July 2000
1736 The next example shows an ACI attribute where a role
1737 "cn=SysAdmins,o=Company" is being given permissions to add
1738 objects below this node and read, search, and compare
1739 attributes attr2 and attr3. The permission applies to the
1740 entire subtree below the node containing this ACI.
1742 ldapACI: subtree#grant:a#
1743 [entry]#role:cn=SysAdmins,o=Company
1745 ldapACI: subtree#grant:r,s,c#
1746 OID.attr2#role:cn=SysAdmins,o=Company
1748 ldapACI: subtree#grant:r,s,c#
1749 OID.attr3#role:cn=SysAdmins,o=Company
1752 8.2 Modifying the ldapACI Values
1754 Modify-Replace works as defined in the ldap operation
1755 modify. If the attribute value does not exist, create the
1756 value. If the attribute does exist, replace the value. If
1757 the ldapACI value is replaced, all ldapACI values are
1760 A given ldapACI for an entry:
1762 ldapACI: subtree#deny:r,w#[all]#group:cn=Dept ABC
1764 ldapACI: subtree#grant:r#OID.attr1#group:cn=Dept XYZ
1766 perform the following change:
1771 ldapACI: subtree#grant:r,w#[all]#group:cn=Dept LMN
1773 The resulting ACI is:
1775 ldapACI: subtree#grant:r,w#[all]#group:cn=Dept LMN
1777 ( ldapACI values for Dept XYZ and ABC are lost through the
1780 During an ldapmodify-add, if the ACI does not exist, the
1781 create the ACI with the specific ldapACI value(s). If the
1782 ACI does exist, then add the specified values to the given
1783 ldapACI. For example a given ACI:
1785 ldapACI: subtree#grant:r,w#[all]#group:cn=Dept XYZ
1790 Stokes, et al Expires 14 January 2001 [Page 28]
1796 Internet-Draft Access Control Model 14 July 2000
1800 with a modification:
1805 ldapACI: subtree#grant:r#OID.attr1#group:cn=Dept XYZ
1807 would yield an multi-valued ACI of:
1809 ldapACI: subtree#grant:r,w#[all]#group:cn=Dept XYZ
1811 ldapACI: subtree#grant:r#OID.attr1#group:cn=Dept XYZ
1813 To delete a particular ACI value, use the regular ldapmodify
1818 ldapACI: subtree#grant:r,w#[all]#group:cn=Dept XYZ
1819 ldapACI: subtree#grant:r#OID.attr1#group:cn=Dept XYZ
1824 ldapACI: subtree#grant:r#OID.attr1#group:cn=Dept XYZ
1826 would yield a remaining ACI on the server of
1828 ldapACI: subtree#grant:r,w#[all]#group:cn=Dept XYZ
1830 The attributes which are defined for access control
1831 interchange may be used in all LDAP operations.
1833 Within the ldapmodify-delete operation, the entire acl may
1834 be deleted by specifying
1840 In this case, the entry would then inherit its ACI from some
1841 other node in the tree depending on the server inheritance
1844 Similarly, if all values of ldapACI are deleted, then the
1845 access control information for that entry is defined by that
1846 implementation's inheritance model.
1854 Stokes, et al Expires 14 January 2001 [Page 29]
1860 Internet-Draft Access Control Model 14 July 2000
1866 These examples assume that the ldapACI entries listed in
1867 each example are the only ACI which applies to the entry in
1868 question; if backing-store ACI also exists, the effective
1869 policy may be different from that listed in each example.
1870 See section 10 for a discussion of the semantics of ldapACI
1871 entries when backing-store ACI administration is also used.
1873 Assume cn=jsmith is a member of group cn=G1. Assume
1874 cn=jsmith is a member of group cn=G2.
1878 ldapACI: subtree#grant:r#attr1
1879 #authzID-dn:cn=jsmith,ou=ABC,o=XYZ,c=US
1880 ldapACI: subtree#grant:w#attr1
1881 #group:cn=G1,ou=ABC,o=XYZ,c=US
1883 What rights does cn=jsmith have to attr1 of o=XYZ,c=US?
1884 Read (r) access; authzID is higher precedence than
1890 ldapACI: subtree#grant:r#attr2
1891 #group:cn=G1,ou=ABC,o=XYZ,c=US
1892 ldapACI: subtree#grant:w#attr2
1893 #group:cn=G2,ou=ABC,o=XYZ,c=US
1895 What rights does cn=jsmith have to attr2 of o=XYZ,c=US?
1896 Read-write (r,w) access; ACI is combined because both
1897 subjects (group) have same precedence.
1902 ldapACI: subtree#grant:r,w#attr3
1903 #group:cn=G1,ou=ABC,o=XYZ,c=US
1904 ldapACI: subtree#deny:w#attr3#group:cn=G2,ou=ABC,o=XYZ,c=US
1906 What rights does cn=jsmith have to attr3 of o=XYZ, c=US?
1907 Read access; write is denied (deny has precedence over
1913 ldapACI: subtree#grant:w#attr4
1914 #authzID-dn:cn=jsmith,ou=ABC,o=XYZ,c=US
1918 Stokes, et al Expires 14 January 2001 [Page 30]
1924 Internet-Draft Access Control Model 14 July 2000
1928 ldapACI: subtree#grant:r#attr4#subtree:ou=ABC,ou=XYZ,c=US
1930 What rights does cn=jsmith have to attr4 of o=XYZ, c=US?
1931 Write (w); rights given to an authzID take precedence
1932 over those given to a subtree.
1937 ldapACI: subtree#grant:m#OID.attr5
1938 #authzID-dn:cn=jsmith,o=ABC,c=US
1939 ldapACI: subtree#grant:m#OID.cn
1940 #authzID-dn:cn=jsmith,o=ABC,c=US
1941 ldapACI: subtree#grant:m#OID.sn
1942 #authzID-dn:cn=jsmith,o=ABC,c=US
1943 ldapACI: subtree#grant:a#[entry]
1944 #authzID-dn:#cn=jsmith,o=ABC,c=US
1946 What rights does cn=jsmith have to o=XYZ, c=US?
1947 Make(m) on attributes attr5, cn, and sn and Add(a)
1948 on the entry. These are the minimal yet sufficient
1949 permissions to create a new object,
1950 cn=New, o=XYZ, c=US with values for the attr5, cn,
1951 and sn attributes. This example illustrates how the
1952 "m" permission can be used to limit the attributes
1953 that can be created on a new entry.
1957 ldapACI: subtree#grant:m#[all]#subtree:c=US
1959 ldapACI: subtree#grant:a#[entry]#
1960 authzID-dn:cn=jsmith,o=ABC,c=US
1962 What rights does cn=jsmith have to o=XYZ, c=US?
1963 Make(m) on attributes all attributes and Add(a) on the
1964 entry. These are sufficient permissions to create a new
1965 object, cn=New, o=XYZ, c=US with values any desired
1966 attributes. For administrators who do not wish to limit
1967 the attributes that can be created on new entries, this
1968 example shows how a single ldapACI at the top of the
1969 domain solves the problem.
1973 9. Operational Semantics of Access Control Operations
1975 The semantics of access control operations described in this
1976 document are defined operationally in terms of "histories".
1977 A history is a sequence of actions (x1, x2, ..., xN).
1982 Stokes, et al Expires 14 January 2001 [Page 31]
1988 Internet-Draft Access Control Model 14 July 2000
1992 9.1 Types of actions
1994 We consider five types of actions:
1996 - LDAP Access Control Policy Update actions: invocations
1997 of ldap modify when used to add, delete, or replace the
1998 aci attribute; invocations of ldap add when used to add
1999 an entry with an aci attribute. A LDAP Access Control
2000 Policy Update action may replace the policy (by
2001 completely replacing the aci attribute with new policy
2002 information) or it may grant or deny specific rights
2003 while leaving others unaffected.
2005 - LDAP Access Control Policy Query operations:
2006 invocations of ldap search when used to retrieve the
2007 aci attribute; invocations of ldap search with the
2008 getEffectiveRightsRequest control; invocations of the
2009 ldapGetEffectiveRightsRequest extended operation.
2011 - Datastore Access Control Policy Update Actions: any
2012 operation implemented by the server which LDAP is using
2013 as its datastore which changes the access policy
2014 enforced with respect to attempts to access LDAP
2015 directory entries and their attributes.
2017 - LDAP Access Request operations: invocations of LDAP
2018 entry or attribute access operations (Read, Update,
2019 Search, Compare, etc...).
2021 - Other operations: anything else, including Datastore
2022 operations which do not change the access policy
2023 enforced by the server.
2026 9.2 Semantics of Histories
2028 The semantics of histories are defined as follows:
2030 - LDAP Update (Replace), LDAP Query
2032 The Query will show that the subject has all rights
2033 granted by the Update operation, and no rights not
2034 granted by the Update operation.
2036 - LDAP Update (Grant), LDAP Query
2038 The Query will show that the subject has all rights
2039 granted by the Update operation. The Query may show
2040 that the subject also has other rights not granted by
2041 the Update operation, depending on the policy in force
2042 before the Update operation.
2046 Stokes, et al Expires 14 January 2001 [Page 32]
2052 Internet-Draft Access Control Model 14 July 2000
2056 - LDAP Update (Deny), LDAP Query
2058 The Query will show that the subject does not have any
2059 right denied by the Update operation. The Query may
2060 show that the subject has rights not denied by the
2061 Update operation, depending on the policy in force
2062 before the Update operation.
2064 - LDAP Update (Replace), LDAP Access Request
2066 The Request will succeed if it requires only rights
2067 granted to the requesting subject by the Update
2068 operation. The Request will fail if it requires any
2069 right not granted by the Update operation.
2071 - LDAP Update (Grant), LDAP Access Request
2073 The Request will succeed if it requires only rights
2074 granted to the requesting subject by the Update
2075 operation. The Request may succeed if it requires
2076 rights not granted by the Update operation, depending
2077 on the policy in force before the Update operation.
2079 - LDAP Update (Deny), LDAP Access Request
2081 The Request will fail if it requires any right denied
2082 to the requesting subject by the Update operation. If
2083 the Request requires only rights which were not denied
2084 by the Update operation, it may succeed, depending on
2085 the policy in force before the Update operation.
2087 - LDAP Update (Replace), Other, LDAP Query
2089 The Query will show that the subject has all rights
2090 granted by the Update operation, and no rights not
2091 granted by the Update operation.
2093 - LDAP Update (Grant), Other, LDAP Query
2095 The Query will show that the subject has all rights
2096 granted by the Update operation. The Query may show
2097 that the subject also has other rights not granted by
2098 the Update operation, depending on the policy in force
2099 before the Update operation.
2101 - LDAP Update (Deny), Other, LDAP Query
2103 The Query will show that the subject does not have any
2104 right denied by the Update operation. The Query may
2105 show that the subject has rights not denied by the
2106 Update operation, depending on the policy in force
2110 Stokes, et al Expires 14 January 2001 [Page 33]
2116 Internet-Draft Access Control Model 14 July 2000
2120 before the Update operation.
2122 - LDAP Update (Replace), Other, LDAP Access Request
2124 The Request will succeed if it requires only rights
2125 granted to the requesting subject by the Update
2126 operation. The Request will fail if it requires any
2127 right not granted by the Update operation.
2129 - LDAP Update (Grant), Other, LDAP Access Request
2131 The Request will succeed if it requires only rights
2132 granted to the requesting subject by the Update
2133 operation. The Request may succeed if it requires
2134 rights not granted by the Update operation, depending
2135 on the policy in force before the Update operation.
2137 - LDAP Update (Deny), Other, LDAP Access Request
2139 The Request will fail if it requires any right denied
2140 to the requesting subject by the Update operation. If
2141 the Request requires only rights which were not denied
2142 by the Update operation, it may succeed, depending on
2143 the policy in force before the Update operation.
2145 - LDAP Update (Replace), Datastore Policy Update, LDAP
2148 The result of the Query is not defined.
2150 - LDAP Update (Grant), Datastore Policy Update, LDAP
2153 The result of the Query is not defined.
2155 - LDAP Update (Deny), Datastore Policy Update, LDAP Query
2157 The result of the Query is not defined.
2159 - LDAP Update (Replace), Datastore Policy Update, LDAP
2162 The result of the Access Request is not defined.
2164 - LDAP Update (Grant), Datastore Policy Update, LDAP
2167 The result of the Access Request is not defined.
2169 - LDAP Update (Deny), Datastore Policy Update, LDAP
2174 Stokes, et al Expires 14 January 2001 [Page 34]
2180 Internet-Draft Access Control Model 14 July 2000
2184 The result of the Access Request is not defined.
2188 10. Access Control Parameters for LDAP Controls & Extended
2191 This section defines the parameters used in the access
2192 control LDAP controls and extended operations in this
2195 targetDN specifies the initial directory entry in DN syntax
2196 on which the control or extended operation is performed.
2198 whichObject specifies whether the access control information
2199 (in the get effective rights control) which is retrieved is
2200 for the target directory entry (ENTRY) or the target
2201 directory entry and its subtree (SUBTREE).
2203 rights in the get effective rights control or extended
2204 operation response is of the form specified in the BNF for
2207 subject is a LDAP string that defines the subject. Access
2208 control is get/set on a subject. The syntax of the subject
2209 is the same as the subject field in the BNF.
2213 11. Access Control Information (ACI) Controls
2215 The access control information controls provide a way to
2216 manipulate access control information in conjunction with a
2217 LDAP operation. One LDAP control is defined. This control
2218 allows access control information to be retrieved while
2219 manipulating other directory information for that entry.
2222 - getEffectiveRights to obtain the effective rights for a
2223 given directory entry(s) for a given subject during a
2224 ldap_search operation
2226 11.1 getEffectiveRights Control
2229 11.1.1 Request Control
2231 This control may only be included in the ldap_search
2232 message as part of the controls field of the
2233 LDAPMessage, as defined in Section 4.1.12 of [LDAPv3].
2238 Stokes, et al Expires 14 January 2001 [Page 35]
2244 Internet-Draft Access Control Model 14 July 2000
2248 The controlType is set to <OID to be assigned>. The
2249 criticality MAY be either TRUE or FALSE (where absent is
2250 also equivalent to FALSE) at the client's option. The
2251 controlValue is an OCTET STRING, whose value is the BER
2252 encoding of a value of the following SEQUENCE:
2254 getEffectiveRightsRequest ::= SEQUENCE {
2255 effectiveRightsRequest SEQUENCE OF SEQUENCE {
2256 whichObject ENUMERATED {
2260 subject <see <subject > in BNF> | "*"
2264 The effectiveRightsRequest is a set of sequences that state
2265 the whichObject (entry or entry plus subtree) and specifics
2266 of the control request to be performed. A "*" in the subject
2267 field specifies that all DN types are to be used in
2268 returning the effective rights. This control is applied to
2269 the filter and scope set by the ldap_search operation, i.e.
2270 base, one-level, subtree. So the attributes/values returned
2271 are defined by the ldap_search operation.
2273 11.1.2 Response Control
2275 This control is included in the ldap_search_response message
2276 as part of the controls field of the LDAPMessage, as defined
2277 in Section 4.1.12 of [LDAPv3].
2279 The controlType is set to <OID to be assigned>. There is no
2280 need to set the criticality on the response. The
2281 controlValue is an OCTET STRING, whose value is the BER
2282 encoding of a value of the following SEQUENCE:
2284 getEffectiveRightsResponse ::= {
2287 operationsError (1),
2288 unavailableCriticalExtension (12),
2289 noSuchAttribute (16),
2290 undefinedAttributeType (17),
2291 invalidAttributeSyntax (21),
2292 insufficientRights (50),
2294 unwillingToPerform (53),
2302 Stokes, et al Expires 14 January 2001 [Page 36]
2308 Internet-Draft Access Control Model 14 July 2000
2312 The effective rights returned are returned with each entry
2313 returned by the search result. The control response for
2316 PartialEffectiveRightsList ::= SEQUENCE OF SEQUENCE {
2317 rights <see <rights> in BNF>,
2318 whichObject ENUMERATED {
2322 subject < see <subject> in BNF >
2325 Although this extends the search operation, there are no
2326 incompatibilities between versions. LDAPv2 cannot send a
2327 control, hence the above structure cannot be returned to a
2328 LDAPv2 client. A LDAPv3 client cannot send this request to
2329 a LDAPv2 server. A LDAPv3 server not supporting this
2330 control cannot return the additional data.
2332 11.1.3 Client-Server Interaction
2334 The getEffectiveRightsRequest control requests the rights
2335 that MUST be in effect for requested directory
2336 entry/attribute based on the subject DN. The server that
2337 consumes the search operation looks up the rights for the
2338 returned directory information based on the subject DN and
2339 returns that rights information.
2341 There are six possible scenarios that may occur as a result
2342 of the getEffectiveRights control being included on the
2346 1. If the server does not support this control and the
2347 client specified TRUE for the control's criticality
2348 field, then the server MUST return
2349 unavailableCriticalExtension as a return code in the
2350 searchResponse message and not send back any other
2351 results. This behavior is specified in section 4.1.12
2354 2. If the server does not support this control and the
2355 client specified FALSE for the control's criticality
2356 field, then the server MUST ignore the control and
2357 process the request as if it were not present. This
2358 behavior is specified in section 4.1.12 of [LDAPv3].
2360 3. If the server supports this control but for some
2361 reason such as cannot process specified family and the
2362 client specified TRUE for the control's criticality
2366 Stokes, et al Expires 14 January 2001 [Page 37]
2372 Internet-Draft Access Control Model 14 July 2000
2376 field, then the server SHOULD do the following: return
2377 unavailableCriticalExtension as a return code in the
2378 searchResult message.
2380 4. If the server supports this control but for some
2381 reason such as cannot process specified family and the
2382 client specified FALSE for the control's criticality
2383 field, then the server should process as 'no rights
2384 returned for that family' and include the result
2385 Unavailable in the getEffectiveRightsResponse control
2386 in the searchResult message.
2388 5. If the server supports this control and can return the
2389 rights per the family information, then it should
2390 include the getEffectiveRightsResponse control in the
2391 searchResult message with a result of success.
2393 6. If the search request failed for any other reason,
2394 then the server SHOULD omit the
2395 getEffectiveRightsResponse control from the
2396 searchResult message.
2398 The client application is assured that the correct rights
2399 are returned for scope of the search operation if and only
2400 if the getEffectiveRightsResponse control returns the
2401 rights. If the server omits the getEffectiveRightsResponse
2402 control from the searchResult message, the client SHOULD
2403 assume that the control was ignored by the server.
2405 The getEffectiveRightsResponse control, if included by the
2406 server in the searchResponse message, should have the
2407 getEffectiveRightsResult set to either success if the rights
2408 are returned or set to the appropriate error code as to why
2409 the rights could not be returned.
2411 The server may not be able to return a right because it may
2412 not exist in that directory object's attribute; in this
2413 case, the rights request is ignored with success.
2416 12. Access Control Extended Operation
2418 An extended operation, get effective rights, is defined to
2419 obtain the effective rights for a given directory entry for
2420 a given subject. This operation may help with the
2421 management of access control information independent of
2422 manipulating other directory information.
2430 Stokes, et al Expires 14 January 2001 [Page 38]
2436 Internet-Draft Access Control Model 14 July 2000
2440 12.1 LDAP Get Effective Rights Operation
2442 ldapGetEffectiveRightsRequest ::= [APPLICATION 23] SEQUENCE
2444 requestName [0] <OID to be assigned>,
2445 requestValue [1] OCTET STRING OPTIONAL }
2449 requestValue ::= SEQUENCE {
2451 updates SEQUENCE OF SEQUENCE {
2452 whichObject ENUMERATED {
2457 attr <see <attr> in BNF >
2459 subject < see <subject> in BNF > | "*"
2464 The requestName is a dotted-decimal representation of the
2465 OBJECT IDENTIFIER corresponding to the request. The
2466 requestValue is information in a form defined by that
2467 request, encapsulated inside an OCTET STRING.
2469 The server will respond to this with an LDAPMessage
2470 containing the ExtendedResponse which is a rights list.
2472 ldapGetEffectiveRightsResponse ::= [APPLICATION 24] SEQUENCE
2474 COMPONENTS OF LDAPResult,
2475 responseName [10] <OID to be assigned> OPTIONAL,
2476 effectiveRights [11] OCTET STRING OPTIONAL }
2480 effectiveRights ::= SEQUENCE OF SEQUENCE {
2481 rights <see <rights> in BNF>,
2482 whichObject ENUMERATED {
2486 subject < see <subject> in BNF >
2489 If the server does not recognize the request name, it MUST
2490 return only the response fields from LDAPResult, containing
2494 Stokes, et al Expires 14 January 2001 [Page 39]
2500 Internet-Draft Access Control Model 14 July 2000
2504 the protocolError result code.
2508 13. Security Considerations
2510 This document proposes protocol elements for transmission of
2511 security policy information. Security considerations are
2512 discussed throughout this draft. Because subject security
2513 attribute information is used to evaluate decision requests,
2514 it is security-sensitive information and must be protected
2515 against unauthorized modification whenever it is stored or
2518 Interaction of access control with other directory functions
2519 (other than the ones defined in this document) are not
2520 defined in this document, but instead in the documents where
2521 those directory functions are defined. For example, the
2522 directory replication documents should address the
2523 interaction of access control with the replication function.
2529 [LDAPv3] M. Wahl, T. Howes, S. Kille, "Lightweight Directory
2530 Access Protocol (v3)", RFC 2251, December 1997.
2532 [ECMA] ECMA, "Security in Open Systems: A Security
2533 Framework" ECMA TR/46, July 1988.
2535 [REQTS] Stokes, Byrne, Blakley, "Access Control Requirements
2536 for LDAP", RFC 2820, May 2000.
2538 [ATTR] M.Wahl, A, Coulbeck, T. Howes, S. Kille, "Lightweight
2539 Directory Access Protocol (v3)": Attribute Syntax
2540 Definitions, RFC 2252, December 1997.
2542 [UTF] M. Wahl, S. Kille, "Lightweight Directory Access
2543 Protocol (v3)": A UTF-8 String Representation of
2544 Distinguished Names", RFC 2253, December 1997.
2546 [Bradner97] Bradner, Scott, "Key Words for use in RFCs to
2547 Indicate Requirement Levels", RFC 2119.
2549 [AuthMeth] Wahl, M., Alvestrand, H., Hodges, J. and R.
2550 Morgan, "Authentication Methods for LDAP", RFC 2829, May
2553 [ABNF] D. Crocker, P. Overell, "Augmented BNF for Syntax
2554 Specifications: ABNF", RFC 2234, November 1997.
2558 Stokes, et al Expires 14 January 2001 [Page 40]
2564 Internet-Draft Access Control Model 14 July 2000
2570 This is to acknowledge the numerous companies and individuals who have
2571 contributed their valuable help and insights to the development of this
2577 Ellen Stokes Bob Blakley
2578 Tivoli Systems Tivoli Systems
2579 6300 Bridgepoint Parkway 6300 Bridgepoint Parkway
2580 Austin, TX 78731 Austin, TX 78731
2582 mail-to: estokes@tivoli.com mail-to: blakley@tivoli.com
2583 phone: +1 512 436 9098 phone: +1 512 436 1564
2584 fax: +1 512 436 1199 fax: +1 512 436 1199
2587 Debbie Rinkevich Robert Byrne
2588 IBM Sun Microsystems
2589 11400 Burnet Rd 29 Chemin du Vieux Chene
2590 Austin, TX 78758 Meylan ZIRST 38240
2592 mail-to: djbrink@us.ibm.com mail-to: rbyrne@france.sun.com
2593 phone: +1 512 838 1960 phone: +33 (0)4 76 41 42 05
2594 fax: +1 512 838 8597
2622 Stokes, et al Expires 14 January 2001 [Page 41]
2628 Internet-Draft Access Control Model 14 July 2000
2686 Stokes, et al Expires 14 January 2001 [Page 42]
2699 1. Introduction....................................... 2
2701 2. The LDAPv3 Access Control Model.................... 2
2703 3. Access Control Mechanism Attributes................ 5
2704 3.1 Root DSE Attribute for Access Control
2705 Mechanism.................................... 5
2706 3.2 Root DSE Attribute for Control of Disclosing
2707 Errors....................................... 5
2708 3.3 Subentry Class Access Control Mechanism...... 6
2710 4. The Access Control Information Attribute
2711 (ldapACI).......................................... 7
2712 4.1 The BNF...................................... 8
2713 4.1.1 ACI String Representation 8
2714 4.1.2 ACI Binary Representation 10
2715 4.2 The Components of ldapACI Attribute.......... 11
2717 4.2.2 Access Rights and Permissions 11
2719 4.2.4 Subjects and Associated
2721 4.3 Grant/Deny Evaluation Rules.................. 15
2723 5. Required Permissions for each LDAP Operation....... 17
2724 5.1 Bind Operation............................... 18
2725 5.2 Search Operation............................. 18
2726 5.3 Modify Operation............................. 21
2727 5.4 Add Operation................................ 22
2728 5.5 Delete Operation............................. 23
2729 5.6 Modify DN Operation.......................... 23
2730 5.7 Compare Operation............................ 24
2731 5.8 Abandon Operation............................ 25
2732 5.9 Extended Operation........................... 25
2734 6. Required Permissions for Handling Aliases and
2735 References......................................... 25
2736 6.1 ACI Distribution............................. 25
2737 6.2 Aliases...................................... 26
2738 6.3 Referrals.................................... 26
2740 7. Controlling Access to Access Control
2741 Information........................................ 27
2743 8. ACI Examples....................................... 27
2744 8.1 Attribute Definition......................... 27
2745 8.2 Modifying the ldapACI Values................. 28
2746 8.3 Evaluation................................... 30
2762 9. Operational Semantics of Access Control
2763 Operations......................................... 31
2764 9.1 Types of actions............................. 32
2765 9.2 Semantics of Histories....................... 32
2767 10. Access Control Parameters for LDAP Controls &
2768 Extended Operations................................ 35
2770 11. Access Control Information (ACI) Controls.......... 35
2771 11.1 getEffectiveRights Control................... 35
2772 11.1.1 Request Control 35
2773 11.1.2 Response Control 36
2774 11.1.3 Client-Server Interaction 37
2776 12. Access Control Extended Operation.................. 38
2777 12.1 LDAP Get Effective Rights Operation.......... 39
2779 13. Security Considerations............................ 40
2781 14. References......................................... 40
2828 Full Copyright Statement
2830 Copyright (C) The Internet Society (2000).á All Rights
2833 This document and translations of it may be copied and
2834 furnished to others, and derivative works that comment on or
2835 otherwise explain it or assist in its implementation may be
2836 prepared, copied, published and distributed, in whole or in
2837 part, without restriction of any kind, provided that the
2838 above copyright notice and this paragraph are included on
2839 all such copies and derivative works.á However, this
2840 document itself may not be modified in any way, such as by
2841 removing the copyright notice or references to the Internet
2842 Society or other Internet organizations, except as needed
2843 for the purpose of developing Internet standards in which
2844 case the procedures for copyrights defined in the Internet
2845 Standards process must be followed, or as required to
2846 translate it into languages other than English.
2848 The limited permissions granted above are perpetual and will
2849 not be revoked by the Internet Society or its successors or
2852 This document and the information contained herein is
2853 provided on an "AS IS" basis and THE INTERNET SOCIETY AND
2854 THE INTERNET ENGINEERING TASK FORCE DISCLAIMS ALL
2855 WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO
2856 ANY WARRANTY THAT THE USE OF THE INFORMATION HEREIN WILL NOT
2857 INFRINGE ANY RIGHTS OR ANY IMPLIED WARRANTIES OF
2858 MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.