]> git.sur5r.net Git - openldap/blob - doc/man/man5/slapd.access.5
b04758f511d254f9c6fa11c22347b51c9963dfba
[openldap] / doc / man / man5 / slapd.access.5
1 .TH SLAPD.ACCESS 5 "RELEASEDATE" "OpenLDAP LDVERSION"
2 .\" Copyright 1998-2003 The OpenLDAP Foundation All Rights Reserved.
3 .\" Copying restrictions apply.  See COPYRIGHT/LICENSE.
4 .SH NAME
5 slapd.access \- access configuration for slapd, the stand-alone LDAP daemon
6 .SH SYNOPSIS
7 ETCDIR/slapd.conf
8 .SH DESCRIPTION
9 The 
10 .BR slapd.conf (5)
11 file contains configuration information for the
12 .BR slapd (8)
13 daemon. This configuration file is also used by the
14 .BR slurpd (8)
15 replication daemon and by the SLAPD tools
16 .BR slapadd (8),
17 .BR slapcat (8),
18 and
19 .BR slapindex (8).
20 .LP
21 The
22 .B slapd.conf
23 file consists of a series of global configuration options that apply to
24 .B slapd
25 as a whole (including all backends), followed by zero or more database
26 backend definitions that contain information specific to a backend
27 instance.
28 .LP
29 The general format of
30 .B slapd.conf
31 is as follows:
32 .LP
33 .nf
34     # comment - these options apply to every database
35     <global configuration options>
36     # first database definition & configuration options
37     database    <backend 1 type>
38     <configuration options specific to backend 1>
39     # subsequent database definitions & configuration options
40     ...
41 .fi
42 .LP
43 Both the global configuration and each backend-specific section can
44 contain access information.  Backend-specific access control
45 directives are used for those entries that belong to the backend,
46 according to their naming context.  In case no access control
47 directives are defined for a backend or those which are defined are
48 not applicable, the directives from the global configuration section
49 are then used.
50 .LP
51 For entries not held in any backend (such as a root DSE), the
52 directives of the first backend (and any global directives) are
53 used.
54 .LP
55 Arguments that should be replaced by actual text are shown in
56 brackets <>.  The structure of the access control directives is
57 .TP
58 .B access to <what> "[ by <who> <access> [ <control> ] ]+"
59 Grant access (specified by 
60 .BR <access> ) 
61 to a set of entries and/or attributes (specified by 
62 .BR <what> ) 
63 by one or more requestors (specified by 
64 .BR <who> ).
65 .LP
66 The field
67 .BR <what>
68 specifies the entity the access control directive applies to.
69 It can have the forms
70 .LP
71 .nf
72         *
73         [dn[.<dnstyle>]=<DN>] 
74         [filter=<ldapfilter>]
75         [attrs=<attrlist>]
76 .fi
77 .LP
78 The wildcard
79 .B *
80 stands for all the entries.
81 .LP
82 The statement
83 .B dn=<DN>
84 selects the entries based on their naming context.
85 The pattern is a string representation of the entry's DN.
86 .BR base ,
87 the default,
88 or
89 .B exact 
90 (an alias of 
91 .BR base )
92 indicates the entry whose DN is equal to the pattern.
93 .B one
94 indicates all the entries immediately below the
95 .BR pattern ,
96 .B subtree
97 indicates all entries in the subtree at the pattern,
98 .B children
99 indicates all the entries below (subordinate to) the pattern.
100 .LP
101 If the
102 .B <dnstyle>
103 qualifier is
104 .BR regex ,
105 then the value is a regular expression pattern,
106 as detailed in
107 .BR regex (7),
108 matching a normalized string representation of the entry's DN.
109 The regex form of the pattern does not (yet) support UTF-8.
110 .LP
111 The statement
112 .B filter=<ldapfilter>
113 selects the entries based on a valid LDAP filter as described in RFC 2254.
114 .LP
115 The statement
116 .B attrs=<attrlist>
117 selects the attributes the access control rule applies to.
118 It is a comma-separated list of attribute types, plus the special names
119 .BR entry ,
120 indicating access to the entry itself, and
121 .BR children ,
122 indicating access to the entry's children. ObjectClass names may also
123 be specified in this list, which will affect all the attributes that
124 are required and/or allowed by that objectClass.
125 .LP
126 Using the form
127 .B attrs=<attr> val[.<style>]=<value>
128 specifies access to a particular value of a single attribute.
129 In this case, only a single attribute type may be given. A value
130 .B <style>
131 of
132 .B exact
133 (the default) uses the attribute's equality matching rule to compare the
134 value. If the
135 .B <style>
136 is
137 .BR regex ,
138 the provided value is used as a regular expression pattern.
139 .LP
140 The dn, filter, and attrs statements are additive; they can be used in sequence 
141 to select entities the access rule applies to based on naming context,
142 value and attribute type simultaneously.
143 .LP
144 The field
145 .B <who>
146 indicates whom the access rules apply to.
147 Multiple 
148 .B <who>
149 statements can appear in an access control statement, indicating the
150 different access privileges to the same resource that apply to different
151 accessee.
152 It can have the forms
153 .LP
154 .nf
155         *
156         anonymous
157         users
158         self
159
160         dn[.<dnstyle>[,<modifier>]]=<DN>
161         dnattr=<attrname>
162         group[/<objectclass>[/<attrname>]]
163                 [.<style>]=<group>
164         peername[.<style>]=<peername>
165         sockname[.<style>]=<sockname>
166         domain[.<domainstyle>[,<modifier>]]=<domain>
167         sockurl[.<style>]=<sockurl>
168         set[.<style>]=<pattern>
169
170         ssf=<n>
171         transport_ssf=<n>
172         tls_ssf=<n>
173         sasl_ssf=<n>
174
175         aci=<attrname>
176 .fi
177 .LP
178 They may be specified in combination.
179 .LP
180 .nf
181 .fi
182 .LP
183 The wildcard
184 .B *
185 refers to everybody.
186 .LP
187 The keyword
188 .B anonymous
189 means access is granted to unauthenticated clients; it is mostly used 
190 to limit access to authentication resources (e.g. the
191 .B userPassword
192 attribute) to unauthenticated clients for authentication purposes.
193 .LP
194 The keyword
195 .B users
196 means access is granted to authenticated clients.
197 .LP
198 The keyword
199 .B self
200 means access to an entry is allowed to the entry itself (e.g. the entry
201 being accessed and the requesting entry must be the same).
202 .LP
203 The statement
204 .B dn=<DN>
205 means that access is granted to the matching DN.
206 The optional style qualifier
207 .B dnstyle
208 allows the same choices of the dn form of the
209 .B <what>
210 field.  In addition, the
211 .B regex
212 style can exploit substring substitution of submatches in the
213 .B <what>
214 dn.regex clause by using the form
215 .BR $<digit> ,
216 with 
217 .B digit
218 ranging from 1 to 9.
219 .LP
220 The statement
221 .B dnattr=<attrname>
222 means that access is granted to requests whose DN is listed in the
223 entry being accessed under the 
224 .B <attrname>
225 attribute.
226 .LP
227 The statement
228 .B group=<group>
229 means that access is granted to requests whose DN is listed
230 in the group entry whose DN is given by
231 .BR <group> .
232 The optional parameters
233 .B <objectclass>
234 and
235 .B <attrname>
236 define the objectClass and the member attributeType of the group entry.
237 The optional style qualifier
238 .B <style>
239 can be
240 .BR regex ,
241 which means that
242 .B <group>
243 will be expanded according to regex (7), and
244 .B base
245 or
246 .B exact
247 (an alias of
248 .BR base ),
249 which means that exact match will be used.
250 .LP
251 For static groups, the specified attributeType must have
252 .B DistinguishedName
253 or
254 .B NameAndOptionalUID
255 syntax. For dynamic groups the attributeType must
256 be a subtype of the
257 .B labeledURI
258 attributeType.
259 .LP
260 The statements
261 .BR peername=<peername> ,
262 .BR sockname=<sockname> ,
263 .BR domain=<domain> ,
264 and
265 .BR sockurl=<sockurl>
266 mean that the contacting host IP for
267 .BR peername ,
268 the named pipe file name for
269 .BR sockname ,
270 the contacting host name for
271 .BR domain ,
272 and the contacting URL for
273 .BR sockurl
274 are compared against
275 .B pattern
276 to determine access.
277 The same
278 .B style
279 rules for pattern match described for the
280 .B group
281 case apply. 
282 The
283 .BR domain 
284 clause also allows the
285 .B subtree
286 style, which succeeds when a fully qualified name exactly matches the
287 .BR domain
288 pattern, or its trailing part, after a 
289 .BR dot ,
290 exactly matches the 
291 .BR domain
292 pattern.
293 The
294 .B domain
295 of the contacting host is determined by performing a DNS reverse lookup.
296 As this lookup can easily be spoofed, use of the
297 .B domain
298 statement is strongly discouraged.  By default, reverse lookups are disabled.
299 .LP
300 The statement
301 .B set=<pattern>
302 is undocumented yet.
303 .LP
304 The statement
305 .B aci=<attrname>
306 means that the access control is determined by the values in the
307 .B attrname
308 of the entry itself.
309 ACIs are experimental; they must be enabled at compile time.
310 .LP
311 The statements
312 .BR ssf=<n> ,
313 .BR transport_ssf=<n> ,
314 .BR tls_ssf=<n> ,
315 and
316 .BR sasl_ssf=<n>
317 set the required Security Strength Factor (ssf) required to grant access.
318 .LP
319 The field
320 .B <access> ::= [self]{<level>|<priv>}
321 determines the access level or the specific access privileges the
322 .B who 
323 field will have.
324 Its component are defined as
325 .LP
326 .nf
327         <level> ::= none|auth|compare|search|read|write
328         <priv> ::= {=|+|-}{w|r|s|c|x}+
329 .fi
330 .LP
331 The modifier
332 .B self
333 allows special operations like having a certain access level or privilege
334 only in case the operation involves the name of the user that's requesting
335 the access.
336 It implies the user that requests access is bound.
337 An example is the
338 .B selfwrite
339 access to the member attribute of a group, which allows one to add/delete
340 its own DN from the member list of a group, without affecting other members.
341 .LP
342 The 
343 .B level 
344 access model relies on an incremental interpretation of the access
345 privileges.
346 The possible levels are
347 .BR none ,
348 .BR auth ,
349 .BR compare ,
350 .BR search ,
351 .BR read ,
352 and
353 .BR write .
354 Each access level implies all the preceding ones, thus 
355 .B write
356 access will imply all accesses.
357 While
358 .B none
359 is trivial, 
360 .B auth
361 access means that one is allowed access to an attribute to perform
362 authentication/authorization operations (e.g.
363 .BR bind )
364 with no other access.
365 This is useful to grant unauthenticated clients the least possible 
366 access level to critical resources, like passwords.
367 .LP
368 The
369 .B priv
370 access model relies on the explicit setting of access privileges
371 for each clause.
372 The
373 .B =
374 sign resets previously defined accesses; as a consequence, the final 
375 access privileges will be only those defined by the clause.
376 The 
377 .B +
378 and
379 .B -
380 signs add/remove access privileges to the existing ones.
381 The privileges are
382 .B w
383 for write,
384 .B r
385 for read,
386 .B s 
387 for search,
388 .B c 
389 for compare, and
390 .B x
391 for authentication.
392 More than one privilege can be added in one statement.
393 .LP
394 The optional field
395 .B <control>
396 controls the flow of access rule application.
397 It can have the forms
398 .LP
399 .nf
400         stop
401         continue
402         break
403 .fi
404 .LP
405 where
406 .BR stop ,
407 the default, means access checking stops in case of match.
408 The other two forms are used to keep on processing access clauses.
409 In detail, the
410 .B continue
411 form allows for other 
412 .B <who>
413 clauses in the same 
414 .B <access>
415 clause to be considered, so that they may result in incrementally altering
416 the privileges, while the
417 .B break
418 form allows for other
419 .B <access>
420 clauses that match the same target to be processed.
421 Consider the (silly) example
422 .LP
423 .nf
424         access to dn.subtree="dc=example,dc=com" attrs=cn
425                 by * =cs break
426
427         access to dn.subtree="ou=People,dc=example,dc=com"
428                 by * +r
429 .fi
430 .LP
431 which allows search and compare privileges to everybody under
432 the "dc=example,dc=com" tree, with the second rule allowing
433 also read in the "ou=People" subtree,
434 or the (even more silly) example
435 .LP
436 .nf
437         access to dn.subtree="dc=example,dc=com" attrs=cn
438                 by * =cs continue
439                 by users +r
440 .fi
441 .LP
442 which grants everybody search and compare privileges, and adds read
443 privileges to authenticated clients.
444 .SH CAVEATS
445 It is strongly recommended to explicitly use the most appropriate
446 DN 
447 .BR style ,
448 to avoid possible incorrect specifications of the access rules as well
449 as for performance (avoid unrequired regex matching when an exact
450 match suffices) reasons.
451 .LP
452 An adminisistrator might create a rule of the form:
453 .LP
454 .nf
455         access to dn.regex="dc=example,dc=com"
456                 by ...
457 .fi
458 .LP
459 expecting it to match all entries in the subtree "dc=example,dc=com".
460 However, this rule actually matches any DN which contains anywhere
461 the substring "dc=example,dc=com".  That is, the rule matches both
462 "uid=joe,dc=example,dc=com" and "dc=example,dc=com,uid=joe".
463 .LP
464 To match the desired subtree, the rule would be more precisely
465 written:
466 .LP
467 .nf
468         access to dn.regex="^(.+,)?dc=example,dc=com$$"
469                 by ...
470 .fi
471 .LP
472 For performance reasons, it would be better to use the subtree style.
473 .LP
474 .nf
475         access to dn.subtree="dc=example,dc=com"
476                 by ...
477 .fi
478 .LP
479 .SH FILES
480 .TP
481 ETCDIR/slapd.conf
482 default slapd configuration file
483 .SH SEE ALSO
484 .BR slapd (8),
485 .LP
486 "OpenLDAP Administrator's Guide" (http://www.OpenLDAP.org/doc/admin/)
487 .SH ACKNOWLEDGEMENTS
488 .B OpenLDAP
489 is developed and maintained by The OpenLDAP Project (http://www.openldap.org/).
490 .B OpenLDAP
491 is derived from University of Michigan LDAP 3.3 Release.