Annotation of embedaddon/sudo/doc/sudoers.ldap.mdoc.in, revision 1.1.1.1

1.1       misho       1: .\"
                      2: .\" Copyright (c) 2003-2012 Todd C. Miller <Todd.Miller@courtesan.com>
                      3: .\"
                      4: .\" Permission to use, copy, modify, and distribute this software for any
                      5: .\" purpose with or without fee is hereby granted, provided that the above
                      6: .\" copyright notice and this permission notice appear in all copies.
                      7: .\"
                      8: .\" THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
                      9: .\" WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
                     10: .\" MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
                     11: .\" ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
                     12: .\" WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
                     13: .\" ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
                     14: .\" OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
                     15: .\" ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
                     16: .\"
                     17: .Dd July 12, 2012
                     18: .Dt SUDOERS.LDAP @mansectsu@
                     19: .Os Sudo @PACKAGE_VERSION@
                     20: .Sh NAME
                     21: .Nm sudoers.ldap
                     22: .Nd sudo LDAP configuration
                     23: .Sh DESCRIPTION
                     24: In addition to the standard
                     25: .Em sudoers
                     26: file,
                     27: .Nm sudo
                     28: may be configured
                     29: via LDAP.
                     30: This can be especially useful for synchronizing
                     31: .Em sudoers
                     32: in a large, distributed environment.
                     33: .Pp
                     34: Using LDAP for
                     35: .Em sudoers
                     36: has several benefits:
                     37: .Bl -bullet
                     38: .It
                     39: .Nm sudo
                     40: no longer needs to read
                     41: .Em sudoers
                     42: in its entirety.
                     43: When LDAP is used, there are only two or three LDAP queries per invocation.
                     44: This makes it especially fast and particularly usable in LDAP environments.
                     45: .It
                     46: .Nm sudo
                     47: no longer exits if there is a typo in
                     48: .Em sudoers .
                     49: It is not possible to load LDAP data into the server that does
                     50: not conform to the sudoers schema, so proper syntax is guaranteed.
                     51: It is still possible to have typos in a user or host name, but
                     52: this will not prevent
                     53: .Nm sudo
                     54: from running.
                     55: .It
                     56: It is possible to specify per-entry options that override the global
                     57: default options.
                     58: .Pa @sysconfdir@/sudoers
                     59: only supports default options and limited options associated with
                     60: user/host/commands/aliases.
                     61: The syntax is complicated and can be difficult for users to understand.
                     62: Placing the options directly in the entry is more natural.
                     63: .It
                     64: The
                     65: .Nm visudo
                     66: program is no longer needed.
                     67: .Nm visudo
                     68: provides locking and syntax checking of the
                     69: .Pa @sysconfdir@/sudoers
                     70: file.
                     71: Since LDAP updates are atomic, locking is no longer necessary.
                     72: Because syntax is checked when the data is inserted into LDAP, there
                     73: is no need for a specialized tool to check syntax.
                     74: .El
                     75: .Pp
                     76: Another major difference between LDAP and file-based
                     77: .Em sudoers
                     78: is that in LDAP,
                     79: .Nm sudo Ns No -specific
                     80: Aliases are not supported.
                     81: .Pp
                     82: For the most part, there is really no need for
                     83: .Nm sudo Ns No -specific
                     84: Aliases.
                     85: Unix groups or user netgroups can be used in place of User_Aliases and
                     86: Runas_Aliases.
                     87: Host netgroups can be used in place of Host_Aliases.
                     88: Since Unix groups and netgroups can also be stored in LDAP there is no
                     89: real need for
                     90: .Nm sudo Ns No -specific
                     91: aliases.
                     92: .Pp
                     93: Cmnd_Aliases are not really required either since it is possible
                     94: to have multiple users listed in a
                     95: .Li sudoRole .
                     96: Instead of defining a Cmnd_Alias that is referenced by multiple users,
                     97: one can create a
                     98: .Li sudoRole
                     99: that contains the commands and assign multiple users to it.
                    100: .Ss SUDOers LDAP container
                    101: The
                    102: .Em sudoers
                    103: configuration is contained in the
                    104: .Li ou=SUDOers
                    105: LDAP container.
                    106: .Pp
                    107: Sudo first looks for the
                    108: .Li cn=default
                    109: entry in the SUDOers container.
                    110: If found, the multi-valued
                    111: .Li sudoOption
                    112: attribute is parsed in the same manner as a global
                    113: .Li Defaults
                    114: line in
                    115: .Pa @sysconfdir@/sudoers .
                    116: In the following example, the
                    117: .Ev SSH_AUTH_SOCK
                    118: variable will be preserved in the environment for all users.
                    119: .Bd -literal -offset 4n
                    120: dn: cn=defaults,ou=SUDOers,dc=example,dc=com
                    121: objectClass: top
                    122: objectClass: sudoRole
                    123: cn: defaults
                    124: description: Default sudoOption's go here
                    125: sudoOption: env_keep+=SSH_AUTH_SOCK
                    126: .Ed
                    127: .Pp
                    128: The equivalent of a sudoer in LDAP is a
                    129: .Li sudoRole .
                    130: It consists of the following attributes:
                    131: .Bl -tag -width 4n
                    132: .It Sy sudoUser
                    133: A user name, user ID (prefixed with
                    134: .Ql # ) ,
                    135: Unix group (prefixed with
                    136: .Ql % ) ,
                    137: Unix group ID (prefixed with
                    138: .Ql %# ) ,
                    139: or user netgroup (prefixed with
                    140: .Ql + ) .
                    141: .It Sy sudoHost
                    142: A host name, IP address, IP network, or host netgroup (prefixed with a
                    143: .Ql + ) .
                    144: The special value
                    145: .Li ALL
                    146: will match any host.
                    147: .It Sy sudoCommand
                    148: A Unix command with optional command line arguments, potentially
                    149: including globbing characters (aka wild cards).
                    150: The special value
                    151: .Li ALL
                    152: will match any command.
                    153: If a command is prefixed with an exclamation point
                    154: .Ql \&! ,
                    155: the user will be prohibited from running that command.
                    156: .It Sy sudoOption
                    157: Identical in function to the global options described above, but
                    158: specific to the
                    159: .Li sudoRole
                    160: in which it resides.
                    161: .It Sy sudoRunAsUser
                    162: A user name or uid (prefixed with
                    163: .Ql # )
                    164: that commands may be run as or a Unix group (prefixed with a
                    165: .Ql % )
                    166: or user netgroup (prefixed with a
                    167: .Ql + )
                    168: that contains a list of users that commands may be run as.
                    169: The special value
                    170: .Li ALL
                    171: will match any user.
                    172: .Pp
                    173: The
                    174: .Li sudoRunAsUser
                    175: attribute is only available in
                    176: .Nm sudo
                    177: versions
                    178: 1.7.0 and higher.
                    179: Older versions of
                    180: .Nm sudo
                    181: use the
                    182: .Li sudoRunAs
                    183: attribute instead.
                    184: .It Sy sudoRunAsGroup
                    185: A Unix group or gid (prefixed with
                    186: .Ql # )
                    187: that commands may be run as.
                    188: The special value
                    189: .Li ALL
                    190: will match any group.
                    191: .Pp
                    192: The
                    193: .Li sudoRunAsGroup
                    194: attribute is only available in
                    195: .Nm sudo
                    196: versions
                    197: 1.7.0 and higher.
                    198: .It Sy sudoNotBefore
                    199: A timestamp in the form
                    200: .Li yyyymmddHHMMSSZ
                    201: that can be used to provide a start date/time for when the
                    202: .Li sudoRole
                    203: will be valid.
                    204: If multiple
                    205: .Li sudoNotBefore
                    206: entries are present, the earliest is used.
                    207: Note that timestamps must be in Coordinated Universal Time (UTC),
                    208: not the local timezone.
                    209: The minute and seconds portions are optional, but some LDAP servers
                    210: require that they be present (contrary to the RFC).
                    211: .Pp
                    212: The
                    213: .Li sudoNotBefore
                    214: attribute is only available in
                    215: .Nm sudo
                    216: versions 1.7.5 and higher and must be explicitly enabled via the
                    217: .Sy SUDOERS_TIMED
                    218: option in
                    219: .Pa @ldap_conf@ .
                    220: .It Sy sudoNotAfter
                    221: A timestamp in the form
                    222: .Li yyyymmddHHMMSSZ
                    223: that indicates an expiration date/time, after which the
                    224: .Li sudoRole
                    225: will no longer be valid.
                    226: If multiple
                    227: .Li sudoNotBefore
                    228: entries are present, the last one is used.
                    229: Note that timestamps must be in Coordinated Universal Time (UTC),
                    230: not the local timezone.
                    231: The minute and seconds portions are optional, but some LDAP servers
                    232: require that they be present (contrary to the RFC).
                    233: .Pp
                    234: The
                    235: .Li sudoNotAfter
                    236: attribute is only available in
                    237: .Nm sudo
                    238: versions
                    239: 1.7.5 and higher and must be explicitly enabled via the
                    240: .Sy SUDOERS_TIMED
                    241: option in
                    242: .Pa @ldap_conf@ .
                    243: .It Sy sudoOrder
                    244: The
                    245: .Li sudoRole
                    246: entries retrieved from the LDAP directory have no inherent order.
                    247: The
                    248: .Li sudoOrder
                    249: attribute is an integer (or floating point value for LDAP servers
                    250: that support it) that is used to sort the matching entries.
                    251: This allows LDAP-based sudoers entries to more closely mimic the behaviour
                    252: of the sudoers file, where the of the entries influences the result.
                    253: If multiple entries match, the entry with the highest
                    254: .Li sudoOrder
                    255: attribute is chosen.
                    256: This corresponds to the
                    257: .Dq last match
                    258: behavior of the sudoers file.
                    259: If the
                    260: .Li sudoOrder
                    261: attribute is not present, a value of 0 is assumed.
                    262: .Pp
                    263: The
                    264: .Li sudoOrder
                    265: attribute is only available in
                    266: .Nm sudo
                    267: versions 1.7.5 and higher.
                    268: .El
                    269: .Pp
                    270: Each attribute listed above should contain a single value, but there
                    271: may be multiple instances of each attribute type.
                    272: A
                    273: .Li sudoRole
                    274: must contain at least one
                    275: .Li sudoUser ,
                    276: .Li sudoHost
                    277: and
                    278: .Li sudoCommand .
                    279: .Pp
                    280: The following example allows users in group wheel to run any command
                    281: on any host via
                    282: .Nm sudo :
                    283: .Bd -literal -offset 4n
                    284: dn: cn=%wheel,ou=SUDOers,dc=example,dc=com
                    285: objectClass: top
                    286: objectClass: sudoRole
                    287: cn: %wheel
                    288: sudoUser: %wheel
                    289: sudoHost: ALL
                    290: sudoCommand: ALL
                    291: .Ed
                    292: .Ss Anatomy of LDAP sudoers lookup
                    293: When looking up a sudoer using LDAP there are only two or three
                    294: LDAP queries per invocation.
                    295: The first query is to parse the global options.
                    296: The second is to match against the user's name and the groups that
                    297: the user belongs to.
                    298: (The special
                    299: .Li ALL
                    300: tag is matched in this query too.)
                    301: If no match is returned for the user's name and groups, a third
                    302: query returns all entries containing user netgroups and checks
                    303: to see if the user belongs to any of them.
                    304: .Pp
                    305: If timed entries are enabled with the
                    306: .Sy SUDOERS_TIMED
                    307: configuration directive, the LDAP queries include a subfilter that
                    308: limits retrieval to entries that satisfy the time constraints, if any.
                    309: .Ss Differences between LDAP and non-LDAP sudoers
                    310: There are some subtle differences in the way sudoers is handled
                    311: once in LDAP.
                    312: Probably the biggest is that according to the RFC, LDAP ordering
                    313: is arbitrary and you cannot expect that Attributes and Entries are
                    314: returned in any specific order.
                    315: .Pp
                    316: The order in which different entries are applied can be controlled
                    317: using the
                    318: .Li sudoOrder
                    319: attribute, but there is no way to guarantee the order of attributes
                    320: within a specific entry.
                    321: If there are conflicting command rules in an entry, the negative
                    322: takes precedence.
                    323: This is called paranoid behavior (not necessarily the most specific
                    324: match).
                    325: .Pp
                    326: Here is an example:
                    327: .Bd -literal -offset 4n
                    328: # /etc/sudoers:
                    329: # Allow all commands except shell
                    330: johnny  ALL=(root) ALL,!/bin/sh
                    331: # Always allows all commands because ALL is matched last
                    332: puddles ALL=(root) !/bin/sh,ALL
                    333: 
                    334: # LDAP equivalent of johnny
                    335: # Allows all commands except shell
                    336: dn: cn=role1,ou=Sudoers,dc=my-domain,dc=com
                    337: objectClass: sudoRole
                    338: objectClass: top
                    339: cn: role1
                    340: sudoUser: johnny
                    341: sudoHost: ALL
                    342: sudoCommand: ALL
                    343: sudoCommand: !/bin/sh
                    344: 
                    345: # LDAP equivalent of puddles
                    346: # Notice that even though ALL comes last, it still behaves like
                    347: # role1 since the LDAP code assumes the more paranoid configuration
                    348: dn: cn=role2,ou=Sudoers,dc=my-domain,dc=com
                    349: objectClass: sudoRole
                    350: objectClass: top
                    351: cn: role2
                    352: sudoUser: puddles
                    353: sudoHost: ALL
                    354: sudoCommand: !/bin/sh
                    355: sudoCommand: ALL
                    356: .Ed
                    357: .Pp
                    358: Another difference is that negations on the Host, User or Runas are
                    359: currently ignored.
                    360: For example, the following attributes do not behave the way one might expect.
                    361: .Bd -literal -offset 4n
                    362: # does not match all but joe
                    363: # rather, does not match anyone
                    364: sudoUser: !joe
                    365: 
                    366: # does not match all but joe
                    367: # rather, matches everyone including Joe
                    368: sudoUser: ALL
                    369: sudoUser: !joe
                    370: 
                    371: # does not match all but web01
                    372: # rather, matches all hosts including web01
                    373: sudoHost: ALL
                    374: sudoHost: !web01
                    375: .Ed
                    376: .Ss Sudoers schema
                    377: In order to use
                    378: .Nm sudo Ns No 's
                    379: LDAP support, the
                    380: .Nm sudo
                    381: schema must be
                    382: installed on your LDAP server.
                    383: In addition, be sure to index the
                    384: .Li sudoUser
                    385: attribute.
                    386: .Pp
                    387: Three versions of the schema: one for OpenLDAP servers
                    388: .Pq Pa schema.OpenLDAP ,
                    389: one for Netscape-derived servers
                    390: .Pq Pa schema.iPlanet ,
                    391: and one for Microsoft Active Directory
                    392: .Pq Pa schema.ActiveDirectory
                    393: may be found in the
                    394: .Nm sudo
                    395: distribution.
                    396: .Pp
                    397: The schema for
                    398: .Nm sudo
                    399: in OpenLDAP form is also included in the
                    400: .Sx EXAMPLES
                    401: section.
                    402: .Ss Configuring ldap.conf
                    403: Sudo reads the
                    404: .Pa @ldap_conf@
                    405: file for LDAP-specific configuration.
                    406: Typically, this file is shared amongst different LDAP-aware clients.
                    407: As such, most of the settings are not
                    408: .Nm sudo Ns No -specific.
                    409: Note that
                    410: .Nm sudo
                    411: parses
                    412: .Pa @ldap_conf@
                    413: itself and may support options that differ from those described in the
                    414: system's
                    415: .Xr ldap.conf @mansectsu@
                    416: manual.
                    417: .Pp
                    418: Also note that on systems using the OpenLDAP libraries, default
                    419: values specified in
                    420: .Pa /etc/openldap/ldap.conf
                    421: or the user's
                    422: .Pa .ldaprc
                    423: files are not used.
                    424: .Pp
                    425: Only those options explicitly listed in
                    426: .Pa @ldap_conf@
                    427: as being supported by
                    428: .Nm sudo
                    429: are honored.
                    430: Configuration options are listed below in upper case but are parsed
                    431: in a case-independent manner.
                    432: .Bl -tag -width 4n
                    433: .It Sy URI Ar ldap[s]://[hostname[:port]] ...
                    434: Specifies a whitespace-delimited list of one or more URIs describing
                    435: the LDAP server(s) to connect to.
                    436: The
                    437: .Em protocol
                    438: may be either
                    439: .Em ldap
                    440: .Em ldaps ,
                    441: the latter being for servers that support TLS (SSL) encryption.
                    442: If no
                    443: .Em port
                    444: is specified, the default is port 389 for
                    445: .Li ldap://
                    446: or port 636 for
                    447: .Li ldaps:// .
                    448: If no
                    449: .Em hostname
                    450: is specified,
                    451: .Nm sudo
                    452: will connect to
                    453: .Em localhost .
                    454: Multiple
                    455: .Sy URI
                    456: lines are treated identically to a
                    457: .Sy URI
                    458: line containing multiple entries.
                    459: Only systems using the OpenSSL libraries support the mixing of
                    460: .Li ldap://
                    461: and
                    462: .Li ldaps://
                    463: URIs.
                    464: Both the Netscape-derived and Tivoli LDAP libraries used on most commercial
                    465: versions of Unix are only capable of supporting one or the other.
                    466: .It Sy HOST Ar name[:port] ...
                    467: If no
                    468: .Sy URI
                    469: is specified, the
                    470: .Sy HOST
                    471: parameter specifies a whitespace-delimited list of LDAP servers to connect to.
                    472: Each host may include an optional
                    473: .Em port
                    474: separated by a colon
                    475: .Pq Ql :\& .
                    476: The
                    477: .Sy HOST
                    478: parameter is deprecated in favor of the
                    479: .Sy URI
                    480: specification and is included for backwards compatibility.
                    481: .It Sy PORT Ar port_number
                    482: If no
                    483: .Sy URI
                    484: is specified, the
                    485: .Sy PORT
                    486: parameter specifies the default port to connect to on the LDAP server if a
                    487: .Sy HOST
                    488: parameter does not specify the port itself.
                    489: If no
                    490: .Sy PORT
                    491: parameter is used, the default is port 389 for LDAP and port 636 for LDAP
                    492: over TLS (SSL).
                    493: The
                    494: .Sy PORT
                    495: parameter is deprecated in favor of the
                    496: .Sy URI
                    497: specification and is included for backwards compatibility.
                    498: .It Sy BIND_TIMELIMIT Ar seconds
                    499: The
                    500: .Sy BIND_TIMELIMIT
                    501: parameter specifies the amount of time, in seconds, to wait while trying
                    502: to connect to an LDAP server.
                    503: If multiple
                    504: .Sy URI Ns No s
                    505: or
                    506: .Sy HOST Ns No s
                    507: are specified, this is the amount of time to wait before trying
                    508: the next one in the list.
                    509: .It Sy NETWORK_TIMEOUT Ar seconds
                    510: An alias for
                    511: .Sy BIND_TIMELIMIT
                    512: for OpenLDAP compatibility.
                    513: .It Sy TIMELIMIT Ar seconds
                    514: The
                    515: .Sy TIMELIMIT
                    516: parameter specifies the amount of time, in seconds, to wait for a
                    517: response to an LDAP query.
                    518: .It Sy TIMEOUT Ar seconds
                    519: The
                    520: .Sy TIMEOUT
                    521: parameter specifies the amount of time, in seconds, to wait for a
                    522: response from the various LDAP APIs.
                    523: .It Sy SUDOERS_BASE Ar base
                    524: The base DN to use when performing
                    525: .Nm sudo
                    526: LDAP queries.
                    527: Typically this is of the form
                    528: .Li ou=SUDOers,dc=example,dc=com
                    529: for the domain
                    530: .Li example.com .
                    531: Multiple
                    532: .Sy SUDOERS_BASE
                    533: lines may be specified, in which case they are queried in the order specified.
                    534: .It Sy SUDOERS_SEARCH_FILTER Ar ldap_filter
                    535: An LDAP filter which is used to restrict the set of records returned
                    536: when performing a
                    537: .Nm sudo
                    538: LDAP query.
                    539: Typically, this is of the
                    540: form
                    541: .Li attribute=value
                    542: or
                    543: .Li (&(attribute=value)(attribute2=value2)) .
                    544: .It Sy SUDOERS_TIMED Ar on/true/yes/off/false/no
                    545: Whether or not to evaluate the
                    546: .Li sudoNotBefore
                    547: and
                    548: .Li sudoNotAfter
                    549: attributes that implement time-dependent sudoers entries.
                    550: .It Sy SUDOERS_DEBUG Ar debug_level
                    551: This sets the debug level for
                    552: .Nm sudo
                    553: LDAP queries.
                    554: Debugging information is printed to the standard error.
                    555: A value of 1 results in a moderate amount of debugging information.
                    556: A value of 2 shows the results of the matches themselves.
                    557: This parameter should not be set in a production environment as the
                    558: extra information is likely to confuse users.
                    559: .It Sy BINDDN Ar DN
                    560: The
                    561: .Sy BINDDN
                    562: parameter specifies the identity, in the form of a Distinguished Name (DN),
                    563: to use when performing LDAP operations.
                    564: If not specified, LDAP operations are performed with an anonymous identity.
                    565: By default, most LDAP servers will allow anonymous access.
                    566: .It Sy BINDPW Ar secret
                    567: The
                    568: .Sy BINDPW
                    569: parameter specifies the password to use when performing LDAP operations.
                    570: This is typically used in conjunction with the
                    571: .Sy BINDDN
                    572: parameter.
                    573: .It Sy ROOTBINDDN Ar DN
                    574: The
                    575: .Sy ROOTBINDDN
                    576: parameter specifies the identity, in the form of a Distinguished Name (DN),
                    577: to use when performing privileged LDAP operations, such as
                    578: .Em sudoers
                    579: queries.
                    580: The password corresponding
                    581: to the identity should be stored in
                    582: .Pa @ldap_secret@ .
                    583: If not specified, the
                    584: .Sy BINDDN
                    585: identity is used (if any).
                    586: .It Sy LDAP_VERSION Ar number
                    587: The version of the LDAP protocol to use when connecting to the server.
                    588: The default value is protocol version 3.
                    589: .It Sy SSL Ar on/true/yes/off/false/no
                    590: If the
                    591: .Sy SSL
                    592: parameter is set to
                    593: .Li on ,
                    594: .Li true
                    595: .Li or
                    596: .Li yes ,
                    597: TLS (SSL) encryption is always used when communicating with the LDAP server.
                    598: Typically, this involves connecting to the server on port 636 (ldaps).
                    599: .It Sy SSL Ar start_tls
                    600: If the
                    601: .Sy SSL
                    602: parameter is set to
                    603: .Li start_tls ,
                    604: the LDAP server connection is initiated normally and TLS encryption is
                    605: begun before the bind credentials are sent.
                    606: This has the advantage of not requiring a dedicated port for encrypted
                    607: communications.
                    608: This parameter is only supported by LDAP servers that honor the
                    609: .Em start_tls
                    610: extension, such as the OpenLDAP and Tivoli Directory servers.
                    611: .It Sy TLS_CHECKPEER Ar on/true/yes/off/false/no
                    612: If enabled,
                    613: .Sy TLS_CHECKPEER
                    614: will cause the LDAP server's TLS certificated to be verified.
                    615: If the server's TLS certificate cannot be verified (usually because it
                    616: is signed by an unknown certificate authority),
                    617: .Nm sudo
                    618: will be unable to connect to it.
                    619: If
                    620: .Sy TLS_CHECKPEER
                    621: is disabled, no check is made.
                    622: Note that disabling the check creates an opportunity for man-in-the-middle
                    623: attacks since the server's identity will not be authenticated.
                    624: If possible, the CA's certificate should be installed locally so it can
                    625: be verified.
                    626: This option is not supported by the Tivoli Directory Server LDAP libraries.
                    627: .It Sy TLS_CACERT Ar file name
                    628: An alias for
                    629: .Sy TLS_CACERTFILE
                    630: for OpenLDAP compatibility.
                    631: .It Sy TLS_CACERTFILE Ar file name
                    632: The path to a certificate authority bundle which contains the certificates
                    633: for all the Certificate Authorities the client knows to be valid, e.g.\&
                    634: .Pa /etc/ssl/ca-bundle.pem .
                    635: This option is only supported by the OpenLDAP libraries.
                    636: Netscape-derived LDAP libraries use the same certificate
                    637: database for CA and client certificates (see
                    638: .Sy TLS_CERT ) .
                    639: .It Sy TLS_CACERTDIR Ar directory
                    640: Similar to
                    641: .Sy TLS_CACERTFILE
                    642: but instead of a file, it is a directory containing individual
                    643: Certificate Authority certificates, e.g.\&
                    644: .Pa /etc/ssl/certs .
                    645: The directory specified by
                    646: .Sy TLS_CACERTDIR
                    647: is checked after
                    648: .Sy TLS_CACERTFILE .
                    649: This option is only supported by the OpenLDAP libraries.
                    650: .It Sy TLS_CERT Ar file name
                    651: The path to a file containing the client certificate which can
                    652: be used to authenticate the client to the LDAP server.
                    653: The certificate type depends on the LDAP libraries used.
                    654: .Bl -tag -width 4n
                    655: .It OpenLDAP:
                    656: .Li tls_cert /etc/ssl/client_cert.pem
                    657: .It Netscape-derived:
                    658: .Li tls_cert /var/ldap/cert7.db
                    659: .It Tivoli Directory Server:
                    660: Unused, the key database specified by
                    661: .Sy TLS_KEY
                    662: contains both keys and certificates.
                    663: .Pp
                    664: When using Netscape-derived libraries, this file may also contain
                    665: Certificate Authority certificates.
                    666: .El
                    667: .It Sy TLS_KEY Ar file name
                    668: The path to a file containing the private key which matches the
                    669: certificate specified by
                    670: .Sy TLS_CERT .
                    671: The private key must not be password-protected.
                    672: The key type depends on the LDAP libraries used.
                    673: .Bl -tag -width 4n
                    674: .It OpenLDAP:
                    675: .Li tls_key /etc/ssl/client_key.pem
                    676: .It Netscape-derived:
                    677: .Li tls_key /var/ldap/key3.db
                    678: .It Tivoli Directory Server:
                    679: .Li tls_cert /usr/ldap/ldapkey.kdb
                    680: .El
                    681: When using Tivoli LDAP libraries, this file may also contain
                    682: Certificate Authority and client certificates and may be encrypted.
                    683: .It Sy TLS_KEYPW Ar secret
                    684: The
                    685: .Sy TLS_KEYPW
                    686: contains the password used to decrypt the key database on clients
                    687: using the Tivoli Directory Server LDAP library.
                    688: If no
                    689: .Sy TLS_KEYPW
                    690: is specified, a
                    691: .Em stash file
                    692: will be used if it exists.
                    693: The
                    694: .Em stash file
                    695: must have the same path as the file specified by
                    696: .Sy TLS_KEY ,
                    697: but use a
                    698: .Li .sth
                    699: file extension instead of
                    700: .Li .kdb ,
                    701: e.g.\&
                    702: .Li ldapkey.sth .
                    703: The default
                    704: .Li ldapkey.kdb
                    705: that ships with Tivoli Directory Server is encrypted with the password
                    706: .Li ssl_password .
                    707: This option is only supported by the Tivoli LDAP libraries.
                    708: .It Sy TLS_RANDFILE Ar file name
                    709: The
                    710: .Sy TLS_RANDFILE
                    711: parameter specifies the path to an entropy source for systems that lack
                    712: a random device.
                    713: It is generally used in conjunction with
                    714: .Em prngd
                    715: or
                    716: .Em egd .
                    717: This option is only supported by the OpenLDAP libraries.
                    718: .It Sy TLS_CIPHERS Ar cipher list
                    719: The
                    720: .Sy TLS_CIPHERS
                    721: parameter allows the administer to restrict which encryption algorithms
                    722: may be used for TLS (SSL) connections.
                    723: See the OpenLDAP or Tivoli Directory Server manual for a list of valid
                    724: ciphers.
                    725: This option is not supported by Netscape-derived libraries.
                    726: .It Sy USE_SASL Ar on/true/yes/off/false/no
                    727: Enable
                    728: .Sy USE_SASL
                    729: for LDAP servers that support SASL authentication.
                    730: .It Sy SASL_AUTH_ID Ar identity
                    731: The SASL user name to use when connecting to the LDAP server.
                    732: By default,
                    733: .Nm sudo
                    734: will use an anonymous connection.
                    735: .It Sy ROOTUSE_SASL Ar on/true/yes/off/false/no
                    736: Enable
                    737: .Sy ROOTUSE_SASL
                    738: to enable SASL authentication when connecting
                    739: to an LDAP server from a privileged process, such as
                    740: .Nm sudo .
                    741: .It Sy ROOTSASL_AUTH_ID Ar identity
                    742: The SASL user name to use when
                    743: .Sy ROOTUSE_SASL
                    744: is enabled.
                    745: .It Sy SASL_SECPROPS Ar none/properties
                    746: SASL security properties or
                    747: .Em none
                    748: for no properties.
                    749: See the SASL programmer's manual for details.
                    750: .It Sy KRB5_CCNAME Ar file name
                    751: The path to the Kerberos 5 credential cache to use when authenticating
                    752: with the remote server.
                    753: .It Sy DEREF Ar never/searching/finding/always
                    754: How alias dereferencing is to be performed when searching.
                    755: See the
                    756: .Xr ldap.conf @mansectsu@
                    757: manual for a full description of this option.
                    758: .El
                    759: .Pp
                    760: See the
                    761: .Pa ldap.conf
                    762: entry in the
                    763: .Sx EXAMPLES
                    764: section.
                    765: .Ss Configuring nsswitch.conf
                    766: Unless it is disabled at build time,
                    767: .Nm sudo
                    768: consults the Name Service Switch file,
                    769: .Pa @nsswitch_conf@ ,
                    770: to specify the
                    771: .Em sudoers
                    772: search order.
                    773: Sudo looks for a line beginning with
                    774: .Li sudoers :
                    775: and uses this to determine the search order.
                    776: Note that
                    777: .Nm sudo
                    778: does
                    779: not stop searching after the first match and later matches take
                    780: precedence over earlier ones.
                    781: The following sources are recognized:
                    782: .Pp
                    783: .Bl -tag -width 8n -offset 4n -compact
                    784: .It files
                    785: read sudoers from
                    786: .Pa @sysconfdir@/sudoers
                    787: .It ldap
                    788: read sudoers from LDAP
                    789: .El
                    790: .Pp
                    791: In addition, the entry
                    792: .Li [NOTFOUND=return]
                    793: will short-circuit the search if the user was not found in the
                    794: preceding source.
                    795: .Pp
                    796: To consult LDAP first followed by the local sudoers file (if it
                    797: exists), use:
                    798: .Bd -literal -offset 4n
                    799: sudoers: ldap files
                    800: .Ed
                    801: .Pp
                    802: The local
                    803: .Em sudoers
                    804: file can be ignored completely by using:
                    805: .Bd -literal -offset 4n
                    806: sudoers: ldap
                    807: .Ed
                    808: .Pp
                    809: If the
                    810: .Pa @nsswitch_conf@
                    811: file is not present or there is no sudoers line, the following
                    812: default is assumed:
                    813: .Bd -literal -offset 4n
                    814: sudoers: files
                    815: .Ed
                    816: .Pp
                    817: Note that
                    818: .Pa @nsswitch_conf@
                    819: is supported even when the underlying operating system does not use
                    820: an nsswitch.conf file, except on AIX (see below).
                    821: .Ss Configuring netsvc.conf
                    822: On AIX systems, the
                    823: .Pa @netsvc_conf@
                    824: file is consulted instead of
                    825: .Pa @nsswitch_conf@ .
                    826: .Nm sudo
                    827: simply treats
                    828: .Pa netsvc.conf
                    829: as a variant of
                    830: .Pa nsswitch.conf ;
                    831: information in the previous section unrelated to the file format
                    832: itself still applies.
                    833: .Pp
                    834: To consult LDAP first followed by the local sudoers file (if it
                    835: exists), use:
                    836: .Bd -literal -offset 4n
                    837: sudoers = ldap, files
                    838: .Ed
                    839: .Pp
                    840: The local
                    841: .Em sudoers
                    842: file can be ignored completely by using:
                    843: .Bd -literal -offset 4n
                    844: sudoers = ldap
                    845: .Ed
                    846: .Pp
                    847: To treat LDAP as authoratative and only use the local sudoers file
                    848: if the user is not present in LDAP, use:
                    849: .Bd -literal -offset 4n
                    850: sudoers = ldap = auth, files
                    851: .Ed
                    852: .Pp
                    853: Note that in the above example, the
                    854: .Li auth
                    855: qualfier only affects user lookups; both LDAP and
                    856: .Em sudoers
                    857: will be queried for
                    858: .Li Defaults
                    859: entries.
                    860: .Pp
                    861: If the
                    862: .Pa @netsvc_conf@
                    863: file is not present or there is no sudoers line, the following
                    864: default is assumed:
                    865: .Bd -literal -offset 4n
                    866: sudoers = files
                    867: .Ed
                    868: .Sh FILES
                    869: .Bl -tag -width 24n
                    870: .It Pa @ldap_conf@
                    871: LDAP configuration file
                    872: .It Pa @nsswitch_conf@
                    873: determines sudoers source order
                    874: .It Pa @netsvc_conf@
                    875: determines sudoers source order on AIX
                    876: .El
                    877: .Sh EXAMPLES
                    878: .Ss Example ldap.conf
                    879: .Bd -literal -offset 2n
                    880: # Either specify one or more URIs or one or more host:port pairs.
                    881: # If neither is specified sudo will default to localhost, port 389.
                    882: #
                    883: #host          ldapserver
                    884: #host          ldapserver1 ldapserver2:390
                    885: #
                    886: # Default port if host is specified without one, defaults to 389.
                    887: #port          389
                    888: #
                    889: # URI will override the host and port settings.
                    890: uri            ldap://ldapserver
                    891: #uri            ldaps://secureldapserver
                    892: #uri            ldaps://secureldapserver ldap://ldapserver
                    893: #
                    894: # The amount of time, in seconds, to wait while trying to connect to
                    895: # an LDAP server.
                    896: bind_timelimit 30
                    897: #
                    898: # The amount of time, in seconds, to wait while performing an LDAP query.
                    899: timelimit 30
                    900: #
                    901: # Must be set or sudo will ignore LDAP; may be specified multiple times.
                    902: sudoers_base   ou=SUDOers,dc=example,dc=com
                    903: #
                    904: # verbose sudoers matching from ldap
                    905: #sudoers_debug 2
                    906: #
                    907: # Enable support for time-based entries in sudoers.
                    908: #sudoers_timed yes
                    909: #
                    910: # optional proxy credentials
                    911: #binddn        <who to search as>
                    912: #bindpw        <password>
                    913: #rootbinddn    <who to search as, uses /etc/ldap.secret for bindpw>
                    914: #
                    915: # LDAP protocol version, defaults to 3
                    916: #ldap_version 3
                    917: #
                    918: # Define if you want to use an encrypted LDAP connection.
                    919: # Typically, you must also set the port to 636 (ldaps).
                    920: #ssl on
                    921: #
                    922: # Define if you want to use port 389 and switch to
                    923: # encryption before the bind credentials are sent.
                    924: # Only supported by LDAP servers that support the start_tls
                    925: # extension such as OpenLDAP.
                    926: #ssl start_tls
                    927: #
                    928: # Additional TLS options follow that allow tweaking of the
                    929: # SSL/TLS connection.
                    930: #
                    931: #tls_checkpeer yes # verify server SSL certificate
                    932: #tls_checkpeer no  # ignore server SSL certificate
                    933: #
                    934: # If you enable tls_checkpeer, specify either tls_cacertfile
                    935: # or tls_cacertdir.  Only supported when using OpenLDAP.
                    936: #
                    937: #tls_cacertfile /etc/certs/trusted_signers.pem
                    938: #tls_cacertdir  /etc/certs
                    939: #
                    940: # For systems that don't have /dev/random
                    941: # use this along with PRNGD or EGD.pl to seed the
                    942: # random number pool to generate cryptographic session keys.
                    943: # Only supported when using OpenLDAP.
                    944: #
                    945: #tls_randfile /etc/egd-pool
                    946: #
                    947: # You may restrict which ciphers are used.  Consult your SSL
                    948: # documentation for which options go here.
                    949: # Only supported when using OpenLDAP.
                    950: #
                    951: #tls_ciphers <cipher-list>
                    952: #
                    953: # Sudo can provide a client certificate when communicating to
                    954: # the LDAP server.
                    955: # Tips:
                    956: #   * Enable both lines at the same time.
                    957: #   * Do not password protect the key file.
                    958: #   * Ensure the keyfile is only readable by root.
                    959: #
                    960: # For OpenLDAP:
                    961: #tls_cert /etc/certs/client_cert.pem
                    962: #tls_key  /etc/certs/client_key.pem
                    963: #
                    964: # For SunONE or iPlanet LDAP, tls_cert and tls_key may specify either
                    965: # a directory, in which case the files in the directory must have the
                    966: # default names (e.g. cert8.db and key4.db), or the path to the cert
                    967: # and key files themselves.  However, a bug in version 5.0 of the LDAP
                    968: # SDK will prevent specific file names from working.  For this reason
                    969: # it is suggested that tls_cert and tls_key be set to a directory,
                    970: # not a file name.
                    971: #
                    972: # The certificate database specified by tls_cert may contain CA certs
                    973: # and/or the client's cert.  If the client's cert is included, tls_key
                    974: # should be specified as well.
                    975: # For backward compatibility, "sslpath" may be used in place of tls_cert.
                    976: #tls_cert /var/ldap
                    977: #tls_key /var/ldap
                    978: #
                    979: # If using SASL authentication for LDAP (OpenSSL)
                    980: # use_sasl yes
                    981: # sasl_auth_id <SASL user name>
                    982: # rootuse_sasl yes
                    983: # rootsasl_auth_id <SASL user name for root access>
                    984: # sasl_secprops none
                    985: # krb5_ccname /etc/.ldapcache
                    986: .Ed
                    987: .Ss Sudo schema for OpenLDAP
                    988: The following schema, in OpenLDAP format, is included with
                    989: .Nm sudo
                    990: source and binary distributions as
                    991: .Pa schema.OpenLDAP .
                    992: Simply copy
                    993: it to the schema directory (e.g.\&
                    994: .Pa /etc/openldap/schema ) ,
                    995: add the proper
                    996: .Li include
                    997: line in
                    998: .Pa slapd.conf
                    999: and restart
                   1000: .Nm slapd .
                   1001: .Bd -literal -offset 2n
                   1002: attributetype ( 1.3.6.1.4.1.15953.9.1.1
                   1003:    NAME 'sudoUser'
                   1004:    DESC 'User(s) who may  run sudo'
                   1005:    EQUALITY caseExactIA5Match
                   1006:    SUBSTR caseExactIA5SubstringsMatch
                   1007:    SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 )
                   1008: 
                   1009: attributetype ( 1.3.6.1.4.1.15953.9.1.2
                   1010:    NAME 'sudoHost'
                   1011:    DESC 'Host(s) who may run sudo'
                   1012:    EQUALITY caseExactIA5Match
                   1013:    SUBSTR caseExactIA5SubstringsMatch
                   1014:    SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 )
                   1015: 
                   1016: attributetype ( 1.3.6.1.4.1.15953.9.1.3
                   1017:    NAME 'sudoCommand'
                   1018:    DESC 'Command(s) to be executed by sudo'
                   1019:    EQUALITY caseExactIA5Match
                   1020:    SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 )
                   1021: 
                   1022: attributetype ( 1.3.6.1.4.1.15953.9.1.4
                   1023:    NAME 'sudoRunAs'
                   1024:    DESC 'User(s) impersonated by sudo'
                   1025:    EQUALITY caseExactIA5Match
                   1026:    SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 )
                   1027: 
                   1028: attributetype ( 1.3.6.1.4.1.15953.9.1.5
                   1029:    NAME 'sudoOption'
                   1030:    DESC 'Options(s) followed by sudo'
                   1031:    EQUALITY caseExactIA5Match
                   1032:    SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 )
                   1033: 
                   1034: attributetype ( 1.3.6.1.4.1.15953.9.1.6
                   1035:    NAME 'sudoRunAsUser'
                   1036:    DESC 'User(s) impersonated by sudo'
                   1037:    EQUALITY caseExactIA5Match
                   1038:    SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 )
                   1039: 
                   1040: attributetype ( 1.3.6.1.4.1.15953.9.1.7
                   1041:    NAME 'sudoRunAsGroup'
                   1042:    DESC 'Group(s) impersonated by sudo'
                   1043:    EQUALITY caseExactIA5Match
                   1044:    SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 )
                   1045: 
                   1046: attributetype ( 1.3.6.1.4.1.15953.9.1.8
                   1047:    NAME 'sudoNotBefore'
                   1048:    DESC 'Start of time interval for which the entry is valid'
                   1049:    EQUALITY generalizedTimeMatch
                   1050:    ORDERING generalizedTimeOrderingMatch
                   1051:    SYNTAX 1.3.6.1.4.1.1466.115.121.1.24 )
                   1052: 
                   1053: attributetype ( 1.3.6.1.4.1.15953.9.1.9
                   1054:    NAME 'sudoNotAfter'
                   1055:    DESC 'End of time interval for which the entry is valid'
                   1056:    EQUALITY generalizedTimeMatch
                   1057:    ORDERING generalizedTimeOrderingMatch
                   1058:    SYNTAX 1.3.6.1.4.1.1466.115.121.1.24 )
                   1059: 
                   1060: attributeTypes ( 1.3.6.1.4.1.15953.9.1.10
                   1061:     NAME 'sudoOrder'
                   1062:     DESC 'an integer to order the sudoRole entries'
                   1063:     EQUALITY integerMatch
                   1064:     ORDERING integerOrderingMatch
                   1065:     SYNTAX 1.3.6.1.4.1.1466.115.121.1.27 )
                   1066: 
                   1067: objectclass ( 1.3.6.1.4.1.15953.9.2.1 NAME 'sudoRole' SUP top STRUCTURAL
                   1068:    DESC 'Sudoer Entries'
                   1069:    MUST ( cn )
                   1070:    MAY ( sudoUser $ sudoHost $ sudoCommand $ sudoRunAs $ sudoRunAsUser $
                   1071:         sudoRunAsGroup $ sudoOption $ sudoNotBefore $ sudoNotAfter $
                   1072:         sudoOrder $ description )
                   1073:    )
                   1074: .Ed
                   1075: .Sh SEE ALSO
                   1076: .Xr ldap.conf @mansectsu@ ,
                   1077: .Xr sudoers @mansectsu@
                   1078: .Sh CAVEATS
                   1079: Note that there are differences in the way that LDAP-based
                   1080: .Em sudoers
                   1081: is parsed compared to file-based
                   1082: .Em sudoers .
                   1083: See the
                   1084: .Sx Differences between LDAP and non-LDAP sudoers
                   1085: section for more information.
                   1086: .Sh BUGS
                   1087: If you feel you have found a bug in
                   1088: .Nm sudo ,
                   1089: please submit a bug report at http://www.sudo.ws/sudo/bugs/
                   1090: .Sh SUPPORT
                   1091: Limited free support is available via the sudo-users mailing list,
                   1092: see http://www.sudo.ws/mailman/listinfo/sudo-users to subscribe or
                   1093: search the archives.
                   1094: .Sh DISCLAIMER
                   1095: .Nm sudo
                   1096: is provided
                   1097: .Dq AS IS
                   1098: and any express or implied warranties, including, but not limited
                   1099: to, the implied warranties of merchantability and fitness for a
                   1100: particular purpose are disclaimed.
                   1101: See the LICENSE file distributed with
                   1102: .Nm sudo
                   1103: or http://www.sudo.ws/sudo/license.html for complete details.

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>