]> git.sur5r.net Git - openldap/blobdiff - doc/guide/admin/slapdconfig.sdf
ITS#2497 value-level ACLs
[openldap] / doc / guide / admin / slapdconfig.sdf
index 5f58324bb44286853fe1032e90843795296be94c..7b6bf2464c9e85849190237aca9b42dcf7620428 100644 (file)
@@ -1,5 +1,5 @@
 # $OpenLDAP$
-# Copyright 1999-2000, The OpenLDAP Foundation, All Rights Reserved.
+# Copyright 1999-2003, The OpenLDAP Foundation, All Rights Reserved.
 # COPYING RESTRICTIONS APPLY, see COPYRIGHT.
 
 H1: The slapd Configuration File
@@ -92,11 +92,16 @@ set of entries and/or attributes (specified by <what>) by one or
 more requesters (specified by <who>).
 See the {{SECT:Access Control}} section of this chapter for a
 summary of basic usage.
+
 !if 0
 More details discussion of this directive can be found in the
 {{SECT:Advanced Access Control}} chapter.
 !endif
 
+Note: If no {{EX:access}} directives are specified, the default
+access control policy, {{EX:access to * by * read}}, allows all
+both authenticated and anonymous users read access.
+
 
 H4: attributetype <{{REF:RFC2252}} Attribute Type Description>
 
@@ -104,23 +109,6 @@ This directive defines an attribute type.
 Please see the {{SECT:Schema Specification}} chapter
 for information regarding how to use this directive.
 
-H4: defaultaccess { none | compare | search | read | write }
-
-This directive specifies the default access to grant requesters
-when no {{EX:access}} directives have been specified.  Any given
-access level implies all lesser access levels (e.g., read access
-implies search and compare but not write).
-
-Note: It is recommend that the {{EX:access}} directive be used
-to specify access control.  See the {{SECT:Access Control}}
-section of this chapter for information regarding the {{EX:access}}
-directive.
-
-\Default:
-
-E: defaultaccess read
-
-
 H4: idletimeout <integer>
 
 Specify the number of seconds to wait before forcibly closing
@@ -246,15 +234,14 @@ supported backend types listed in Table 5.2.
 Types  Description
 bdb    Berkeley DB transactional backend
 dnssrv DNS SRV backend
-ldbm   Lightweight DBM backend
 ldap   Lightweight Directory Access Protocol (Proxy) backend
+ldbm   Lightweight DBM backend
 meta   Meta Directory backend
 monitor        Monitor backend
 passwd Provides read-only access to {{passwd}}(5)
 perl   Perl Programmable backend
 shell  Shell (extern program) backend
 sql    SQL Programmable backend
-tcl    TCL Programmable backend
 !endblock
 
 \Example:
@@ -298,9 +285,9 @@ perform" error.
 H4: replica
 
 >      replica host=<hostname>[:<port>]
->              [bindmethod={ simple | kerberos | sasl }]
+>              [bindmethod={simple|kerberos|sasl}]
 >              ["binddn=<DN>"]
->              [mech=<mech>]
+>              [saslmech=<mech>]
 >              [authcid=<identity>]
 >              [authzid=<identity>]
 >              [credentials=<password>]
@@ -336,7 +323,7 @@ mechanisms.  Kerberos authentication requires {{EX:binddn}} and
 {{EX:srvtab}} parameters.
 
 SASL authentication is generally recommended.  SASL authentication
-requires specification of a mechanism using the {{EX:mech}} parameter.
+requires specification of a mechanism using the {{EX:saslmech}} parameter.
 Depending on the mechanism, an authentication identity and/or
 credentials can be specified using {{EX:authcid}} and {{EX:credentials}}
 respectively.  The {{EX:authzid}} parameter may be used to specify
@@ -365,8 +352,8 @@ H4: rootdn <dn>
 This directive specifies the DN that is not subject to
 access control or administrative limit restrictions for
 operations on this database.  The DN need not refer to
-an entry in the directory. The DN may refer to a SASL
-identity.
+an entry in this database or even in the directory. The
+DN may refer to a SASL identity.
 
 Entry-based Example:
 
@@ -376,18 +363,28 @@ SASL-based Example:
 
 >      rootdn "uid=root,cn=example.com,cn=digest-md5,cn=auth"
 
+See the {{SECT:SASL Authentication}} section for information on
+SASL authentication identities.
+
 
 H4: rootpw <password>
 
-This directive specifies a password for the DN given above that
-will always work, regardless of whether an entry with the given
-DN exists or has a password.
-This directive is deprecated in favor of SASL based authentication.
+This directive can be used to specifies a password for the DN for
+the rootdn (when the rootdn is set to a DN within the database).
 
 \Example:
 
 >      rootpw secret
 
+It is also permissible to provide hash of the password in RFC 2307
+form.  {{slappasswd}}(8) may be used to generate the password hash.
+
+\Example:
+
+>      rootpw {SSHA}ZKKuqbEKJfKSXhUbHG3fG8MDn9j1v4QN
+
+The hash was generated using the command {{EX:slappasswd -s secret}}.
+
 
 H4: suffix <dn suffix>
 
@@ -408,6 +405,79 @@ looks at the suffix line(s) in each database definition in the
 order they appear in the file. Thus, if one database suffix is a
 prefix of another, it must appear after it in the config file.
 
+H4: syncrepl
+
+>      syncrepl id=<replica ID>
+>              provider=ldap[s]://<hostname>[:port]
+>              [updatedn=<dn>]
+>              [binddn=<dn>]
+>              [bindmethod=simple|sasl]
+>              [binddn=<simple DN>]
+>              [credentials=<simple passwd>]
+>              [saslmech=<SASL mech>]
+>              [secprops=<properties>]
+>              [realm=<realm>]
+>              [authcId=<authentication ID>]
+>              [authzId=<authorization ID>]
+>              [searchbase=<base DN>]
+>              [filter=<filter str>]
+>              [attrs=<attr list>]
+>              [scope=sub|one|base]
+>              [schemachecking=on|off]
+>              [type=refreshOnly|refreshAndPersist]
+>              [interval=dd:hh:mm]
+
+This directive specifies an LDAP Sync replication between this
+database and the specified replication provider site. The id=
+parameter identifies the LDAP Sync specification in the database.
+The {{EX:provider=}} parameter specifies a replication provider site as
+an LDAP URI.
+
+The LDAP Sync replication specification is based on the search
+specification which defines the content of the replica. The replica
+consists of the entries matching the search specification. As with
+the normal searches, the search specification consists of
+{{EX:searchbase}}, {{EX:scope}}, {{EX:filter}}, and EX:attrs}}
+parameters.
+
+The LDAP Sync replication has two types of operating modes. In the
+{{EX:refreshOnly}} mode, the next synchronization session is
+rescheduled at the interval time after the current session finishes.
+The default interval is set to one day. In the {{EX:refreshAndPersist}}
+mode, the LDAP Sync search remains persistent in the provider LDAP
+server. Further updates to the provider replica will generate
+searchResultEntry to the consumer.
+
+The schema checking can be enforced at the LDAP Sync consumer site
+by turning on the {{EX:schemachecking}} parameter. The default is off.
+
+The {{EX:binddn=}} parameter gives the DN for the LDAP Sync search
+to bind as to the provider slapd. The content of the replica will
+be subject to the access control privileges of the DN.
+
+The {{EX:bindmethod}} is {{EX:simple}} or {{EX:sasl}}, depending
+on whether simple password-based authentication or SASL authentication
+is to be used when connecting to the provider slapd.
+
+Simple authentication should not be used unless adequate integrity
+and data confidential protections are in place (e.g. TLS or IPSEC).
+Simple authentication requires specification of {{EX:binddn}} and
+{{EX:credentials}} parameters.
+
+SASL authentication is generally recommended. SASL authentication
+requires specification of a mechanism using the {{EX:mech}} parameter.
+Depending on the mechanism, an authentication identity and/or
+credentials can be specified using {{EX:authcid}} and {{EX:credentials}}
+respectively.  The {{EX:authzid}} parameter may be used to specify
+a proxy authorization identity.
+
+The LDAP Sync replication is supported in three native backends:
+back-bdb, back-hdb, and back-ldbm.
+
+See the {{SECT:LDAP Sync Replication}} chapter for more information
+on how to use this directive.
+
+
 H4: updatedn <dn>
 
 This directive is only applicable in a slave slapd. It specifies
@@ -440,9 +510,10 @@ If specified multiple times, each {{TERM:URL}} is provided.
 
 H3: BDB Database Directives
 
-Directives in this category only apply to a BDB database. That is,
-they must follow a "database bdb" line and come before any
-subsequent "backend" or "database" line.
+Directives in this category only apply to a {{TERM:BDB}} database.
+That is, they must follow a "database bdb" line and come before any
+subsequent "backend" or "database" line.  For a complete reference
+of BDB configuration directives, see {{slapd-bdb}}(5).
 
 H4: directory <directory>
 
@@ -456,9 +527,10 @@ containing the database and associated indices live.
 
 H3: LDBM Database Directives
 
-Directives in this category only apply to a LDBM database. That is,
-they must follow a "database ldbm" line and come before any
-subsequent "backend" or "database" line.
+Directives in this category only apply to a {{TERM:LDBM}} database.
+That is, they must follow a "database ldbm" line and come before
+any subsequent "backend" or "database" line.  For a complete reference
+of LDBM configuration directives, see {{slapd-ldbm}}(5).
 
 H4: cachesize <integer>
 
@@ -554,72 +626,115 @@ access line is:
 
 >      <access directive> ::= access to <what>
 >              [by <who> <access> <control>]+
->      <what> ::= * | [ dn[.<dn style>]=<regex>]
+>      <what> ::= * |
+>              [dn[.<basic-style>]=<regex> | dn.<scope-style>=<DN>]
 >              [filter=<ldapfilter>] [attrs=<attrlist>]
->      <dn style> ::= regex | exact | base | one | subtree | children
->      <attrlist> ::= <attr> | <attr> , <attrlist>
+>      <basic-style> ::= regex | exact
+>      <scope-style> ::= base | one | subtree | children
+>      <attrlist> ::= <attr> [val[.<basic-style>]=<regex>] | <attr> , <attrlist>
 >      <attr> ::= <attrname> | entry | children
->      <who> ::= [* | anonymous | users | self |
->              dn[.<dn style>]=<regex>]
->              [dnattr=<attrname> ]
->              [group[/<objectclass>[/<attrname>][.<basic style>]]=<regex> ]
->              [peername[.<basic style>]=<regex>]
->              [sockname[.<basic style>]=<regex>]
->              [domain[.<basic style>]=<regex>]
->              [sockurl[.<basic style>]=<regex>]
+>      <who> ::= * | [anonymous | users | self
+>                      | dn[.<basic-style>]=<regex> | dn.<scope-style>=<DN>] 
+>              [dnattr=<attrname>]
+>              [group[/<objectclass>[/<attrname>][.<basic-style>]]=<regex>]
+>              [peername[.<basic-style>]=<regex>]
+>              [sockname[.<basic-style>]=<regex>]
+>              [domain[.<basic-style>]=<regex>]
+>              [sockurl[.<basic-style>]=<regex>]
 >              [set=<setspec>]
 >              [aci=<attrname>]
->      <basic style> ::= regex | exact
 >      <access> ::= [self]{<level>|<priv>}
 >      <level> ::= none | auth | compare | search | read | write
 >      <priv> ::= {=|+|-}{w|r|s|c|x}+
 >      <control> ::= [stop | continue | break]
 
-where the <what> part selects the entries and/or attributes to
-which the access applies, the {{EX:<who>}} part specifies which
-entities are granted access, and the {{EX:<access>}} part specifies
-the access granted. Multiple {{EX:<who> <access> <control>}} triplets
-are supported, allowing many entities to be granted different
-access to the same set of entries and attributes. Not all of these
-access control options are described here; for more details see
-the {{slapd.access}}(5) man page.
+where the <what> part selects the entries and/or attributes to which
+the access applies, the {{EX:<who>}} part specifies which entities
+are granted access, and the {{EX:<access>}} part specifies the
+access granted. Multiple {{EX:<who> <access> <control>}} triplets
+are supported, allowing many entities to be granted different access
+to the same set of entries and attributes. Not all of these access
+control options are described here; for more details see the
+{{slapd.access}}(5) man page.
 
 
 H3: What to control access to
 
-The <what> part of an access specification determines the
-entries and attributes to which the access control applies.
-Entries can be selected in two ways: by a regular expression
-matching the entry's distinguished name:
+The <what> part of an access specification determines the entries
+and attributes to which the access control applies.  Entries are
+commonly selected in two ways: by DN and by filter.  The following
+qualifiers select entries by DN:
+
+>      by *
+>      by dn[.<basic-style>]=<regex>
+>      by dn.<scope-style>=<DN>
 
->      dn=<regular expression>
+The first form is used to select all entries.  The second form may
+be used to select entries by matching a regular expression against
+the target entry's {{normalized DN}}.   (The second form is not
+discussed further in this document.)  The third form is used to
+select entries which are within the requested scope of DN.  The
+<DN> is a string representation of the Distinguished Name, as
+described in {{REF:RFC2253}}.
 
-Note: The DN pattern specified should be "normalized" to the RFC2253
-restricted DN form.  In particular, there should be no extra spaces
-and commas should be used to separate components.  An example
-normalized DN is "{{EX:cn=Babs Jensen,dc=example,dc=com}}".  An
-example of a non-normalized DN is "{{EX:cn=Babs Jensen; dc=example;
-dc=com}}".
+The scope can be either {{EX:base}}, {{EX:one}}, {{EX:subtree}},
+or {{EX:children}}.  Where {{EX:base}} matches only the entry with
+provided DN, {{EX:one}} matches the entries whose parent is the
+provided DN, {{EX:subtree}} matches all entries in the subtree whose
+root is the provided DN, and {{EX:children}} matches all entries
+under the DN (but not the entry named by the DN).
 
-Or, entries may be selected by a filter matching some
-attribute(s) in the entry:
+For example, if the directory contained entries named:
 
->      filter=<ldap filter>
+>      0: o=suffix
+>      1: cn=Manager,o=suffix
+>      2: ou=people,o=suffix
+>      3: uid=kdz,ou=people,o=suffix
+>      4: cn=addresses,uid=kdz,ou=people,o=suffix
+>      5: uid=hyc,ou=people,o=suffix
+
+\Then:
+. {{EX:dn.base="ou=people,o=suffix"}} match 2;
+. {{EX:dn.one="ou=people,o=suffix"}} match 3, and 5;
+. {{EX:dn.subtree="ou=people,o=suffix"}} match 2, 3, 4, and 5; and
+. {{EX:dn.children="ou=people,o=suffix"}} match 3, 4, and 5.
+
+
+Entries may also be selected using a filter:
+
+>      by filter=<ldap filter>
 
 where <ldap filter> is a string representation of an LDAP
-search filter, as described in {{REF:RFC2254}}.
+search filter, as described in {{REF:RFC2254}}.  For example:
+
+>      by filter=(objectClass=person)
+
+Note that entries may be selected by both DN and filter by
+including both qualifiers in the <what> clause.
 
-Attributes within an entry are selected by including a
-comma-separated list of attribute names in the <what>
-selector:
+>      by dn.one="ou=people,o=suffix" filter=(objectClass=person)
+
+Attributes within an entry are selected by including a comma-separated
+list of attribute names in the <what> selector:
 
 >      attrs=<attribute list>
 
-Access to the entry itself must be granted or denied using the
-special attribute name "{{EX:entry}}". Note that giving access to an
-attribute is not enough; access to the entry itself through the
-{{EX:entry}} attribute is also required. The complete examples at
-the end of this section should help clear things up.
+A specific value of an attribute is selected by using a single
+attribute name and also using a value selector:
+
+>      attrs=<attribute> val[.<style>]=<regex>
+
+There are two special {{pseudo}} attributes {{EX:entry}} and
+{{EX:children}}.  To read (and hence return) a target entry, the
+subject must have {{EX:read}} access to the target's {{entry}}
+attribute.  To add or delete an entry, the subject must have
+{{EX:write}} access to the entry's {{EX:entry}} attribute AND must
+have {{EX:write}} access to the entry's parent's {{EX:children}}
+attribute.  To rename an entry, the subject must have {{EX:write}}
+access to entry's {{EX:entry}} attribute AND have {{EX:write}}
+access to both the old parent's and new parent's {{EX:children}}
+attributes.  The complete examples at the end of this section should
+help clear things up.
 
 Lastly, there is a special entry selector {{EX:"*"}} that is used to
 select any entry.  It is used when no other {{EX:<what>}}
@@ -634,31 +749,20 @@ The following table summarizes entity specifiers:
 
 !block table; align=Center; coltags="EX,N"; \
        title="Table 5.3: Access Entity Specifiers"
-Specifier      Entities
-*              All, including anonymous and authenticated users
-anonymous      Anonymous (non-authenticated) users
-users          Authenticated users
-self           User associated with target entry
-dn=<regex>     Users matching regular expression
+Specifier|Entities
+*|All, including anonymous and authenticated users
+anonymous|Anonymous (non-authenticated) users
+users|Authenticated users
+self|User associated with target entry
+dn[.<basic-style>]=<regex>|Users matching a regular expression
+dn.<scope-style>=<DN>|Users within scope of a DN
 !endblock
 
-The DN specifier takes a regular expression which is used
-to match against the "normalized" DN of the current entity.
-
->      dn=<regular expression>
-
-By "normalized", we mean that all extra spaces have been
-removed from the entity's DN and commas are used to
-separate RDN components.
-
-Other control factors are also supported.
-For example, a {{EX:<what>}} can be restricted by a
-regular expression matching the client's domain name:
-
->      domain=<regular expression>
+The DN specifier behaves much like <what> clause DN specifiers.
 
-or by an entry listed in a DN-valued attribute in the entry to
-which the access applies:
+Other control factors are also supported.  For example, a {{EX:<who>}}
+can be restricted by an entry listed in a DN-valued attribute in
+the entry to which the access applies:
 
 >      dnattr=<dn-valued attribute name>
 
@@ -667,6 +771,10 @@ whose DN is listed in an attribute of the entry (e.g., give
 access to a group entry to whoever is listed as the owner of
 the group entry).
 
+Some factors may not be appropriate in all environments (or any).
+For example, the domain factor relies on IP to domain name lookups.
+As these can easily spoofed, the domain factor should not be avoided.
+
 
 H3: The access to grant
 
@@ -741,60 +849,76 @@ This access directive grants read access to everyone.
 >              by anonymous auth
 >              by * read
 
-This directive allows users to modify their own entries,
-allows authenticate, and allows all others to read.
-Note that only the first {{EX:by <who>}} clause which matches applies.
-Hence, the anonymous users are granted {{EX:auth}}, not {{EX:read}}.
-The last clause could just as well have been "{{EX:by users read}}".
+This directive allows the user to modify their entry, allows anonymous
+to authentication against these entries, and allows all others to
+read these entries.  Note that only the first {{EX:by <who>}} clause
+which matches applies.  Hence, the anonymous users are granted
+{{EX:auth}}, not {{EX:read}}.  The last clause could just as well
+have been "{{EX:by users read}}".
+
+It is often desirable to restrict operations based upon the level
+of protection in place.  The following shows how security strength
+factors (SSF) can be used.
 
-The following example shows the use of a regular expression
+>      access to *
+>              by ssf=128 self write
+>              by ssf=64 anonymous auth
+>              by ssf=64 users read
+
+This directive allows users to modify their own entries if security
+protections have of strength 128 or better have been established,
+allows authentication access to anonymous users, and read access
+when 64 or better security protections have been established.  If
+client has not establish sufficient security protections, the
+implicit {{EX:by * none}} clause would be applied.
+
+The following example shows the use of a style specifiers
 to select the entries by DN in two access directives where
 ordering is significant.
 
->      access to dn=".*,dc=example,dc=com"
+>      access to dn.children="dc=example,dc=com"
 >              by * search
->      access to dn=".*,dc=com"
+>      access to dn.children="dc=com"
 >              by * read
 
-Read access is granted to entries under the {{EX:dc=com}}
-subtree, except for those entries under the {{EX:dc=example,dc=com}}
-subtree, to which search access is granted.  No access is granted to
-{{EX:dc=com}} as neither access directive matches this DN.
-If the order of these access directives was reversed, the
-trailing directive would never be reached, since all
-{{EX:dc=example,dc=com}} entries are also {{EX:dc=com}} entries.
-
-Also note that if no {{EX:access to}} directive matches or
-no {{EX:by <who>}} clause, {{B:access is denied}}.  That is, every
-{{EX:access to}} directive ends with an implicit {{EX:by * none}}
-clause and every access list ends with an implicit
-{{EX:access to * by * none}} directive.  Only if no access controls
-are specified is the {{EX:defaultaccess}} granted.
-
-The next example again shows the importance of ordering,
-both of the access directives and the {{EX:by <who>}} clauses.
-It also shows the use of an attribute selector to grant access
-to a specific attribute and various {{EX:<who>}} selectors.
-
->      access to dn="(.*,)?dc=example,dc=com" attr=homePhone
+Read access is granted to entries under the {{EX:dc=com}} subtree,
+except for those entries under the {{EX:dc=example,dc=com}} subtree,
+to which search access is granted.  No access is granted to
+{{EX:dc=com}} as neither access directive matches this DN.  If the
+order of these access directives was reversed, the trailing directive
+would never be reached, since all entries under {{EX:dc=example,dc=com}}
+are also under {{EX:dc=com}} entries.
+
+Also note that if no {{EX:access to}} directive matches or no {{EX:by
+<who>}} clause, {{B:access is denied}}.  That is, every {{EX:access
+to}} directive ends with an implicit {{EX:by * none}} clause and
+every access list ends with an implicit {{EX:access to * by * none}}
+directive.
+
+The next example again shows the importance of ordering, both of
+the access directives and the {{EX:by <who>}} clauses.  It also
+shows the use of an attribute selector to grant access to a specific
+attribute and various {{EX:<who>}} selectors.
+
+>      access to dn.subtree="dc=example,dc=com" attr=homePhone
 >              by self write
->              by dn="(.*,)?dc=example,dc=com" search
->              by domain=.*\.example\.com read
->      access to dn="(.*,)?dc=example,dc=com"
+>              by dn.children=dc=example,dc=com" search
+>              by peername=IP:10\..+ read
+>      access to dn.subtree="dc=example,dc=com"
 >              by self write
->              by dn=".*,dc=example,dc=com" search
+>              by dn.children="dc=example,dc=com" search
 >              by anonymous auth
 
 This example applies to entries in the "{{EX:dc=example,dc=com}}"
-subtree. To all attributes except {{EX:homePhone}}, the entry itself
-can write them, other {{EX:example.com}} entries can search by them,
-anybody else has no access (implicit {{EX:by * none}}) excepting for
-authentication/authorization (which is always done anonymously).
-The {{EX:homePhone}} attribute is writable by the entry, searchable
-by other {{EX:example.com}} entries, readable by clients connecting
-from somewhere in the {{EX:example.com}} domain, and otherwise not
-readable (implicit {{EX:by * none}}).  All other access
-is denied by the implicit {{EX:access to * by * none}}.
+subtree. To all attributes except {{EX:homePhone}}, an entry can
+write to itself, entries under {{EX:example.com}} entries can search
+by them, anybody else has no access (implicit {{EX:by * none}})
+excepting for authentication/authorization (which is always done
+anonymously).  The {{EX:homePhone}} attribute is writable by the
+entry, searchable by entries under {{EX:example.com}}, readable by
+clients connecting from network 10, and otherwise not readable
+(implicit {{EX:by * none}}).  All other access is denied by the
+implicit {{EX:access to * by * none}}.
 
 Sometimes it is useful to permit a particular DN to add or
 remove itself from an attribute. For example, if you would like to
@@ -873,11 +997,11 @@ E: 23.    # database access control definitions
 E: 24. access to attr=userPassword
 E: 25.         by self write
 E: 26.         by anonymous auth
-E: 27.         by dn="cn=Admin,dc=example,dc=com" write
+E: 27.         by dn.base="cn=Admin,dc=example,dc=com" write
 E: 28.         by * none
 E: 29. access to *
 E: 30.         by self write
-E: 31.         by dn="cn=Admin,dc=example,dc=com" write
+E: 31.         by dn.base="cn=Admin,dc=example,dc=com" write
 E: 32.         by * read
 
 Line 5 is a comment. The start of the database definition is marked