1SUDOERS.LDAP(5)             BSD File Formats Manual            SUDOERS.LDAP(5)
2

NAME

4     sudoers.ldap — sudo LDAP configuration
5

DESCRIPTION

7     In addition to the standard sudoers file, sudo may be configured via
8     LDAP.  This can be especially useful for synchronizing sudoers in a
9     large, distributed environment.
10
11     Using LDAP for sudoers has several benefits:
12
13     •  sudo no longer needs to read sudoers in its entirety.  When LDAP is
14        used, there are only two or three LDAP queries per invocation.  This
15        makes it especially fast and particularly usable in LDAP environments.
16
17     It is possible to specify per-entry options that override the global
18        default options.  /etc/sudoers only supports default options and lim‐
19        ited options associated with user/host/commands/aliases.  The syntax
20        is complicated and can be difficult for users to understand.  Placing
21        the options directly in the entry is more natural.
22
23     The visudo program is no longer needed.  visudo provides locking and
24        syntax checking of the /etc/sudoers file.  Since LDAP updates are
25        atomic, locking is no longer necessary.  Because syntax is checked
26        when the data is inserted into LDAP, there is no need for a special‐
27        ized tool to check syntax.
28
29   SUDOers LDAP container
30     The sudoers configuration is contained in the ‘ou=SUDOers’ LDAP con‐
31     tainer.
32
33     Sudo first looks for the ‘cn=defaults’ entry in the SUDOers container.
34     If found, the multi-valued sudoOption attribute is parsed in the same
35     manner as a global Defaults line in /etc/sudoers.  In the following exam‐
36     ple, the SSH_AUTH_SOCK variable will be preserved in the environment for
37     all users.
38
39         dn: cn=defaults,ou=SUDOers,dc=my-domain,dc=com
40         objectClass: top
41         objectClass: sudoRole
42         cn: defaults
43         description: Default sudoOption's go here
44         sudoOption: env_keep+=SSH_AUTH_SOCK
45
46     The equivalent of a sudoer in LDAP is a sudoRole.  It consists of the
47     following attributes:
48
49     sudoUser
50           A user name, user-ID (prefixed with ‘#’), Unix group name or ID
51           (prefixed with ‘%’ or ‘%#’ respectively), user netgroup (prefixed
52           with ‘+’), or non-Unix group name or ID (prefixed with ‘%:’ or
53           ‘%:#’ respectively).  User netgroups are matched using the user and
54           domain members only; the host member is not used when matching.
55           Non-Unix group support is only available when an appropriate
56           group_plugin is defined in the global defaults sudoRole object.  If
57           a sudoUser entry is preceded by an exclamation point, ‘!’, and the
58           entry matches, the sudoRole in which it resides will be ignored.
59           Negated sudoUser entries are only supported by version 1.9.9 or
60           higher.
61
62     sudoHost
63           A host name, IP address, IP network, or host netgroup (prefixed
64           with a ‘+’).  The special value ALL will match any host.  Host net‐
65           groups are matched using the host (both qualified and unqualified)
66           and domain members only; the user member is not used when matching.
67           If a sudoHost entry is preceded by an exclamation point, ‘!’, and
68           the entry matches, the sudoRole in which it resides will be ig‐
69           nored.  Negated sudoHost entries are only supported by version
70           1.8.18 or higher.
71
72     sudoCommand
73           A fully-qualified Unix command name with optional command line ar‐
74           guments, potentially including globbing characters (aka wild
75           cards).  If a command name is preceded by an exclamation point,
76           ‘!’, the user will be prohibited from running that command.
77
78           The built-in command “sudoedit” is used to permit a user to run
79           sudo with the -e option (or as sudoedit).  It may take command line
80           arguments just as a normal command does.  Unlike other commands,
81           “sudoedit” is a built into sudo itself and must be specified in
82           without a leading path.
83
84           The special value ALL will match any command.
85
86           If a command name is prefixed with a SHA-2 digest, it will only be
87           allowed if the digest matches.  This may be useful in situations
88           where the user invoking sudo has write access to the command or its
89           parent directory.  The following digest formats are supported:
90           sha224, sha256, sha384, and sha512.  The digest name must be fol‐
91           lowed by a colon (‘:’) and then the actual digest, in either hex or
92           base64 format.  For example, given the following value for sudoCom‐
93           mand:
94
95               sha224:0GomF8mNN3wlDt1HD9XldjJ3SNgpFdbjO1+NsQ /bin/ls
96
97           The user may only run /bin/ls if its sha224 digest matches the
98           specified value.  Command digests are only supported by version
99           1.8.7 or higher.
100
101     sudoOption
102           Identical in function to the global options described above, but
103           specific to the sudoRole in which it resides.
104
105     sudoRunAsUser
106           A user name or user-ID (prefixed with ‘#’) that commands may be run
107           as or a Unix group (prefixed with a ‘%’) or user netgroup (prefixed
108           with a ‘+’) that contains a list of users that commands may be run
109           as.  The special value ALL will match any user.  If a sudoRunAsUser
110           entry is preceded by an exclamation point, ‘!’, and the entry
111           matches, the sudoRole in which it resides will be ignored.  If
112           sudoRunAsUser is specified but empty, it will match the invoking
113           user.  If neither sudoRunAsUser nor sudoRunAsGroup are present, the
114           value of the runas_default sudoOption is used (defaults to root).
115
116           The sudoRunAsUser attribute is only available in sudo versions
117           1.7.0 and higher.  Older versions of sudo use the sudoRunAs attri‐
118           bute instead.  Negated sudoRunAsUser entries are only supported by
119           version 1.8.26 or higher.
120
121     sudoRunAsGroup
122           A Unix group or group-ID (prefixed with ‘#’) that commands may be
123           run as.  The special value ALL will match any group.  If a
124           sudoRunAsGroup entry is preceded by an exclamation point, ‘!’, and
125           the entry matches, the sudoRole in which it resides will be ig‐
126           nored.
127
128           The sudoRunAsGroup attribute is only available in sudo versions
129           1.7.0 and higher.  Negated sudoRunAsGroup entries are only sup‐
130           ported by version 1.8.26 or higher.
131
132     sudoNotBefore
133           A timestamp in the form ‘yyyymmddHHMMSSZ’ that can be used to pro‐
134           vide a start date/time for when the sudoRole will be valid.  If
135           multiple sudoNotBefore entries are present, the earliest is used.
136           Timestamps must be in Coordinated Universal Time (UTC), not the lo‐
137           cal timezone.  The minute and seconds portions are optional, but
138           some LDAP servers require that they be present (contrary to the
139           RFC).
140
141           The sudoNotBefore attribute is only available in sudo versions
142           1.7.5 and higher and must be explicitly enabled via the
143           SUDOERS_TIMED option in /etc/ldap.conf.
144
145     sudoNotAfter
146           A timestamp in the form ‘yyyymmddHHMMSSZ’ that indicates an expira‐
147           tion date/time, after which the sudoRole will no longer be valid.
148           If multiple sudoNotAfter entries are present, the last one is used.
149           Timestamps must be in Coordinated Universal Time (UTC), not the lo‐
150           cal timezone.  The minute and seconds portions are optional, but
151           some LDAP servers require that they be present (contrary to the
152           RFC).
153
154           The sudoNotAfter attribute is only available in sudo versions 1.7.5
155           and higher and must be explicitly enabled via the SUDOERS_TIMED op‐
156           tion in /etc/ldap.conf.
157
158     sudoOrder
159           The sudoRole entries retrieved from the LDAP directory have no in‐
160           herent order.  The sudoOrder attribute is an integer (or floating
161           point value for LDAP servers that support it) that is used to sort
162           the matching entries.  This allows LDAP-based sudoers entries to
163           more closely mimic the behavior of the sudoers file, where the or‐
164           der of the entries influences the result.  If multiple entries
165           match, the entry with the highest sudoOrder attribute is chosen.
166           This corresponds to the “last match” behavior of the sudoers file.
167           If the sudoOrder attribute is not present, a value of 0 is assumed.
168
169           The sudoOrder attribute is only available in sudo versions 1.7.5
170           and higher.
171
172     Each attribute listed above should contain a single value, but there may
173     be multiple instances of each attribute type.  A sudoRole must contain at
174     least one sudoUser, sudoHost, and sudoCommand.
175
176     The following example allows users in group wheel to run any command on
177     any host via sudo:
178
179         dn: cn=%wheel,ou=SUDOers,dc=my-domain,dc=com
180         objectClass: top
181         objectClass: sudoRole
182         cn: %wheel
183         sudoUser: %wheel
184         sudoHost: ALL
185         sudoCommand: ALL
186
187   Anatomy of LDAP sudoers lookup
188     When looking up a sudoer using LDAP there are only two or three LDAP
189     queries per invocation.  The first query is to parse the global options.
190     The second is to match against the user's name and the groups that the
191     user belongs to.  (The special ALL tag is matched in this query too.)  If
192     no match is returned for the user's name and groups, a third query re‐
193     turns all entries containing user netgroups and other non-Unix groups and
194     checks to see if the user belongs to any of them.
195
196     If timed entries are enabled with the SUDOERS_TIMED configuration direc‐
197     tive, the LDAP queries include a sub-filter that limits retrieval to en‐
198     tries that satisfy the time constraints, if any.
199
200     If the NETGROUP_BASE configuration directive is present (see Configuring
201     ldap.conf below), queries are performed to determine the list of net‐
202     groups the user belongs to before the sudoers query.  This makes it pos‐
203     sible to include netgroups in the sudoers query string in the same manner
204     as Unix groups.  The third query mentioned above is not performed unless
205     a group provider plugin is also configured.  The actual LDAP queries per‐
206     formed by sudo are as follows:
207
208     1.   Match all nisNetgroup records with a nisNetgroupTriple containing
209          the user, host, and NIS domain.  The query will match
210          nisNetgroupTriple entries with either the short or long form of the
211          host name or no host name specified in the tuple.  If the NIS domain
212          is set, the query will match only match entries that include the do‐
213          main or for which there is no domain present.  If the NIS domain is
214          not set, a wildcard is used to match any domain name but be aware
215          that the NIS schema used by some LDAP servers may not support wild
216          cards for nisNetgroupTriple.
217
218     2.   Repeated queries are performed to find any nested nisNetgroup
219          records with a memberNisNetgroup entry that refers to an already-
220          matched record.
221
222     For sites with a large number of netgroups, using NETGROUP_BASE can sig‐
223     nificantly speed up sudo's execution time.
224
225   Differences between LDAP and non-LDAP sudoers
226     One of the major differences between LDAP and file-based sudoers is that
227     in LDAP, sudo-specific Aliases are not supported.
228
229     For the most part, there is little need for sudo-specific Aliases.  Unix
230     groups, non-Unix groups (via the group_plugin), or user netgroups can be
231     used in place of User_Aliases and Runas_Aliases.  Host netgroups can be
232     used in place of Host_Aliases.  Since groups and netgroups can also be
233     stored in LDAP there is no real need for sudo-specific aliases.
234
235     There are also some subtle differences in the way sudoers is handled once
236     in LDAP.  Probably the biggest is that according to the RFC, LDAP order‐
237     ing is arbitrary and you cannot expect that Attributes and Entries are
238     returned in any specific order.
239
240     The order in which different entries are applied can be controlled using
241     the sudoOrder attribute, but there is no way to guarantee the order of
242     attributes within a specific entry.  If there are conflicting command
243     rules in an entry, the negative takes precedence.  This is called para‐
244     noid behavior (not necessarily the most specific match).
245
246     Here is an example:
247
248         # /etc/sudoers:
249         # Allow all commands except shell
250         johnny  ALL=(root) ALL,!/bin/sh
251         # Always allows all commands because ALL is matched last
252         puddles ALL=(root) !/bin/sh,ALL
253
254         # LDAP equivalent of johnny
255         # Allows all commands except shell
256         dn: cn=role1,ou=Sudoers,dc=my-domain,dc=com
257         objectClass: sudoRole
258         objectClass: top
259         cn: role1
260         sudoUser: johnny
261         sudoHost: ALL
262         sudoCommand: ALL
263         sudoCommand: !/bin/sh
264
265         # LDAP equivalent of puddles
266         # Notice that even though ALL comes last, it still behaves like
267         # role1 since the LDAP code assumes the more paranoid configuration
268         dn: cn=role2,ou=Sudoers,dc=my-domain,dc=com
269         objectClass: sudoRole
270         objectClass: top
271         cn: role2
272         sudoUser: puddles
273         sudoHost: ALL
274         sudoCommand: !/bin/sh
275         sudoCommand: ALL
276
277   Converting between file-based and LDAP sudoers
278     The cvtsudoers(1) utility can be used to convert between file-based and
279     LDAP sudoers.  However, there are features in the file-based sudoers that
280     have no equivalent in LDAP-based sudoers (and vice versa).  These cannot
281     be converted automatically.
282
283     For example, a Cmnd_Alias in a sudoers file may be converted to a
284     sudoRole that contains multiple commands.  Multiple users and/or groups
285     may be assigned to the sudoRole.
286
287     Also, host, user, runas, and command-based Defaults entries are not sup‐
288     ported.  However, a sudoRole may contain one or more sudoOption at‐
289     tributes which can often serve the same purpose.
290
291     Consider the following sudoers lines:
292
293         Cmnd_Alias PAGERS = /usr/bin/more, /usr/bin/pg, /usr/bin/less
294         Defaults!PAGERS noexec
295         alice, bob ALL = ALL
296
297     In this example, alice and bob are allowed to run all commands, but the
298     commands listed in PAGERS will have the noexec flag set, preventing shell
299     escapes.
300
301     When converting this to LDAP, two sudoRole objects can be used:
302
303         dn: cn=PAGERS,ou=SUDOers,dc=my-domain,dc=com
304         objectClass: top
305         objectClass: sudoRole
306         cn: PAGERS
307         sudoUser: alice
308         sudoUser: bob
309         sudoHost: ALL
310         sudoCommand: /usr/bin/more
311         sudoCommand: /usr/bin/pg
312         sudoCommand: /usr/bin/less
313         sudoOption: noexec
314         sudoOrder: 900
315
316         dn: cn=ADMINS,ou=SUDOers,dc=my-domain,dc=com
317         objectClass: top
318         objectClass: sudoRole
319         cn: ADMINS
320         sudoUser: alice
321         sudoUser: bob
322         sudoHost: ALL
323         sudoCommand: ALL
324         sudoOrder: 100
325
326     In the LDAP version, the sudoOrder attribute is used to guarantee that
327     the PAGERS sudoRole with noexec has precedence.  Unlike the sudoers ver‐
328     sion, the LDAP version requires that all users for whom the restriction
329     should apply be assigned to the PAGERS sudoRole.  Using a Unix group or
330     netgroup in PAGERS rather than listing each user would make this easier
331     to maintain.
332
333     Per-user Defaults entries can be emulated by using one or more sudoOption
334     attributes in a sudoRole.  Consider the following sudoers lines:
335
336         User_Alias ADMINS = john, sally
337         Defaults:ADMINS !authenticate
338         ADMINS ALL = (ALL:ALL) ALL
339
340     In this example, john and sally are allowed to run any command as any
341     user or group.
342
343     When converting this to LDAP, we can use a Unix group instead of the
344     User_Alias.
345
346         dn: cn=admins,ou=SUDOers,dc=my-domain,dc=com
347         objectClass: top
348         objectClass: sudoRole
349         cn: admins
350         sudoUser: %admin
351         sudoHost: ALL
352         sudoRunAsUser: ALL
353         sudoRunAsGroup: ALL
354         sudoCommand: ALL
355         sudoOption: !authenticate
356
357     This assumes that users john and sally are members of the “admins” Unix
358     group.
359
360   Sudoers schema
361     In order to use sudo's LDAP support, the sudo schema must be installed on
362     your LDAP server.  In addition, be sure to index the sudoUser attribute.
363
364     The sudo distribution includes versions of the sudoers schema for multi‐
365     ple LDAP servers:
366
367     schema.OpenLDAP
368           OpenLDAP slapd and OpenBSD ldapd
369
370     schema.olcSudo
371           OpenLDAP slapd 2.3 and higher when on-line configuration is enabled
372
373     schema.iPlanet
374           Netscape-derived servers such as the iPlanet, Oracle, and 389 Di‐
375           rectory Servers
376
377     schema.ActiveDirectory
378           Microsoft Active Directory
379
380     The schema in OpenLDAP format is also included in the EXAMPLES section.
381
382   Configuring ldap.conf
383     Sudo reads the /etc/ldap.conf file for LDAP-specific configuration.  Typ‐
384     ically, this file is shared between different LDAP-aware clients.  As
385     such, most of the settings are not sudo-specific. The /etc/ldap.conf file
386     is parsed by sudo itself and may support options that differ from those
387     described in the system's ldap.conf(5) manual.  The path to ldap.conf may
388     be overridden via the ldap_conf plugin argument in sudo.conf(5).
389
390     On systems using the OpenLDAP libraries, default values specified in
391     /etc/openldap/ldap.conf or the user's .ldaprc files are not used.
392
393     sudo supports a variety of LDAP library implementations, including OpenL‐
394     DAP, Netscape-derived (also used by Solaris and HP-UX), and IBM LDAP (aka
395     Tivoli).  Some options are specific to certain LDAP implementations or
396     have implementation-specific behavior.  These differences are noted below
397     where applicable.
398
399     Only those options explicitly listed in /etc/ldap.conf as being supported
400     by sudo are honored.  Configuration options are listed below in upper
401     case but are parsed in a case-independent manner.
402
403     Lines beginning with a pound sign (‘#’) are ignored.  Leading white space
404     is removed from the beginning of lines.
405
406     BIND_TIMELIMIT seconds
407           The BIND_TIMELIMIT parameter specifies the amount of time, in sec‐
408           onds, to wait while trying to connect to an LDAP server.  If multi‐
409           ple URIs or HOSTs are specified, this is the amount of time to wait
410           before trying the next one in the list.
411
412     BINDDN DN
413           The BINDDN parameter specifies the identity, in the form of a Dis‐
414           tinguished Name (DN), to use when performing LDAP operations.  If
415           not specified, LDAP operations are performed with an anonymous
416           identity.  By default, most LDAP servers will allow anonymous ac‐
417           cess.
418
419     BINDPW secret
420           The BINDPW parameter specifies the password to use when performing
421           LDAP operations.  This is typically used in conjunction with the
422           BINDDN parameter.  The secret may be a plaintext password or a
423           base64-encoded string with a “base64:” prefix.  For example:
424
425               BINDPW base64:dGVzdA==
426
427           If a plaintext password is used, it should be a simple string with‐
428           out quotes.  Plain text passwords may not include the comment char‐
429           acter (‘#’) and the escaping of special characters with a backslash
430           (‘\’) is not supported.
431
432     DEREF never/searching/finding/always
433           How alias dereferencing is to be performed when searching.  See the
434           ldap.conf(5) manual for a full description of this option.
435
436     HOST name[:port] ...
437           If no URI is specified (see below), the HOST parameter specifies a
438           white space-delimited list of LDAP servers to connect to.  Each
439           host may include an optional port separated by a colon (‘:’).  The
440           HOST parameter is deprecated in favor of the URI specification and
441           is included for backward compatibility only.
442
443     KRB5_CCNAME file name
444           The path to the Kerberos 5 credential cache to use when authenti‐
445           cating with the remote server.
446
447           This option is only relevant when using SASL authentication (see
448           below).
449
450     LDAP_VERSION number
451           The version of the LDAP protocol to use when connecting to the
452           server.  The default value is protocol version 3.
453
454     NETGROUP_BASE base
455           The base DN to use when performing LDAP netgroup queries.  Typi‐
456           cally this is of the form ‘ou=netgroup,dc=my-domain,dc=com’ for the
457           domain my-domain.com.  Multiple NETGROUP_BASE lines may be speci‐
458           fied, in which case they are queried in the order specified.
459
460           This option can be used to query a user's netgroups directly via
461           LDAP which is usually faster than fetching every sudoRole object
462           containing a sudoUser that begins with a ‘+’ prefix.  The NIS
463           schema used by some LDAP servers need a modification to support
464           querying the nisNetgroup object by its nisNetgroupTriple member.
465           OpenLDAP's slapd requires the following change to the
466           nisNetgroupTriple attribute:
467
468               attributetype ( 1.3.6.1.1.1.1.14 NAME 'nisNetgroupTriple'
469                  DESC 'Netgroup triple'
470                  EQUALITY caseIgnoreIA5Match
471                  SUBSTR caseIgnoreIA5SubstringsMatch
472                  SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 )
473
474     NETGROUP_SEARCH_FILTER ldap_filter
475           An LDAP filter which is used to restrict the set of records re‐
476           turned when performing an LDAP netgroup query.  Typically, this is
477           of the form ‘attribute=value’ or
478           ‘(&(attribute=value)(attribute2=value2))’.  The default search fil‐
479           ter is: ‘objectClass=nisNetgroup’.  If ldap_filter is omitted, no
480           search filter will be used.
481
482           This option is only used when querying netgroups directly via LDAP.
483
484     NETWORK_TIMEOUT seconds
485           An alias for BIND_TIMELIMIT provided for OpenLDAP compatibility.
486
487     PORT port_number
488           If no URI is specified, the PORT parameter specifies the default
489           port to connect to on the LDAP server if a HOST parameter does not
490           specify the port itself.  If no PORT parameter is used, the default
491           is port 389 for LDAP and port 636 for LDAP over TLS (SSL).  The
492           PORT parameter is deprecated in favor of the URI specification and
493           is included for backward compatibility only.
494
495     ROOTBINDDN DN
496           The ROOTBINDDN parameter specifies the identity, in the form of a
497           Distinguished Name (DN), to use when performing privileged LDAP op‐
498           erations, such as sudoers queries.  The password corresponding to
499           the identity should be stored in the or the path specified by the
500           ldap_secret plugin argument in sudo.conf(5), which defaults to
501           /etc/ldap.secret.  If no ROOTBINDDN is specified, the BINDDN iden‐
502           tity is used (if any).
503
504     ROOTUSE_SASL on/true/yes/off/false/no
505           Enable ROOTUSE_SASL to enable SASL authentication when connecting
506           to an LDAP server from a privileged process, such as sudo.
507
508     SASL_AUTH_ID identity
509           The SASL user name to use when connecting to the LDAP server.  By
510           default, sudo will use an anonymous connection.
511
512           This option is only relevant when using SASL authentication.
513
514     SASL_MECH mechanisms
515           A white space-delimited list of SASL authentication mechanisms to
516           use.  By default, sudo will use GSSAPI authentication.
517
518     SASL_SECPROPS none/properties
519           SASL security properties or none for no properties.  See the SASL
520           programmer's manual for details.
521
522           This option is only relevant when using SASL authentication.
523
524     SSL on/true/yes/off/false/no
525           If the SSL parameter is set to on, true, or yes TLS (SSL) encryp‐
526           tion is always used when communicating with the LDAP server.  Typi‐
527           cally, this involves connecting to the server on port 636 (ldaps).
528
529     SSL start_tls
530           If the SSL parameter is set to start_tls, the LDAP server connec‐
531           tion is initiated normally and TLS encryption is begun before the
532           bind credentials are sent.  This has the advantage of not requiring
533           a dedicated port for encrypted communications.  This parameter is
534           only supported by LDAP servers that honor the start_tls extension,
535           such as the OpenLDAP and IBM Tivoli Directory servers.
536
537     SUDOERS_BASE base
538           The base DN to use when performing sudo LDAP queries.  Typically
539           this is of the form ‘ou=SUDOers,dc=my-domain,dc=com’ for the domain
540           my-domain.com.  Multiple SUDOERS_BASE lines may be specified, in
541           which case they are queried in the order specified.
542
543     SUDOERS_DEBUG debug_level
544           This sets the debug level for sudo LDAP queries.  Debugging infor‐
545           mation is printed to the standard error.  A value of 1 results in a
546           moderate amount of debugging information.  A value of 2 shows the
547           results of the matches themselves.  This parameter should not be
548           set in a production environment as the extra information is likely
549           to confuse users.
550
551           The SUDOERS_DEBUG parameter is deprecated and will be removed in a
552           future release.  The same information is now logged via the sudo
553           debugging framework using the “ldap” subsystem at priorities diag
554           and info for debug_level values 1 and 2 respectively.  See the
555           sudo.conf(5) manual for details on how to configure sudo debugging.
556
557     SUDOERS_SEARCH_FILTER ldap_filter
558           An LDAP filter which is used to restrict the set of records re‐
559           turned when performing a sudo LDAP query.  Typically, this is of
560           the form ‘attribute=value’ or
561           ‘(&(attribute=value)(attribute2=value2))’.  The default search fil‐
562           ter is: ‘objectClass=sudoRole’.  If ldap_filter is omitted, no
563           search filter will be used.
564
565     SUDOERS_TIMED on/true/yes/off/false/no
566           Whether or not to evaluate the sudoNotBefore and sudoNotAfter at‐
567           tributes that implement time-dependent sudoers entries.
568
569     TIMELIMIT seconds
570           The TIMELIMIT parameter specifies the amount of time, in seconds,
571           to wait for a response to an LDAP query.
572
573     TIMEOUT seconds
574           The TIMEOUT parameter specifies the amount of time, in seconds, to
575           wait for a response from the various LDAP APIs.
576
577     TLS_CACERT file name
578           An alias for TLS_CACERTFILE for OpenLDAP compatibility.
579
580     TLS_CACERTFILE file name
581           The path to a certificate authority bundle which contains the cer‐
582           tificates for all the Certificate Authorities the client knows to
583           be valid, e.g., /etc/ssl/ca-bundle.pem.
584
585           This option is only supported by the OpenLDAP libraries.  Netscape-
586           derived LDAP libraries use the same certificate database for CA and
587           client certificates (see TLS_CERT).
588
589     TLS_CACERTDIR directory
590           Similar to TLS_CACERTFILE but instead of a file, it is a directory
591           containing individual Certificate Authority certificates, e.g.,
592           /etc/ssl/certs.  The directory specified by TLS_CACERTDIR is
593           checked after TLS_CACERTFILE.
594
595           This option is only supported by the OpenLDAP libraries.
596
597     TLS_CERT file name
598           The path to a file containing the client certificate which can be
599           used to authenticate the client to the LDAP server.  The certifi‐
600           cate type depends on the LDAP libraries used.
601
602           OpenLDAP:
603                 ‘tls_cert /etc/ssl/client_cert.pem’
604
605           Netscape-derived:
606                 ‘tls_cert /var/ldap/cert7.db’
607
608           IBM LDAP:
609                 Unused, the key database specified by TLS_KEY contains both
610                 keys and certificates.
611
612           When using Netscape-derived libraries, this file may also contain
613           Certificate Authority certificates.
614
615     TLS_CHECKPEER on/true/yes/off/false/no
616           If enabled, TLS_CHECKPEER will cause the LDAP server's TLS certifi‐
617           cated to be verified.  If the server's TLS certificate cannot be
618           verified (usually because it is signed by an unknown certificate
619           authority), sudo will be unable to connect to it.  If TLS_CHECKPEER
620           is disabled, no check is made.  Disabling this check creates an op‐
621           portunity for man-in-the-middle attacks since the server's identity
622           will not be authenticated.  If possible, the CA's certificate
623           should be installed locally so it can be verified.
624
625           This option is not supported by the IBM LDAP libraries.
626
627     TLS_KEY file name
628           The path to a file containing the private key which matches the
629           certificate specified by TLS_CERT.  The private key must not be
630           password-protected.  The key type depends on the LDAP libraries
631           used.
632
633           OpenLDAP:
634                 ‘tls_key /etc/ssl/client_key.pem’
635
636           Netscape-derived:
637                 ‘tls_key /var/ldap/key3.db’
638
639           IBM LDAP:
640                 ‘tls_key /usr/ldap/ldapkey.kdb’
641
642           When using IBM LDAP libraries, this file may also contain Certifi‐
643           cate Authority and client certificates and may be encrypted.
644
645     TLS_CIPHERS cipher list
646           The TLS_CIPHERS parameter allows the administer to restrict which
647           encryption algorithms may be used for TLS (SSL) connections.  See
648           the OpenLDAP or IBM Tivoli Directory Server manual for a list of
649           valid ciphers.
650
651           This option is not supported by Netscape-derived libraries.
652
653     TLS_KEYPW secret
654           The TLS_KEYPW contains the password used to decrypt the key data‐
655           base on clients using the IBM LDAP library.  The secret may be a
656           plaintext password or a base64-encoded string with a “base64:” pre‐
657           fix.  For example:
658
659               TLS_KEYPW base64:dGVzdA==
660
661           If a plaintext password is used, it should be a simple string with‐
662           out quotes.  Plain text passwords may not include the comment char‐
663           acter (‘#’) and the escaping of special characters with a backslash
664           (‘\’) is not supported.  If this option is used, /etc/ldap.conf
665           must not be world-readable to avoid exposing the password.  Alter‐
666           nately, a stash file can be used to store the password in encrypted
667           form (see below).
668
669           If no TLS_KEYPW is specified, a stash file will be used if it ex‐
670           ists.  The stash file must have the same path as the file specified
671           by TLS_KEY, but use a ‘.sth’ file extension instead of ‘.kdb’, for
672           example ‘ldapkey.sth’.  The default ‘ldapkey.kdb’ that ships with
673           the IBM Tivoli Directory Server is encrypted with the password
674           ‘ssl_password’.  The gsk8capicmd utility can be used to manage the
675           key database and create a stash file.
676
677           This option is only supported by the IBM LDAP libraries.
678
679     TLS_REQCERT level
680           The TLS_REQCERT parameter controls how the LDAP server's TLS cer‐
681           tificated will be verified (if at all).  If the server's TLS cer‐
682           tificate cannot be verified (usually because it is signed by an un‐
683           known certificate authority), sudo will be unable to connect to it.
684           The following level values are supported:
685
686               never     The server certificate will not be requested or
687                         checked.
688
689               allow     The server certificate will be requested.  A missing
690                         or invalid certificate is ignored and not considered
691                         an error.
692
693               try       The server certificate will be requested.  A missing
694                         certificate is ignored but an invalid certificate
695                         will result in a connection error.
696
697               demand | hard
698                         The server certificate will be requested.  A missing
699                         or invalid certificate will result in a connection
700                         error.  This is the default behavior.
701
702           This option is only supported by the OpenLDAP libraries.  Other
703           LDAP libraries only support the TLS_CHECKPEER parameter.
704
705     TLS_RANDFILE file name
706           The TLS_RANDFILE parameter specifies the path to an entropy source
707           for systems that lack a random device.  It is generally used in
708           conjunction with prngd or egd.
709
710           This option is only supported by the OpenLDAP libraries.
711
712     URI ldap[s]://[hostname[:port]] ...
713           Specifies a white space-delimited list of one or more URIs describ‐
714           ing the LDAP server(s) to connect to.  The protocol may be either
715           ldap ldaps, the latter being for servers that support TLS (SSL) en‐
716           cryption.  If no port is specified, the default is port 389 for
717           ‘ldap://’ or port 636 for ‘ldaps://’.  If no hostname is specified,
718           sudo will connect to localhost.  Multiple URI lines are treated
719           identically to a URI line containing multiple entries.  Only sys‐
720           tems using the OpenSSL libraries support the mixing of ‘ldap://’
721           and ‘ldaps://’ URIs.  Both the Netscape-derived and IBM LDAP li‐
722           braries used on most commercial versions of Unix are only capable
723           of supporting one or the other.
724
725     USE_SASL on/true/yes/off/false/no
726           Enable USE_SASL for LDAP servers that support SASL authentication.
727
728     ROOTSASL_AUTH_ID identity
729           The SASL user name to use when ROOTUSE_SASL is enabled.
730
731     See the ldap.conf entry in the EXAMPLES section.
732
733   Configuring nsswitch.conf
734     Unless it is disabled at build time, sudo consults the Name Service
735     Switch file, /etc/nsswitch.conf, to specify the sudoers search order.
736     Sudo looks for a line beginning with sudoers: and uses this to determine
737     the search order.  By default, sudo does not stop searching after the
738     first match and later matches take precedence over earlier ones (unless
739     ‘[SUCCESS=return]’ is used, see below).  The following sources are recog‐
740     nized:
741
742         files     read sudoers from /etc/sudoers
743         ldap      read sudoers from LDAP
744
745     In addition, a subset of nsswitch.conf-style action statements is sup‐
746     ported, specifically ‘[SUCCESS=return]’ and ‘[NOTFOUND=return]’.  These
747     will unconditionally terminate the search if the user was either found
748     ‘[SUCCESS=return]’ or not found ‘[NOTFOUND=return]’ in the immediately
749     preceding source.  Other action statements tokens are not supported, nor
750     is test negation with ‘!’.
751
752     To consult LDAP first followed by the local sudoers file (if it exists),
753     use:
754
755         sudoers: ldap files
756
757     To consult LDAP only when no match is found in the local sudoers file (if
758     it exists), use:
759
760         sudoers: files [SUCCESS=return] ldap
761
762     The local sudoers file can be ignored completely by using:
763
764         sudoers: ldap
765
766     If the /etc/nsswitch.conf file is not present or there is no sudoers
767     line, the following default is assumed:
768
769         sudoers: files
770
771     The /etc/nsswitch.conf file is supported even when the underlying operat‐
772     ing system does not support it, except on AIX (see below).
773
774   Configuring netsvc.conf
775     On AIX systems, the /etc/netsvc.conf file is consulted instead of
776     /etc/nsswitch.conf.  sudo simply treats netsvc.conf as a variant of
777     nsswitch.conf; information in the previous section unrelated to the file
778     format itself still applies.
779
780     To consult LDAP first followed by the local sudoers file (if it exists),
781     use:
782
783         sudoers = ldap, files
784
785     The local sudoers file can be ignored completely by using:
786
787         sudoers = ldap
788
789     To treat LDAP as authoritative and only use the local sudoers file if the
790     user is not present in LDAP, use:
791
792         sudoers = ldap = auth, files
793
794     In the above example, the auth qualifier only affects user lookups; both
795     LDAP and sudoers will be queried for Defaults entries.
796
797     If the /etc/netsvc.conf file is not present or there is no sudoers line,
798     the following default is assumed:
799
800         sudoers = files
801
802   Integration with sssd
803     On systems with the System Security Services Daemon (SSSD) and where sudo
804     has been built with SSSD support, it is possible to use SSSD to cache
805     LDAP sudoers rules.  To use SSSD as the sudoers source, you should use
806     sss instead of ldap for the sudoers entry in /etc/nsswitch.conf.  The
807     /etc/ldap.conf file is not used by the SSSD sudo back end.  See
808     sssd-sudo(5) for more information on configuring sudo to work with SSSD.
809

FILES

811     /etc/ldap.conf            LDAP configuration file
812
813     /etc/nsswitch.conf        determines sudoers source order
814
815     /etc/netsvc.conf          determines sudoers source order on AIX
816

EXAMPLES

818   Example ldap.conf
819       # Either specify one or more URIs or one or more host:port pairs.
820       # If neither is specified sudo will default to localhost, port 389.
821       #
822       #host          ldapserver
823       #host          ldapserver1 ldapserver2:390
824       #
825       # Default port if host is specified without one, defaults to 389.
826       #port          389
827       #
828       # URI will override the host and port settings.
829       uri            ldap://ldapserver
830       #uri            ldaps://secureldapserver
831       #uri            ldaps://secureldapserver ldap://ldapserver
832       #
833       # The amount of time, in seconds, to wait while trying to connect to
834       # an LDAP server.
835       bind_timelimit 30
836       #
837       # The amount of time, in seconds, to wait while performing an LDAP query.
838       timelimit 30
839       #
840       # Must be set or sudo will ignore LDAP; may be specified multiple times.
841       sudoers_base   ou=SUDOers,dc=my-domain,dc=com
842       #
843       # verbose sudoers matching from ldap
844       #sudoers_debug 2
845       #
846       # Enable support for time-based entries in sudoers.
847       #sudoers_timed yes
848       #
849       # optional proxy credentials
850       #binddn        <who to search as>
851       #bindpw        <password>
852       #rootbinddn    <who to search as, uses /etc/ldap.secret for bindpw>
853       #
854       # LDAP protocol version, defaults to 3
855       #ldap_version 3
856       #
857       # Define if you want to use an encrypted LDAP connection.
858       # Typically, you must also set the port to 636 (ldaps).
859       #ssl on
860       #
861       # Define if you want to use port 389 and switch to
862       # encryption before the bind credentials are sent.
863       # Only supported by LDAP servers that support the start_tls
864       # extension such as OpenLDAP.
865       #ssl start_tls
866       #
867       # Additional TLS options follow that allow tweaking of the
868       # SSL/TLS connection.
869       #
870       #tls_checkpeer yes # verify server SSL certificate
871       #tls_checkpeer no  # ignore server SSL certificate
872       #
873       # If you enable tls_checkpeer, specify either tls_cacertfile
874       # or tls_cacertdir.  Only supported when using OpenLDAP.
875       #
876       #tls_cacertfile /etc/certs/trusted_signers.pem
877       #tls_cacertdir  /etc/certs
878       #
879       # For systems that don't have /dev/random
880       # use this along with PRNGD or EGD.pl to seed the
881       # random number pool to generate cryptographic session keys.
882       # Only supported when using OpenLDAP.
883       #
884       #tls_randfile /etc/egd-pool
885       #
886       # You may restrict which ciphers are used.  Consult your SSL
887       # documentation for which options go here.
888       # Only supported when using OpenLDAP.
889       #
890       #tls_ciphers <cipher-list>
891       #
892       # Sudo can provide a client certificate when communicating to
893       # the LDAP server.
894       # Tips:
895       #   * Enable both lines at the same time.
896       #   * Do not password protect the key file.
897       #   * Ensure the keyfile is only readable by root.
898       #
899       # For OpenLDAP:
900       #tls_cert /etc/certs/client_cert.pem
901       #tls_key  /etc/certs/client_key.pem
902       #
903       # For Netscape-derived LDAP, tls_cert and tls_key may specify either
904       # a directory, in which case the files in the directory must have the
905       # default names (e.g., cert8.db and key4.db), or the path to the cert
906       # and key files themselves.  However, a bug in version 5.0 of the LDAP
907       # SDK will prevent specific file names from working.  For this reason
908       # it is suggested that tls_cert and tls_key be set to a directory,
909       # not a file name.
910       #
911       # The certificate database specified by tls_cert may contain CA certs
912       # and/or the client's cert.  If the client's cert is included, tls_key
913       # should be specified as well.
914       # For backward compatibility, "sslpath" may be used in place of tls_cert.
915       #tls_cert /var/ldap
916       #tls_key /var/ldap
917       #
918       # If using SASL authentication for LDAP (OpenSSL)
919       # use_sasl yes
920       # sasl_auth_id <SASL user name>
921       # rootuse_sasl yes
922       # rootsasl_auth_id <SASL user name for root access>
923       # sasl_secprops none
924       # krb5_ccname /etc/.ldapcache
925
926   Sudoers schema for OpenLDAP
927     The following schema, in OpenLDAP format, is included with sudo source
928     and binary distributions as schema.OpenLDAP.  Simply copy it to the
929     schema directory (e.g., /etc/openldap/schema), add the proper include
930     line in slapd.conf and restart slapd.  Sites using the optional on-line
931     configuration supported by OpenLDAP 2.3 and higher should apply the
932     schema.olcSudo file instead.
933
934       attributetype ( 1.3.6.1.4.1.15953.9.1.1
935          NAME 'sudoUser'
936          DESC 'User(s) who may  run sudo'
937          EQUALITY caseExactMatch
938          SUBSTR caseExactSubstringsMatch
939          SYNTAX 1.3.6.1.4.1.1466.115.121.1.15 )
940
941       attributetype ( 1.3.6.1.4.1.15953.9.1.2
942          NAME 'sudoHost'
943          DESC 'Host(s) who may run sudo'
944          EQUALITY caseExactIA5Match
945          SUBSTR caseExactIA5SubstringsMatch
946          SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 )
947
948       attributetype ( 1.3.6.1.4.1.15953.9.1.3
949          NAME 'sudoCommand'
950          DESC 'Command(s) to be executed by sudo'
951          EQUALITY caseExactIA5Match
952          SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 )
953
954       attributetype ( 1.3.6.1.4.1.15953.9.1.4
955          NAME 'sudoRunAs'
956          DESC 'User(s) impersonated by sudo'
957          EQUALITY caseExactIA5Match
958          SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 )
959
960       attributetype ( 1.3.6.1.4.1.15953.9.1.5
961          NAME 'sudoOption'
962          DESC 'Options(s) followed by sudo'
963          EQUALITY caseExactIA5Match
964          SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 )
965
966       attributetype ( 1.3.6.1.4.1.15953.9.1.6
967          NAME 'sudoRunAsUser'
968          DESC 'User(s) impersonated by sudo'
969          EQUALITY caseExactMatch
970          SYNTAX 1.3.6.1.4.1.1466.115.121.1.15 )
971
972       attributetype ( 1.3.6.1.4.1.15953.9.1.7
973          NAME 'sudoRunAsGroup'
974          DESC 'Group(s) impersonated by sudo'
975          EQUALITY caseExactMatch
976          SYNTAX 1.3.6.1.4.1.1466.115.121.1.15 )
977
978       attributetype ( 1.3.6.1.4.1.15953.9.1.8
979          NAME 'sudoNotBefore'
980          DESC 'Start of time interval for which the entry is valid'
981          EQUALITY generalizedTimeMatch
982          ORDERING generalizedTimeOrderingMatch
983          SYNTAX 1.3.6.1.4.1.1466.115.121.1.24 )
984
985       attributetype ( 1.3.6.1.4.1.15953.9.1.9
986          NAME 'sudoNotAfter'
987          DESC 'End of time interval for which the entry is valid'
988          EQUALITY generalizedTimeMatch
989          ORDERING generalizedTimeOrderingMatch
990          SYNTAX 1.3.6.1.4.1.1466.115.121.1.24 )
991
992       attributetype ( 1.3.6.1.4.1.15953.9.1.10
993          NAME 'sudoOrder'
994          DESC 'an integer to order the sudoRole entries'
995          EQUALITY integerMatch
996          ORDERING integerOrderingMatch
997          SYNTAX 1.3.6.1.4.1.1466.115.121.1.27 )
998
999       objectclass ( 1.3.6.1.4.1.15953.9.2.1 NAME 'sudoRole' SUP top STRUCTURAL
1000          DESC 'Sudoer Entries'
1001          MUST ( cn )
1002          MAY ( sudoUser $ sudoHost $ sudoCommand $ sudoRunAs $ sudoRunAsUser $
1003                sudoRunAsGroup $ sudoOption $ sudoNotBefore $ sudoNotAfter $
1004                sudoOrder $ description )
1005          )
1006

SEE ALSO

1008     cvtsudoers(1), ldap.conf(5), sssd-sudo(5), sudo.conf(5), sudoers(5)
1009

AUTHORS

1011     Many people have worked on sudo over the years; this version consists of
1012     code written primarily by:
1013
1014           Todd C. Miller
1015
1016     See the CONTRIBUTORS.md file in the sudo distribution
1017     (https://www.sudo.ws/about/contributors/) for an exhaustive list of peo‐
1018     ple who have contributed to sudo.
1019

CAVEATS

1021     There are differences in the way that LDAP-based sudoers is parsed com‐
1022     pared to file-based sudoers.  See the Differences between LDAP and
1023     non-LDAP sudoers section for more information.
1024

BUGS

1026     If you believe you have found a bug in sudo, you can submit a bug report
1027     at https://bugzilla.sudo.ws/
1028

SUPPORT

1030     Limited free support is available via the sudo-users mailing list, see
1031     https://www.sudo.ws/mailman/listinfo/sudo-users to subscribe or search
1032     the archives.
1033

DISCLAIMER

1035     sudo is provided “AS IS” and any express or implied warranties, includ‐
1036     ing, but not limited to, the implied warranties of merchantability and
1037     fitness for a particular purpose are disclaimed.  See the LICENSE.md file
1038     distributed with sudo or https://www.sudo.ws/about/license/ for complete
1039     details.
1040
1041Sudo 1.9.12p2                 September 13, 2022                 Sudo 1.9.12p2
Impressum