Imported Upstream version 1.8.3
[debian/sudo] / doc / sudoers.pod
1 Copyright (c) 1994-1996, 1998-2005, 2007-2011
2         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 Sponsored in part by the Defense Advanced Research Projects
18 Agency (DARPA) and Air Force Research Laboratory, Air Force
19 Materiel Command, USAF, under agreement number F39502-99-1-0512.
20
21 =pod
22
23 =head1 NAME
24
25 sudoers - default sudo security policy module
26
27 =head1 DESCRIPTION
28
29 The I<sudoers> policy module determines a user's B<sudo> privileges.
30 It is the default B<sudo> policy plugin.  The policy is driven by
31 the F<@sysconfdir@/sudoers> file or, optionally in LDAP.  The policy
32 format is described in detail in the L<"SUDOERS FILE FORMAT">
33 section.  For information on storing I<sudoers> policy information
34 in LDAP, please see L<sudoers.ldap(5)>.
35
36 =head2 Authentication and Logging
37
38 The I<sudoers> security policy requires that most users authenticate
39 themselves before they can use B<sudo>.  A password is not required
40 if the invoking user is root, if the target user is the same as the
41 invoking user, or if the policy has disabled authentication for the
42 user or command.  Unlike L<su(1)>, when I<sudoers> requires
43 authentication, it validates the invoking user's credentials, not
44 the target user's (or root's) credentials.  This can be changed via
45 the I<rootpw>, I<targetpw> and I<runaspw> flags, described later.
46
47 If a user who is not listed in the policy tries to run a command
48 via B<sudo>, mail is sent to the proper authorities.  The address
49 used for such mail is configurable via the I<mailto> Defaults entry
50 (described later) and defaults to C<@mailto@>.
51
52 Note that mail will not be sent if an unauthorized user tries to
53 run B<sudo> with the B<-l> or B<-v> option.  This allows users to
54 determine for themselves whether or not they are allowed to use
55 B<sudo>.
56
57 If B<sudo> is run by root and the C<SUDO_USER> environment variable
58 is set, the I<sudoers> policy will use this value to determine who
59 the actual user is.  This can be used by a user to log commands 
60 through sudo even when a root shell has been invoked.  It also
61 allows the B<-e> option to remain useful even when invoked via a
62 sudo-run script or program.  Note, however, that the I<sudoers>
63 lookup is still done for root, not the user specified by C<SUDO_USER>.
64
65 I<sudoers> uses time stamp files for credential caching.  Once a
66 user has been authenticated, a time stamp is updated and the user
67 may then use sudo without a password for a short period of time
68 (C<@timeout@> minutes unless overridden by the I<timeout> option.
69 By default, I<sudoers> uses a tty-based time stamp which means that
70 there is a separate time stamp for each of a user's login sessions.
71 The I<tty_tickets> option can be disabled to force the use of a
72 single time stamp for all of a user's sessions.
73
74 I<sudoers> can log both successful and unsuccessful attempts (as well
75 as errors) to syslog(3), a log file, or both.  By default, I<sudoers>
76 will log via syslog(3) but this is changeable via the I<syslog>
77 and I<logfile> Defaults settings.
78
79 I<sudoers> also supports logging a command's input and output
80 streams.  I/O logging is not on by default but can be enabled using
81 the I<log_input> and I<log_output> Defaults flags as well as the
82 C<LOG_INPUT> and C<LOG_OUTPUT> command tags.
83
84 =head2 Command Environment
85
86 Since environment variables can influence program behavior, I<sudoers>
87 provides a means to restrict which variables from the user's
88 environment are inherited by the command to be run.  There are two
89 distinct ways I<sudoers> can deal with environment variables.
90
91 By default, the I<env_reset> option is enabled.  This causes commands
92 to be executed with a minimal environment containing C<TERM>,
93 C<PATH>, C<HOME>, C<MAIL>, C<SHELL>, C<LOGNAME>, C<USER> and C<USERNAME> in
94 addition to variables from the invoking process permitted by the
95 I<env_check> and I<env_keep> options.  This is effectively a whitelist
96 for environment variables.
97
98 If, however, the I<env_reset> option is disabled, any variables not
99 explicitly denied by the I<env_check> and I<env_delete> options are
100 inherited from the invoking process.  In this case, I<env_check>
101 and I<env_delete> behave like a blacklist.  Since it is not possible
102 to blacklist all potentially dangerous environment variables, use
103 of the default I<env_reset> behavior is encouraged.
104
105 In all cases, environment variables with a value beginning with
106 C<()> are removed as they could be interpreted as B<bash> functions.
107 The list of environment variables that B<sudo> allows or denies is
108 contained in the output of C<sudo -V> when run as root.
109
110 Note that the dynamic linker on most operating systems will remove
111 variables that can control dynamic linking from the environment of
112 setuid executables, including B<sudo>.  Depending on the operating
113 system this may include C<_RLD*>, C<DYLD_*>, C<LD_*>, C<LDR_*>,
114 C<LIBPATH>, C<SHLIB_PATH>, and others.  These type of variables are
115 removed from the environment before B<sudo> even begins execution
116 and, as such, it is not possible for B<sudo> to preserve them.
117
118 As a special case, if B<sudo>'s B<-i> option (initial login) is
119 specified, I<sudoers> will initialize the environment regardless
120 of the value of I<env_reset>.  The I<DISPLAY>, I<PATH> and I<TERM>
121 variables remain unchanged; I<HOME>, I<MAIL>, I<SHELL>, I<USER>,
122 and I<LOGNAME> are set based on the target user.  On Linux and AIX
123 systems the contents of F</etc/environment> are also included.  All
124 other environment variables are removed.
125
126 =head1 SUDOERS FILE FORMAT
127
128 The I<sudoers> file is composed of two types of entries: aliases
129 (basically variables) and user specifications (which specify who
130 may run what).
131
132 When multiple entries match for a user, they are applied in order.
133 Where there are multiple matches, the last match is used (which is
134 not necessarily the most specific match).
135
136 The I<sudoers> grammar will be described below in Extended Backus-Naur
137 Form (EBNF).  Don't despair if you don't know what EBNF is; it is
138 fairly simple, and the definitions below are annotated.
139
140 =head2 Quick guide to EBNF
141
142 EBNF is a concise and exact way of describing the grammar of a language.
143 Each EBNF definition is made up of I<production rules>.  E.g.,
144
145  symbol ::= definition | alternate1 | alternate2 ...
146
147 Each I<production rule> references others and thus makes up a
148 grammar for the language.  EBNF also contains the following
149 operators, which many readers will recognize from regular
150 expressions.  Do not, however, confuse them with "wildcard"
151 characters, which have different meanings.
152
153 =over 4
154
155 =item C<?>
156
157 Means that the preceding symbol (or group of symbols) is optional.
158 That is, it may appear once or not at all.
159
160 =item C<*>
161
162 Means that the preceding symbol (or group of symbols) may appear
163 zero or more times.
164
165 =item C<+>
166
167 Means that the preceding symbol (or group of symbols) may appear
168 one or more times.
169
170 =back
171
172 Parentheses may be used to group symbols together.  For clarity,
173 we will use single quotes ('') to designate what is a verbatim character
174 string (as opposed to a symbol name).
175
176 =head2 Aliases
177
178 There are four kinds of aliases: C<User_Alias>, C<Runas_Alias>,
179 C<Host_Alias> and C<Cmnd_Alias>.
180
181  Alias ::= 'User_Alias'  User_Alias (':' User_Alias)* |
182            'Runas_Alias' Runas_Alias (':' Runas_Alias)* |
183            'Host_Alias'  Host_Alias (':' Host_Alias)* |
184            'Cmnd_Alias'  Cmnd_Alias (':' Cmnd_Alias)*
185
186  User_Alias ::= NAME '=' User_List
187
188  Runas_Alias ::= NAME '=' Runas_List
189
190  Host_Alias ::= NAME '=' Host_List
191
192  Cmnd_Alias ::= NAME '=' Cmnd_List
193
194  NAME ::= [A-Z]([A-Z][0-9]_)*
195
196 Each I<alias> definition is of the form
197
198  Alias_Type NAME = item1, item2, ...
199
200 where I<Alias_Type> is one of C<User_Alias>, C<Runas_Alias>, C<Host_Alias>,
201 or C<Cmnd_Alias>.  A C<NAME> is a string of uppercase letters, numbers,
202 and underscore characters ('_').  A C<NAME> B<must> start with an
203 uppercase letter.  It is possible to put several alias definitions
204 of the same type on a single line, joined by a colon (':').  E.g.,
205
206  Alias_Type NAME = item1, item2, item3 : NAME = item4, item5
207
208 The definitions of what constitutes a valid I<alias> member follow.
209
210  User_List ::= User |
211                User ',' User_List
212
213  User ::= '!'* user name |
214           '!'* #uid |
215           '!'* %group |
216           '!'* %#gid |
217           '!'* +netgroup |
218           '!'* %:nonunix_group |
219           '!'* %:#nonunix_gid |
220           '!'* User_Alias
221
222 A C<User_List> is made up of one or more user names, user ids
223 (prefixed with '#'), system group names and ids (prefixed with '%'
224 and '%#' respectively), netgroups (prefixed with '+'), non-Unix
225 group names and IDs (prefixed with '%:' and '%:#' respectively) and
226 C<User_Alias>es.  Each list item may be prefixed with zero or more
227 '!' operators.  An odd number of '!' operators negate the value of
228 the item; an even number just cancel each other out.
229
230 A C<user name>, C<uid>, C<group>, C<gid>, C<netgroup>, C<nonunix_group>
231 or C<nonunix_gid> may be enclosed in double quotes to avoid the
232 need for escaping special characters.  Alternately, special characters
233 may be specified in escaped hex mode, e.g. \x20 for space.  When
234 using double quotes, any prefix characters must be included inside
235 the quotes.
236
237 The actual C<nonunix_group> and C<nonunix_gid> syntax depends on
238 the underlying group provider plugin (see the I<group_plugin>
239 description below).  For instance, the QAS AD plugin supports the
240 following formats:
241
242 =over 4
243
244 =item *
245
246 Group in the same domain: "Group Name"
247
248 =item *
249
250 Group in any domain: "Group Name@FULLY.QUALIFIED.DOMAIN"
251
252 =item *
253
254 Group SID: "S-1-2-34-5678901234-5678901234-5678901234-567"
255
256 =back
257
258 Note that quotes around group names are optional.  Unquoted strings
259 must use a backslash (\) to escape spaces and special characters.
260 See L<"Other special characters and reserved words"> for a list of
261 characters that need to be escaped.
262
263  Runas_List ::= Runas_Member |
264                 Runas_Member ',' Runas_List
265
266  Runas_Member ::= '!'* user name |
267                   '!'* #uid |
268                   '!'* %group |
269                   '!'* %#gid |
270                   '!'* %:nonunix_group |
271                   '!'* %:#nonunix_gid |
272                   '!'* +netgroup |
273                   '!'* Runas_Alias
274
275 A C<Runas_List> is similar to a C<User_List> except that instead
276 of C<User_Alias>es it can contain C<Runas_Alias>es.  Note that
277 user names and groups are matched as strings.  In other words, two
278 users (groups) with the same uid (gid) are considered to be distinct.
279 If you wish to match all user names with the same uid (e.g.E<nbsp>root
280 and toor), you can use a uid instead (#0 in the example given).
281
282  Host_List ::= Host |
283                Host ',' Host_List
284
285  Host ::= '!'* host name |
286           '!'* ip_addr |
287           '!'* network(/netmask)? |
288           '!'* +netgroup |
289           '!'* Host_Alias
290
291 A C<Host_List> is made up of one or more host names, IP addresses,
292 network numbers, netgroups (prefixed with '+') and other aliases.
293 Again, the value of an item may be negated with the '!' operator.
294 If you do not specify a netmask along with the network number,
295 B<sudo> will query each of the local host's network interfaces and,
296 if the network number corresponds to one of the hosts's network
297 interfaces, the corresponding netmask will be used.  The netmask
298 may be specified either in standard IP address notation
299 (e.g.E<nbsp>255.255.255.0 or ffff:ffff:ffff:ffff::),
300 or CIDR notation (number of bits, e.g.E<nbsp>24 or 64).  A host name may
301 include shell-style wildcards (see the L<Wildcards> section below),
302 but unless the C<host name> command on your machine returns the fully
303 qualified host name, you'll need to use the I<fqdn> option for
304 wildcards to be useful.  Note B<sudo> only inspects actual network
305 interfaces; this means that IP address 127.0.0.1 (localhost) will
306 never match.  Also, the host name "localhost" will only match if
307 that is the actual host name, which is usually only the case for
308 non-networked systems.
309
310  Cmnd_List ::= Cmnd |
311                Cmnd ',' Cmnd_List
312
313  commandname ::= file name |
314                  file name args |
315                  file name '""'
316
317  Cmnd ::= '!'* commandname |
318           '!'* directory |
319           '!'* "sudoedit" |
320           '!'* Cmnd_Alias
321
322 A C<Cmnd_List> is a list of one or more commandnames, directories, and other
323 aliases.  A commandname is a fully qualified file name which may include
324 shell-style wildcards (see the L<Wildcards> section below).  A simple
325 file name allows the user to run the command with any arguments he/she
326 wishes.  However, you may also specify command line arguments (including
327 wildcards).  Alternately, you can specify C<""> to indicate that the command
328 may only be run B<without> command line arguments.  A directory is a
329 fully qualified path name ending in a '/'.  When you specify a directory
330 in a C<Cmnd_List>, the user will be able to run any file within that directory
331 (but not in any subdirectories therein).
332
333 If a C<Cmnd> has associated command line arguments, then the arguments
334 in the C<Cmnd> must match exactly those given by the user on the command line
335 (or match the wildcards if there are any).  Note that the following
336 characters must be escaped with a '\' if they are used in command
337 arguments: ',', ':', '=', '\'.  The special command C<"sudoedit">
338 is used to permit a user to run B<sudo> with the B<-e> option (or
339 as B<sudoedit>).  It may take command line arguments just as
340 a normal command does.
341
342 =head2 Defaults
343
344 Certain configuration options may be changed from their default
345 values at runtime via one or more C<Default_Entry> lines.  These
346 may affect all users on any host, all users on a specific host, a
347 specific user, a specific command, or commands being run as a specific user.
348 Note that per-command entries may not include command line arguments.
349 If you need to specify arguments, define a C<Cmnd_Alias> and reference
350 that instead.
351
352  Default_Type ::= 'Defaults' |
353                   'Defaults' '@' Host_List |
354                   'Defaults' ':' User_List |
355                   'Defaults' '!' Cmnd_List |
356                   'Defaults' '>' Runas_List
357
358  Default_Entry ::= Default_Type Parameter_List
359
360  Parameter_List ::= Parameter |
361                     Parameter ',' Parameter_List
362
363  Parameter ::= Parameter '=' Value |
364                Parameter '+=' Value |
365                Parameter '-=' Value |
366                '!'* Parameter
367
368 Parameters may be B<flags>, B<integer> values, B<strings>, or B<lists>.
369 Flags are implicitly boolean and can be turned off via the '!'
370 operator.  Some integer, string and list parameters may also be
371 used in a boolean context to disable them.  Values may be enclosed
372 in double quotes (C<">) when they contain multiple words.  Special
373 characters may be escaped with a backslash (C<\>).
374
375 Lists have two additional assignment operators, C<+=> and C<-=>.
376 These operators are used to add to and delete from a list respectively.
377 It is not an error to use the C<-=> operator to remove an element
378 that does not exist in a list.
379
380 Defaults entries are parsed in the following order: generic, host
381 and user Defaults first, then runas Defaults and finally command
382 defaults.
383
384 See L<"SUDOERS OPTIONS"> for a list of supported Defaults parameters.
385
386 =head2 User Specification
387
388  User_Spec ::= User_List Host_List '=' Cmnd_Spec_List \
389                (':' Host_List '=' Cmnd_Spec_List)*
390
391  Cmnd_Spec_List ::= Cmnd_Spec |
392                     Cmnd_Spec ',' Cmnd_Spec_List
393
394  Cmnd_Spec ::= Runas_Spec? SELinux_Spec? Tag_Spec* Cmnd
395
396  Runas_Spec ::= '(' Runas_List? (':' Runas_List)? ')'
397
398  SELinux_Spec ::= ('ROLE=role' | 'TYPE=type')
399
400  Tag_Spec ::= ('NOPASSWD:' | 'PASSWD:' | 'NOEXEC:' | 'EXEC:' |
401                'SETENV:' | 'NOSETENV:' | 'LOG_INPUT:' | 'NOLOG_INPUT:' |
402                'LOG_OUTPUT:' | 'NOLOG_OUTPUT:')
403
404 A B<user specification> determines which commands a user may run
405 (and as what user) on specified hosts.  By default, commands are
406 run as B<root>, but this can be changed on a per-command basis.
407
408 The basic structure of a user specification is `who where = (as_whom)
409 what'.  Let's break that down into its constituent parts:
410
411 =head2 Runas_Spec
412
413 A C<Runas_Spec> determines the user and/or the group that a command
414 may be run as.  A fully-specified C<Runas_Spec> consists of two
415 C<Runas_List>s (as defined above) separated by a colon (':') and
416 enclosed in a set of parentheses.  The first C<Runas_List> indicates
417 which users the command may be run as via B<sudo>'s B<-u> option.
418 The second defines a list of groups that can be specified via
419 B<sudo>'s B<-g> option.  If both C<Runas_List>s are specified, the
420 command may be run with any combination of users and groups listed
421 in their respective C<Runas_List>s.  If only the first is specified,
422 the command may be run as any user in the list but no B<-g> option
423 may be specified.  If the first C<Runas_List> is empty but the
424 second is specified, the command may be run as the invoking user
425 with the group set to any listed in the C<Runas_List>.  If no
426 C<Runas_Spec> is specified the command may be run as B<root> and
427 no group may be specified.
428
429 A C<Runas_Spec> sets the default for the commands that follow it.
430 What this means is that for the entry:
431
432  dgb    boulder = (operator) /bin/ls, /bin/kill, /usr/bin/lprm
433
434 The user B<dgb> may run F</bin/ls>, F</bin/kill>, and
435 F</usr/bin/lprm> -- but only as B<operator>.  E.g.,
436
437  $ sudo -u operator /bin/ls
438
439 It is also possible to override a C<Runas_Spec> later on in an
440 entry.  If we modify the entry like so:
441
442  dgb    boulder = (operator) /bin/ls, (root) /bin/kill, /usr/bin/lprm
443
444 Then user B<dgb> is now allowed to run F</bin/ls> as B<operator>,
445 but  F</bin/kill> and F</usr/bin/lprm> as B<root>.
446
447 We can extend this to allow B<dgb> to run C</bin/ls> with either
448 the user or group set to B<operator>:
449
450  dgb    boulder = (operator : operator) /bin/ls, (root) /bin/kill, \
451         /usr/bin/lprm
452
453 Note that while the group portion of the C<Runas_Spec> permits the
454 user to run as command with that group, it does not force the user
455 to do so.  If no group is specified on the command line, the command
456 will run with the group listed in the target user's password database
457 entry.  The following would all be permitted by the sudoers entry above:
458
459  $ sudo -u operator /bin/ls
460  $ sudo -u operator -g operator /bin/ls
461  $ sudo -g operator /bin/ls
462
463 In the following example, user B<tcm> may run commands that access
464 a modem device file with the dialer group.
465
466  tcm    boulder = (:dialer) /usr/bin/tip, /usr/bin/cu, \
467         /usr/local/bin/minicom
468
469 Note that in this example only the group will be set, the command
470 still runs as user B<tcm>.  E.g.
471
472  $ sudo -g dialer /usr/bin/cu
473
474 Multiple users and groups may be present in a C<Runas_Spec>, in
475 which case the user may select any combination of users and groups
476 via the B<-u> and B<-g> options.  In this example:
477
478  alan   ALL = (root, bin : operator, system) ALL
479
480 user B<alan> may run any command as either user root or bin,
481 optionally setting the group to operator or system.
482
483 =head2 SELinux_Spec
484
485 On systems with SELinux support, I<sudoers> entries may optionally have
486 an SELinux role and/or type associated with a command.  If a role or
487 type is specified with the command it will override any default values
488 specified in I<sudoers>.  A role or type specified on the command line,
489 however, will supercede the values in I<sudoers>.
490
491 =head2 Tag_Spec
492
493 A command may have zero or more tags associated with it.  There are
494 eight possible tag values, C<NOPASSWD>, C<PASSWD>, C<NOEXEC>,
495 C<EXEC>, C<SETENV>, C<NOSETENV>, C<LOG_INPUT>, C<NOLOG_INPUT>,
496 C<LOG_OUTPUT> and C<NOLOG_OUTPUT>.  Once a tag is set on a C<Cmnd>,
497 subsequent C<Cmnd>s in the C<Cmnd_Spec_List>, inherit the tag unless
498 it is overridden by the opposite tag (i.e.: C<PASSWD> overrides
499 C<NOPASSWD> and C<NOEXEC> overrides C<EXEC>).
500
501 =head3 NOPASSWD and PASSWD
502
503 By default, B<sudo> requires that a user authenticate him or herself
504 before running a command.  This behavior can be modified via the
505 C<NOPASSWD> tag.  Like a C<Runas_Spec>, the C<NOPASSWD> tag sets
506 a default for the commands that follow it in the C<Cmnd_Spec_List>.
507 Conversely, the C<PASSWD> tag can be used to reverse things.
508 For example:
509
510  ray    rushmore = NOPASSWD: /bin/kill, /bin/ls, /usr/bin/lprm
511
512 would allow the user B<ray> to run F</bin/kill>, F</bin/ls>, and
513 F</usr/bin/lprm> as B<root> on the machine rushmore without
514 authenticating himself.  If we only want B<ray> to be able to
515 run F</bin/kill> without a password the entry would be:
516
517  ray    rushmore = NOPASSWD: /bin/kill, PASSWD: /bin/ls, /usr/bin/lprm
518
519 Note, however, that the C<PASSWD> tag has no effect on users who are
520 in the group specified by the I<exempt_group> option.
521
522 By default, if the C<NOPASSWD> tag is applied to any of the entries
523 for a user on the current host, he or she will be able to run
524 C<sudo -l> without a password.  Additionally, a user may only run
525 C<sudo -v> without a password if the C<NOPASSWD> tag is present
526 for all a user's entries that pertain to the current host.
527 This behavior may be overridden via the verifypw and listpw options.
528
529 =head3 NOEXEC and EXEC
530
531 If B<sudo> has been compiled with I<noexec> support and the underlying
532 operating system supports it, the C<NOEXEC> tag can be used to prevent
533 a dynamically-linked executable from running further commands itself.
534
535 In the following example, user B<aaron> may run F</usr/bin/more>
536 and F</usr/bin/vi> but shell escapes will be disabled.
537
538  aaron  shanty = NOEXEC: /usr/bin/more, /usr/bin/vi
539
540 See the L<PREVENTING SHELL ESCAPES> section below for more details
541 on how C<NOEXEC> works and whether or not it will work on your system.
542
543 =head3 SETENV and NOSETENV
544
545 These tags override the value of the I<setenv> option on a per-command
546 basis.  Note that if C<SETENV> has been set for a command, the user
547 may disable the I<env_reset> option from the command line via the
548 B<-E> option.  Additionally, environment variables set on the command
549 line are not subject to the restrictions imposed by I<env_check>,
550 I<env_delete>, or I<env_keep>.  As such, only trusted users should
551 be allowed to set variables in this manner.  If the command matched
552 is B<ALL>, the C<SETENV> tag is implied for that command; this
553 default may be overridden by use of the C<NOSETENV> tag.
554
555 =head3 LOG_INPUT and NOLOG_INPUT
556
557 These tags override the value of the I<log_input> option on a
558 per-command basis.  For more information, see the description of
559 I<log_input> in the L<"SUDOERS OPTIONS"> section below.
560
561 =head3 LOG_OUTPUT and NOLOG_OUTPUT
562
563 These tags override the value of the I<log_output> option on a
564 per-command basis.  For more information, see the description of
565 I<log_output> in the L<"SUDOERS OPTIONS"> section below.
566
567 =head2 Wildcards
568
569 B<sudo> allows shell-style I<wildcards> (aka meta or glob characters)
570 to be used in host names, path names and command line arguments in
571 the I<sudoers> file.  Wildcard matching is done via the B<POSIX>
572 L<glob(3)> and L<fnmatch(3)> routines.  Note that these are I<not>
573 regular expressions.
574
575 =over 8
576
577 =item C<*>
578
579 Matches any set of zero or more characters.
580
581 =item C<?>
582
583 Matches any single character.
584
585 =item C<[...]>
586
587 Matches any character in the specified range.
588
589 =item C<[!...]>
590
591 Matches any character B<not> in the specified range.
592
593 =item C<\x>
594
595 For any character "x", evaluates to "x".  This is used to
596 escape special characters such as: "*", "?", "[", and "}".
597
598 =back
599
600 POSIX character classes may also be used if your system's L<glob(3)>
601 and L<fnmatch(3)> functions support them.  However, because the
602 C<':'> character has special meaning in I<sudoers>, it must be
603 escaped.  For example:
604
605     /bin/ls [[\:alpha\:]]*
606
607 Would match any file name beginning with a letter.
608
609 Note that a forward slash ('/') will B<not> be matched by
610 wildcards used in the path name.  When matching the command
611 line arguments, however, a slash B<does> get matched by
612 wildcards.  This is to make a path like:
613
614     /usr/bin/*
615
616 match F</usr/bin/who> but not F</usr/bin/X11/xterm>.
617
618 =head2 Exceptions to wildcard rules
619
620 The following exceptions apply to the above rules:
621
622 =over 8
623
624 =item C<"">
625
626 If the empty string C<""> is the only command line argument in the
627 I<sudoers> entry it means that command is not allowed to be run
628 with B<any> arguments.
629
630 =back
631
632 =head2 Including other files from within sudoers
633
634 It is possible to include other I<sudoers> files from within the
635 I<sudoers> file currently being parsed using the C<#include> and
636 C<#includedir> directives.
637
638 This can be used, for example, to keep a site-wide I<sudoers> file
639 in addition to a local, per-machine file.  For the sake of this
640 example the site-wide I<sudoers> will be F</etc/sudoers> and the
641 per-machine one will be F</etc/sudoers.local>.  To include
642 F</etc/sudoers.local> from within F</etc/sudoers> we would use the
643 following line in F</etc/sudoers>:
644
645 =over 4
646
647 C<#include /etc/sudoers.local>
648
649 =back
650
651 When B<sudo> reaches this line it will suspend processing of the
652 current file (F</etc/sudoers>) and switch to F</etc/sudoers.local>.
653 Upon reaching the end of F</etc/sudoers.local>, the rest of
654 F</etc/sudoers> will be processed.  Files that are included may
655 themselves include other files.  A hard limit of 128 nested include
656 files is enforced to prevent include file loops.
657
658 The file name may include the C<%h> escape, signifying the short form
659 of the host name.  I.e., if the machine's host name is "xerxes", then
660
661 C<#include /etc/sudoers.%h>
662
663 will cause B<sudo> to include the file F</etc/sudoers.xerxes>.
664
665 The C<#includedir> directive can be used to create a F<sudo.d>
666 directory that the system package manager can drop I<sudoers> rules
667 into as part of package installation.  For example, given:
668
669 C<#includedir /etc/sudoers.d>
670
671 B<sudo> will read each file in F</etc/sudoers.d>, skipping file
672 names that end in C<~> or contain a C<.> character to avoid causing
673 problems with package manager or editor temporary/backup files.
674 Files are parsed in sorted lexical order.  That is,
675 F</etc/sudoers.d/01_first> will be parsed before
676 F</etc/sudoers.d/10_second>.  Be aware that because the sorting is
677 lexical, not numeric, F</etc/sudoers.d/1_whoops> would be loaded
678 B<after> F</etc/sudoers.d/10_second>.  Using a consistent number
679 of leading zeroes in the file names can be used to avoid such
680 problems.
681
682 Note that unlike files included via C<#include>, B<visudo> will not
683 edit the files in a C<#includedir> directory unless one of them
684 contains a syntax error.  It is still possible to run B<visudo>
685 with the C<-f> flag to edit the files directly.
686
687 =head2 Other special characters and reserved words
688
689 The pound sign ('#') is used to indicate a comment (unless it is
690 part of a #include directive or unless it occurs in the context of
691 a user name and is followed by one or more digits, in which case
692 it is treated as a uid).  Both the comment character and any text
693 after it, up to the end of the line, are ignored.
694
695 The reserved word B<ALL> is a built-in I<alias> that always causes
696 a match to succeed.  It can be used wherever one might otherwise
697 use a C<Cmnd_Alias>, C<User_Alias>, C<Runas_Alias>, or C<Host_Alias>.
698 You should not try to define your own I<alias> called B<ALL> as the
699 built-in alias will be used in preference to your own.  Please note
700 that using B<ALL> can be dangerous since in a command context, it
701 allows the user to run B<any> command on the system.
702
703 An exclamation point ('!') can be used as a logical I<not> operator
704 both in an I<alias> and in front of a C<Cmnd>.  This allows one to
705 exclude certain values.  Note, however, that using a C<!> in
706 conjunction with the built-in C<ALL> alias to allow a user to
707 run "all but a few" commands rarely works as intended (see SECURITY
708 NOTES below).
709
710 Long lines can be continued with a backslash ('\') as the last
711 character on the line.
712
713 Whitespace between elements in a list as well as special syntactic
714 characters in a I<User Specification> ('=', ':', '(', ')') is optional.
715
716 The following characters must be escaped with a backslash ('\') when
717 used as part of a word (e.g.E<nbsp>a user name or host name):
718 '!', '=', ':', ',', '(', ')', '\'.
719
720 =head1 SUDOERS OPTIONS
721
722 B<sudo>'s behavior can be modified by C<Default_Entry> lines, as
723 explained earlier.  A list of all supported Defaults parameters,
724 grouped by type, are listed below.
725
726 B<Boolean Flags>:
727
728 =over 16
729
730 =item always_set_home
731
732 If enabled, B<sudo> will set the C<HOME> environment variable to the
733 home directory of the target user (which is root unless the B<-u>
734 option is used).  This effectively means that the B<-H> option is
735 always implied.  Note that C<HOME> is already set when the the
736 I<env_reset> option is enabled, so I<always_set_home> is only
737 effective for configurations where either I<env_reset> is disabled
738 or C<HOME> is present in the I<env_keep> list.
739 This flag is I<off> by default.
740
741 =item authenticate
742
743 If set, users must authenticate themselves via a password (or other
744 means of authentication) before they may run commands.  This default
745 may be overridden via the C<PASSWD> and C<NOPASSWD> tags.
746 This flag is I<on> by default.
747
748 =item closefrom_override
749
750 If set, the user may use B<sudo>'s B<-C> option which
751 overrides the default starting point at which B<sudo> begins
752 closing open file descriptors.  This flag is I<off> by default.
753
754 =item compress_io
755
756 If set, and B<sudo> is configured to log a command's input or output,
757 the I/O logs will be compressed using B<zlib>.  This flag is I<on>
758 by default when B<sudo> is compiled with B<zlib> support.
759
760 =item env_editor
761
762 If set, B<visudo> will use the value of the EDITOR or VISUAL
763 environment variables before falling back on the default editor list.
764 Note that this may create a security hole as it allows the user to
765 run any arbitrary command as root without logging.  A safer alternative
766 is to place a colon-separated list of editors in the C<editor>
767 variable.  B<visudo> will then only use the EDITOR or VISUAL if
768 they match a value specified in C<editor>.  This flag is I<@env_editor@> by
769 default.
770
771 =item env_reset
772
773 If set, B<sudo> will reset the environment to only contain the
774 LOGNAME, MAIL, SHELL, USER, USERNAME and the C<SUDO_*> variables.  Any
775 variables in the caller's environment that match the C<env_keep>
776 and C<env_check> lists are then added.  The default contents of the
777 C<env_keep> and C<env_check> lists are displayed when B<sudo> is
778 run by root with the I<-V> option.  If the I<secure_path> option
779 is set, its value will be used for the C<PATH> environment variable.
780 This flag is I<@env_reset@> by default.
781
782 =item fast_glob
783
784 Normally, B<sudo> uses the L<glob(3)> function to do shell-style
785 globbing when matching path names.  However, since it accesses the
786 file system, L<glob(3)> can take a long time to complete for some
787 patterns, especially when the pattern references a network file
788 system that is mounted on demand (automounted).  The I<fast_glob>
789 option causes B<sudo> to use the L<fnmatch(3)> function, which does
790 not access the file system to do its matching.  The disadvantage
791 of I<fast_glob> is that it is unable to match relative path names
792 such as F<./ls> or F<../bin/ls>.  This has security implications
793 when path names that include globbing characters are used with the
794 negation operator, C<'!'>, as such rules can be trivially bypassed.
795 As such, this option should not be used when I<sudoers> contains rules 
796 that contain negated path names which include globbing characters.
797 This flag is I<off> by default.
798
799 =item fqdn
800
801 Set this flag if you want to put fully qualified host names in the
802 I<sudoers> file.  I.e., instead of myhost you would use myhost.mydomain.edu.
803 You may still use the short form if you wish (and even mix the two).
804 Beware that turning on I<fqdn> requires B<sudo> to make DNS lookups
805 which may make B<sudo> unusable if DNS stops working (for example
806 if the machine is not plugged into the network).  Also note that
807 you must use the host's official name as DNS knows it.  That is,
808 you may not use a host alias (C<CNAME> entry) due to performance
809 issues and the fact that there is no way to get all aliases from
810 DNS.  If your machine's host name (as returned by the C<hostname>
811 command) is already fully qualified you shouldn't need to set
812 I<fqdn>.  This flag is I<@fqdn@> by default.
813
814 =item ignore_dot
815
816 If set, B<sudo> will ignore '.' or '' (current dir) in the C<PATH>
817 environment variable; the C<PATH> itself is not modified.  This
818 flag is I<@ignore_dot@> by default.
819
820 =item ignore_local_sudoers
821
822 If set via LDAP, parsing of F<@sysconfdir@/sudoers> will be skipped.
823 This is intended for Enterprises that wish to prevent the usage of local
824 sudoers files so that only LDAP is used.  This thwarts the efforts of
825 rogue operators who would attempt to add roles to F<@sysconfdir@/sudoers>.
826 When this option is present, F<@sysconfdir@/sudoers> does not even need to
827 exist. Since this option tells B<sudo> how to behave when no specific LDAP
828 entries have been matched, this sudoOption is only meaningful for the
829 C<cn=defaults> section.  This flag is I<off> by default.
830
831 =item insults
832
833 If set, B<sudo> will insult users when they enter an incorrect
834 password.  This flag is I<@insults@> by default.
835
836 =item log_host
837
838 If set, the host name will be logged in the (non-syslog) B<sudo> log file.
839 This flag is I<off> by default.
840
841 =item log_input
842
843 If set, B<sudo> will run the command in a I<pseudo tty> and log all
844 user input.
845 If the standard input is not connected to the user's tty, due to
846 I/O redirection or because the command is part of a pipeline, that
847 input is also captured and stored in a separate log file.
848
849 Input is logged to the directory specified by the I<iolog_dir>
850 option (F<@iolog_dir@> by default) using a unique session ID that
851 is included in the normal B<sudo> log line, prefixed with I<TSID=>.
852 The I<iolog_file> option may be used to control the format of the
853 session ID.
854
855 Note that user input may contain sensitive information such as
856 passwords (even if they are not echoed to the screen), which will
857 be stored in the log file unencrypted.  In most cases, logging the
858 command output via I<log_output> is all that is required.
859
860 =item log_output
861
862 If set, B<sudo> will run the command in a I<pseudo tty> and log all
863 output that is sent to the screen, similar to the script(1) command.
864 If the standard output or standard error is not connected to the
865 user's tty, due to I/O redirection or because the command is part
866 of a pipeline, that output is also captured and stored in separate
867 log files.
868
869 Output is logged to the directory specified by the I<iolog_dir>
870 option (F<@iolog_dir@> by default) using a unique session ID that
871 is included in the normal B<sudo> log line, prefixed with I<TSID=>.
872 The I<iolog_file> option may be used to control the format of the
873 session ID.
874
875 Output logs may be viewed with the L<sudoreplay(8)> utility, which
876 can also be used to list or search the available logs.
877
878 =item log_year
879
880 If set, the four-digit year will be logged in the (non-syslog) B<sudo> log file.
881 This flag is I<off> by default.
882
883 =item long_otp_prompt
884
885 When validating with a One Time Password (OTP) scheme such as
886 B<S/Key> or B<OPIE>, a two-line prompt is used to make it easier
887 to cut and paste the challenge to a local window.  It's not as
888 pretty as the default but some people find it more convenient.  This
889 flag is I<@long_otp_prompt@> by default.
890
891 =item mail_always
892
893 Send mail to the I<mailto> user every time a users runs B<sudo>.
894 This flag is I<off> by default.
895
896 =item mail_badpass
897
898 Send mail to the I<mailto> user if the user running B<sudo> does not
899 enter the correct password.  This flag is I<off> by default.
900
901 =item mail_no_host
902
903 If set, mail will be sent to the I<mailto> user if the invoking
904 user exists in the I<sudoers> file, but is not allowed to run
905 commands on the current host.  This flag is I<@mail_no_host@> by default.
906
907 =item mail_no_perms
908
909 If set, mail will be sent to the I<mailto> user if the invoking
910 user is allowed to use B<sudo> but the command they are trying is not
911 listed in their I<sudoers> file entry or is explicitly denied.
912 This flag is I<@mail_no_perms@> by default.
913
914 =item mail_no_user
915
916 If set, mail will be sent to the I<mailto> user if the invoking
917 user is not in the I<sudoers> file.  This flag is I<@mail_no_user@>
918 by default.
919
920 =item noexec
921
922 If set, all commands run via B<sudo> will behave as if the C<NOEXEC>
923 tag has been set, unless overridden by a C<EXEC> tag.  See the
924 description of I<NOEXEC and EXEC> below as well as the L<PREVENTING SHELL
925 ESCAPES> section at the end of this manual.  This flag is I<off> by default.
926
927 =item path_info
928
929 Normally, B<sudo> will tell the user when a command could not be
930 found in their C<PATH> environment variable.  Some sites may wish
931 to disable this as it could be used to gather information on the
932 location of executables that the normal user does not have access
933 to.  The disadvantage is that if the executable is simply not in
934 the user's C<PATH>, B<sudo> will tell the user that they are not
935 allowed to run it, which can be confusing.  This flag is I<@path_info@>
936 by default.
937
938 =item passprompt_override
939
940 The password prompt specified by I<passprompt> will normally only
941 be used if the password prompt provided by systems such as PAM matches
942 the string "Password:".  If I<passprompt_override> is set, I<passprompt>
943 will always be used.  This flag is I<off> by default.
944
945 =item preserve_groups
946
947 By default, B<sudo> will initialize the group vector to the list of
948 groups the target user is in.  When I<preserve_groups> is set, the
949 user's existing group vector is left unaltered.  The real and
950 effective group IDs, however, are still set to match the target
951 user.  This flag is I<off> by default.
952
953 =item pwfeedback
954
955 By default, B<sudo> reads the password like most other Unix programs,
956 by turning off echo until the user hits the return (or enter) key.
957 Some users become confused by this as it appears to them that B<sudo>
958 has hung at this point.  When I<pwfeedback> is set, B<sudo> will
959 provide visual feedback when the user presses a key.  Note that
960 this does have a security impact as an onlooker may be able to
961 determine the length of the password being entered.
962 This flag is I<off> by default.
963
964 =item requiretty
965
966 If set, B<sudo> will only run when the user is logged in to a real
967 tty.  When this flag is set, B<sudo> can only be run from a login
968 session and not via other means such as L<cron(8)> or cgi-bin scripts.
969 This flag is I<off> by default.
970
971 =item root_sudo
972
973 If set, root is allowed to run B<sudo> too.  Disabling this prevents users
974 from "chaining" B<sudo> commands to get a root shell by doing something
975 like C<"sudo sudo /bin/sh">.  Note, however, that turning off I<root_sudo>
976 will also prevent root from running B<sudoedit>.
977 Disabling I<root_sudo> provides no real additional security; it
978 exists purely for historical reasons.
979 This flag is I<@root_sudo@> by default.
980
981 =item rootpw
982
983 If set, B<sudo> will prompt for the root password instead of the password
984 of the invoking user.  This flag is I<off> by default.
985
986 =item runaspw
987
988 If set, B<sudo> will prompt for the password of the user defined by the
989 I<runas_default> option (defaults to C<@runas_default@>) instead of the
990 password of the invoking user.  This flag is I<off> by default.
991
992 =item set_home
993
994 If enabled and B<sudo> is invoked with the B<-s> option the C<HOME>
995 environment variable will be set to the home directory of the target
996 user (which is root unless the B<-u> option is used).  This effectively
997 makes the B<-s> option imply B<-H>.  Note that C<HOME> is already
998 set when the the I<env_reset> option is enabled, so I<set_home> is
999 only effective for configurations where either I<env_reset> is disabled
1000 or C<HOME> is present in the I<env_keep> list.
1001 This flag is I<off> by default.
1002
1003 =item set_logname
1004
1005 Normally, B<sudo> will set the C<LOGNAME>, C<USER> and C<USERNAME>
1006 environment variables to the name of the target user (usually root
1007 unless the B<-u> option is given).  However, since some programs
1008 (including the RCS revision control system) use C<LOGNAME> to
1009 determine the real identity of the user, it may be desirable to
1010 change this behavior.  This can be done by negating the set_logname
1011 option.  Note that if the I<env_reset> option has not been disabled,
1012 entries in the I<env_keep> list will override the value of
1013 I<set_logname>.  This flag is I<on> by default.
1014
1015 =item set_utmp
1016
1017 When enabled, B<sudo> will create an entry in the utmp (or utmpx)
1018 file when a pseudo-tty is allocated.  A pseudo-tty is allocated by
1019 B<sudo> when the I<log_input>, I<log_output> or I<use_pty> flags
1020 are enabled.  By default, the new entry will be a copy of the user's
1021 existing utmp entry (if any), with the tty, time, type and pid
1022 fields updated.  This flag is I<on> by default.
1023
1024 =item setenv
1025
1026 Allow the user to disable the I<env_reset> option from the command
1027 line via the B<-E> option.  Additionally, environment variables set
1028 via the command line are not subject to the restrictions imposed
1029 by I<env_check>, I<env_delete>, or I<env_keep>.  As such, only
1030 trusted users should be allowed to set variables in this manner.
1031 This flag is I<off> by default.
1032
1033 =item shell_noargs
1034
1035 If set and B<sudo> is invoked with no arguments it acts as if the
1036 B<-s> option had been given.  That is, it runs a shell as root (the
1037 shell is determined by the C<SHELL> environment variable if it is
1038 set, falling back on the shell listed in the invoking user's
1039 /etc/passwd entry if not).  This flag is I<off> by default.
1040
1041 =item stay_setuid
1042
1043 Normally, when B<sudo> executes a command the real and effective
1044 UIDs are set to the target user (root by default).  This option
1045 changes that behavior such that the real UID is left as the invoking
1046 user's UID.  In other words, this makes B<sudo> act as a setuid
1047 wrapper.  This can be useful on systems that disable some potentially
1048 dangerous functionality when a program is run setuid.  This option
1049 is only effective on systems with either the setreuid() or setresuid()
1050 function.  This flag is I<off> by default.
1051
1052 =item targetpw
1053
1054 If set, B<sudo> will prompt for the password of the user specified
1055 by the B<-u> option (defaults to C<root>) instead of the password
1056 of the invoking user.  In addition, the timestamp file name will
1057 include the target user's name.  Note that this flag precludes the
1058 use of a uid not listed in the passwd database as an argument to
1059 the B<-u> option.  This flag is I<off> by default.
1060
1061 =item tty_tickets
1062
1063 If set, users must authenticate on a per-tty basis.  With this flag
1064 enabled, B<sudo> will use a file named for the tty the user is
1065 logged in on in the user's time stamp directory.  If disabled, the
1066 time stamp of the directory is used instead.  This flag is
1067 I<@tty_tickets@> by default.
1068
1069 =item umask_override
1070
1071 If set, B<sudo> will set the umask as specified by I<sudoers> without
1072 modification.  This makes it possible to specify a more permissive
1073 umask in I<sudoers> than the user's own umask and matches historical
1074 behavior.  If I<umask_override> is not set, B<sudo> will set the
1075 umask to be the union of the user's umask and what is specified in
1076 I<sudoers>.  This flag is I<@umask_override@> by default.
1077
1078 =item use_loginclass
1079
1080 If set, B<sudo> will apply the defaults specified for the target user's
1081 login class if one exists.  Only available if B<sudo> is configured with
1082 the --with-logincap option.  This flag is I<off> by default.
1083
1084 =item use_pty
1085
1086 If set, B<sudo> will run the command in a pseudo-pty even if no I/O
1087 logging is being gone.  A malicious program run under B<sudo> could
1088 conceivably fork a background process that retains to the user's
1089 terminal device after the main program has finished executing.  Use
1090 of this option will make that impossible.  This flag is I<off> by default.
1091
1092 =item utmp_runas
1093
1094 If set, B<sudo> will store the name of the runas user when updating
1095 the utmp (or utmpx) file.  By default, B<sudo> stores the name of
1096 the invoking user.  This flag is I<off> by default.
1097
1098 =item visiblepw
1099
1100 By default, B<sudo> will refuse to run if the user must enter a
1101 password but it is not possible to disable echo on the terminal.
1102 If the I<visiblepw> flag is set, B<sudo> will prompt for a password
1103 even when it would be visible on the screen.  This makes it possible
1104 to run things like C<"rsh somehost sudo ls"> since L<rsh(1)> does
1105 not allocate a tty.  This flag is I<off> by default.
1106
1107 =back
1108
1109 B<Integers>:
1110
1111 =over 16
1112
1113 =item closefrom
1114
1115 Before it executes a command, B<sudo> will close all open file
1116 descriptors other than standard input, standard output and standard
1117 error (ie: file descriptors 0-2).  The I<closefrom> option can be used
1118 to specify a different file descriptor at which to start closing.
1119 The default is C<3>.
1120
1121 =item passwd_tries
1122
1123 The number of tries a user gets to enter his/her password before
1124 B<sudo> logs the failure and exits.  The default is C<@passwd_tries@>.
1125
1126 =back
1127
1128 B<Integers that can be used in a boolean context>:
1129
1130 =over 16
1131
1132 =item loglinelen
1133
1134 Number of characters per line for the file log.  This value is used
1135 to decide when to wrap lines for nicer log files.  This has no
1136 effect on the syslog log file, only the file log.  The default is
1137 C<@loglen@> (use 0 or negate the option to disable word wrap).
1138
1139 =item passwd_timeout
1140
1141 Number of minutes before the B<sudo> password prompt times out, or
1142 C<0> for no timeout.  The timeout may include a fractional component
1143 if minute granularity is insufficient, for example C<2.5>.  The
1144 default is C<@password_timeout@>.
1145
1146 =item timestamp_timeout
1147
1148 Number of minutes that can elapse before B<sudo> will ask for a
1149 passwd again.  The timeout may include a fractional component if
1150 minute granularity is insufficient, for example C<2.5>.  The default
1151 is C<@timeout@>.  Set this to C<0> to always prompt for a password.
1152 If set to a value less than C<0> the user's timestamp will never
1153 expire.  This can be used to allow users to create or delete their
1154 own timestamps via C<sudo -v> and C<sudo -k> respectively.
1155
1156 =item umask
1157
1158 Umask to use when running the command.  Negate this option or set
1159 it to 0777 to preserve the user's umask.  The actual umask that is
1160 used will be the union of the user's umask and the value of the
1161 I<umask> option, which defaults to C<@sudo_umask@>.  This guarantees
1162 that B<sudo> never lowers the umask when running a command.  Note
1163 on systems that use PAM, the default PAM configuration may specify
1164 its own umask which will override the value set in I<sudoers>.
1165
1166 =back
1167
1168 B<Strings>:
1169
1170 =over 16
1171
1172 =item badpass_message
1173
1174 Message that is displayed if a user enters an incorrect password.
1175 The default is C<@badpass_message@> unless insults are enabled.
1176
1177 =item editor
1178
1179 A colon (':') separated list of editors allowed to be used with
1180 B<visudo>.  B<visudo> will choose the editor that matches the user's
1181 EDITOR environment variable if possible, or the first editor in the
1182 list that exists and is executable.  The default is C<"@editor@">.
1183
1184 =item iolog_dir
1185
1186 The top-level directory to use when constructing the path name for
1187 the input/output log directory.  Only used if the I<log_input> or
1188 I<log_output> options are enabled or when the C<LOG_INPUT> or
1189 C<LOG_OUTPUT> tags are present for a command.  The session sequence
1190 number, if any, is stored in the directory.
1191 The default is C<"@iolog_dir@">.
1192
1193 The following percent (`C<%>') escape sequences are supported:
1194
1195 =over 4
1196
1197 =item C<%{seq}>
1198
1199 expanded to a monotonically increasing base-36 sequence number, such as 0100A5,
1200 where every two digits are used to form a new directory, e.g. F<01/00/A5>
1201
1202 =item C<%{user}>
1203
1204 expanded to the invoking user's login name
1205
1206 =item C<%{group}>
1207
1208 expanded to the name of the invoking user's real group ID
1209
1210 =item C<%{runas_user}>
1211
1212 expanded to the login name of the user the command will
1213 be run as (e.g. root)
1214
1215 =item C<%{runas_group}>
1216
1217 expanded to the group name of the user the command will
1218 be run as (e.g. wheel)
1219
1220 =item C<%{hostname}>
1221
1222 expanded to the local host name without the domain name
1223
1224 =item C<%{command}>
1225
1226 expanded to the base name of the command being run
1227
1228 =back
1229
1230 In addition, any escape sequences supported by the system's strftime()
1231 function will be expanded.
1232
1233 To include a literal `C<%>' character, the string `C<%%>' should
1234 be used.
1235
1236 =item iolog_file
1237
1238 The path name, relative to I<iolog_dir>, in which to store input/output
1239 logs when the I<log_input> or I<log_output> options are enabled or
1240 when the C<LOG_INPUT> or C<LOG_OUTPUT> tags are present for a command.
1241 Note that I<iolog_file> may contain directory components.
1242 The default is C<"%{seq}">.
1243
1244 See the I<iolog_dir> option above for a list of supported percent
1245 (`C<%>') escape sequences.
1246
1247 In addition to the escape sequences, path names that end in six or
1248 more C<X>s will have the C<X>s replaced with a unique combination
1249 of digits and letters, similar to the mktemp() function.
1250
1251 =item mailsub
1252
1253 Subject of the mail sent to the I<mailto> user. The escape C<%h>
1254 will expand to the host name of the machine.
1255 Default is C<@mailsub@>.
1256
1257 =item noexec_file
1258
1259 This option is deprecated and will be removed in a future release
1260 of B<sudo>.  The path to the noexec file should now be set in the
1261 F<@sysconfdir@/sudo.conf> file.
1262
1263 =item passprompt
1264
1265 The default prompt to use when asking for a password; can be overridden
1266 via the B<-p> option or the C<SUDO_PROMPT> environment variable.
1267 The following percent (`C<%>') escape sequences are supported:
1268
1269 =over 4
1270
1271 =item C<%H>
1272
1273 expanded to the local host name including the domain name
1274 (only if the machine's host name is fully qualified or the I<fqdn>
1275 option is set)
1276
1277 =item C<%h>
1278
1279 expanded to the local host name without the domain name
1280
1281 =item C<%p>
1282
1283 expanded to the user whose password is being asked for (respects the 
1284 I<rootpw>, I<targetpw> and I<runaspw> flags in I<sudoers>)
1285
1286 =item C<%U>
1287
1288 expanded to the login name of the user the command will
1289 be run as (defaults to root)
1290
1291 =item C<%u>
1292
1293 expanded to the invoking user's login name
1294
1295 =item C<%%>
1296
1297 two consecutive C<%> characters are collapsed into a single C<%> character
1298
1299 =back
1300
1301 The default value is C<@passprompt@>.
1302
1303 =item role
1304
1305 The default SELinux role to use when constructing a new security
1306 context to run the command.  The default role may be overridden on
1307 a per-command basis in I<sudoers> or via command line options.
1308 This option is only available whe B<sudo> is built with SELinux support.
1309
1310 =item runas_default
1311
1312 The default user to run commands as if the B<-u> option is not specified
1313 on the command line.  This defaults to C<@runas_default@>.
1314
1315 =item syslog_badpri
1316
1317 Syslog priority to use when user authenticates unsuccessfully.
1318 Defaults to C<@badpri@>.
1319
1320 The following syslog priorities are supported: B<alert>, B<crit>,
1321 B<debug>, B<emerg>, B<err>, B<info>, B<notice>, and B<warning>.
1322
1323 =item syslog_goodpri
1324
1325 Syslog priority to use when user authenticates successfully.
1326 Defaults to C<@goodpri@>.
1327
1328 See L<syslog_badpri> for the list of supported syslog priorities.
1329
1330 =item sudoers_locale
1331
1332 Locale to use when parsing the sudoers file, logging commands, and
1333 sending email.  Note that changing the locale may affect how sudoers
1334 is interpreted.  Defaults to C<"C">.
1335
1336 =item timestampdir
1337
1338 The directory in which B<sudo> stores its timestamp files.
1339 The default is F<@timedir@>.
1340
1341 =item timestampowner
1342
1343 The owner of the timestamp directory and the timestamps stored therein.
1344 The default is C<root>.
1345
1346 =item type
1347
1348 The default SELinux type to use when constructing a new security
1349 context to run the command.  The default type may be overridden on
1350 a per-command basis in I<sudoers> or via command line options.
1351 This option is only available whe B<sudo> is built with SELinux support.
1352
1353 =back
1354
1355 B<Strings that can be used in a boolean context>:
1356
1357 =over 12
1358
1359 =item env_file
1360
1361 The I<env_file> options specifies the fully qualified path to a
1362 file containing variables to be set in the environment of the program
1363 being run.  Entries in this file should either be of the form
1364 C<VARIABLE=value> or C<export VARIABLE=value>.  The value may
1365 optionally be surrounded by single or double quotes.  Variables in
1366 this file are subject to other B<sudo> environment settings such
1367 as I<env_keep> and I<env_check>.
1368
1369 =item exempt_group
1370
1371 Users in this group are exempt from password and PATH requirements.
1372 The group name specified should not include a C<%> prefix.
1373 This is not set by default.
1374
1375 =item group_plugin
1376
1377 A string containing a I<sudoers> group plugin with optional arguments.
1378 This can be used to implement support for the C<nonunix_group>
1379 syntax described earlier.  The string should consist of the plugin
1380 path, either fully-qualified or relative to the F<@prefix@/libexec>
1381 directory, followed by any configuration arguments the plugin
1382 requires.  These arguments (if any) will be passed to the plugin's
1383 initialization function.  If arguments are present, the string must
1384 be enclosed in double quotes (C<">).
1385
1386 For example, given F</etc/sudo-group>, a group file in Unix group
1387 format, the sample group plugin can be used:
1388
1389     Defaults group_plugin="sample_group.so /etc/sudo-group"
1390
1391 For more information see L<sudo_plugin(5)>.
1392
1393 =item lecture
1394
1395 This option controls when a short lecture will be printed along with
1396 the password prompt.  It has the following possible values:
1397
1398 =over 8
1399
1400 =item always
1401
1402 Always lecture the user.
1403
1404 =item never
1405
1406 Never lecture the user.
1407
1408 =item once
1409
1410 Only lecture the user the first time they run B<sudo>.
1411
1412 =back
1413
1414 If no value is specified, a value of I<once> is implied.
1415 Negating the option results in a value of I<never> being used.
1416 The default value is I<@lecture@>.
1417
1418 =item lecture_file
1419
1420 Path to a file containing an alternate B<sudo> lecture that will
1421 be used in place of the standard lecture if the named file exists.
1422 By default, B<sudo> uses a built-in lecture.
1423
1424 =item listpw
1425
1426 This option controls when a password will be required when a
1427 user runs B<sudo> with the B<-l> option.  It has the following possible values:
1428
1429 =over 8
1430
1431 =item all
1432
1433 All the user's I<sudoers> entries for the current host must have
1434 the C<NOPASSWD> flag set to avoid entering a password.
1435
1436 =item always
1437
1438 The user must always enter a password to use the B<-l> option.
1439
1440 =item any
1441
1442 At least one of the user's I<sudoers> entries for the current host
1443 must have the C<NOPASSWD> flag set to avoid entering a password.
1444
1445 =item never
1446
1447 The user need never enter a password to use the B<-l> option.
1448
1449 =back
1450
1451 If no value is specified, a value of I<any> is implied.
1452 Negating the option results in a value of I<never> being used.
1453 The default value is I<any>.
1454
1455 =item logfile
1456
1457 Path to the B<sudo> log file (not the syslog log file).  Setting a path
1458 turns on logging to a file; negating this option turns it off.
1459 By default, B<sudo> logs via syslog.
1460
1461 =item mailerflags
1462
1463 Flags to use when invoking mailer. Defaults to B<-t>.
1464
1465 =item mailerpath
1466
1467 Path to mail program used to send warning mail.
1468 Defaults to the path to sendmail found at configure time.
1469
1470 =item mailfrom
1471
1472 Address to use for the "from" address when sending warning and error
1473 mail.  The address should be enclosed in double quotes (C<">) to
1474 protect against B<sudo> interpreting the C<@> sign.  Defaults to
1475 the name of the user running B<sudo>.
1476
1477 =item mailto
1478
1479 Address to send warning and error mail to.  The address should
1480 be enclosed in double quotes (C<">) to protect against B<sudo>
1481 interpreting the C<@> sign.  Defaults to C<@mailto@>.
1482
1483 =item secure_path
1484
1485 Path used for every command run from B<sudo>.  If you don't trust the
1486 people running B<sudo> to have a sane C<PATH> environment variable you may
1487 want to use this.  Another use is if you want to have the "root path"
1488 be separate from the "user path."  Users in the group specified by the
1489 I<exempt_group> option are not affected by I<secure_path>.
1490 This option is @secure_path@ by default.
1491
1492 =item syslog
1493
1494 Syslog facility if syslog is being used for logging (negate to
1495 disable syslog logging).  Defaults to C<@logfac@>.
1496
1497 The following syslog facilities are supported: B<authpriv> (if your
1498 OS supports it), B<auth>, B<daemon>, B<user>, B<local0>, B<local1>,
1499 B<local2>, B<local3>, B<local4>, B<local5>, B<local6>, and B<local7>.
1500
1501 =item verifypw
1502
1503 This option controls when a password will be required when a user runs
1504 B<sudo> with the B<-v> option.  It has the following possible values:
1505
1506 =over 8
1507
1508 =item all
1509
1510 All the user's I<sudoers> entries for the current host must have
1511 the C<NOPASSWD> flag set to avoid entering a password.
1512
1513 =item always
1514
1515 The user must always enter a password to use the B<-v> option.
1516
1517 =item any
1518
1519 At least one of the user's I<sudoers> entries for the current host
1520 must have the C<NOPASSWD> flag set to avoid entering a password.
1521
1522 =item never
1523
1524 The user need never enter a password to use the B<-v> option.
1525
1526 =back
1527
1528 If no value is specified, a value of I<all> is implied.
1529 Negating the option results in a value of I<never> being used.
1530 The default value is I<all>.
1531
1532 =back
1533
1534 B<Lists that can be used in a boolean context>:
1535
1536 =over 16
1537
1538 =item env_check
1539
1540 Environment variables to be removed from the user's environment if
1541 the variable's value contains C<%> or C</> characters.  This can
1542 be used to guard against printf-style format vulnerabilities in
1543 poorly-written programs.  The argument may be a double-quoted,
1544 space-separated list or a single value without double-quotes.  The
1545 list can be replaced, added to, deleted from, or disabled by using
1546 the C<=>, C<+=>, C<-=>, and C<!> operators respectively.  Regardless
1547 of whether the C<env_reset> option is enabled or disabled, variables
1548 specified by C<env_check> will be preserved in the environment if
1549 they pass the aforementioned check.  The default list of environment
1550 variables to check is displayed when B<sudo> is run by root with
1551 the I<-V> option.
1552
1553 =item env_delete
1554
1555 Environment variables to be removed from the user's environment
1556 when the I<env_reset> option is not in effect.  The argument may
1557 be a double-quoted, space-separated list or a single value without
1558 double-quotes.  The list can be replaced, added to, deleted from,
1559 or disabled by using the C<=>, C<+=>, C<-=>, and C<!> operators
1560 respectively.  The default list of environment variables to remove
1561 is displayed when B<sudo> is run by root with the I<-V> option.
1562 Note that many operating systems will remove potentially dangerous
1563 variables from the environment of any setuid process (such as
1564 B<sudo>).
1565
1566 =item env_keep
1567
1568 Environment variables to be preserved in the user's environment
1569 when the I<env_reset> option is in effect.  This allows fine-grained
1570 control over the environment B<sudo>-spawned processes will receive.
1571 The argument may be a double-quoted, space-separated list or a
1572 single value without double-quotes.  The list can be replaced, added
1573 to, deleted from, or disabled by using the C<=>, C<+=>, C<-=>, and
1574 C<!> operators respectively.  The default list of variables to keep
1575 is displayed when B<sudo> is run by root with the I<-V> option.
1576
1577 =back
1578
1579 =head1 FILES
1580
1581 =over 24
1582
1583 =item F<@sysconfdir@/sudoers>
1584
1585 List of who can run what
1586
1587 =item F</etc/group>
1588
1589 Local groups file
1590
1591 =item F</etc/netgroup>
1592
1593 List of network groups
1594
1595 =item F<@iolog_dir@>
1596
1597 I/O log files
1598
1599 =item F<@timedir@>
1600
1601 Directory containing time stamps for the I<sudoers> security policy
1602
1603 =item F</etc/environment>
1604
1605 Initial environment for B<-i> mode on Linux and AIX
1606
1607 =back
1608
1609 =head1 EXAMPLES
1610
1611 Below are example I<sudoers> entries.  Admittedly, some of
1612 these are a bit contrived.  First, we allow a few environment
1613 variables to pass and then define our I<aliases>:
1614
1615  # Run X applications through sudo; HOME is used to find the
1616  # .Xauthority file.  Note that other programs use HOME to find
1617  # configuration files and this may lead to privilege escalation!
1618  Defaults env_keep += "DISPLAY HOME"
1619
1620  # User alias specification
1621  User_Alias     FULLTIMERS = millert, mikef, dowdy
1622  User_Alias     PARTTIMERS = bostley, jwfox, crawl
1623  User_Alias     WEBMASTERS = will, wendy, wim
1624
1625  # Runas alias specification
1626  Runas_Alias    OP = root, operator
1627  Runas_Alias    DB = oracle, sybase
1628  Runas_Alias    ADMINGRP = adm, oper
1629
1630  # Host alias specification
1631  Host_Alias     SPARC = bigtime, eclipse, moet, anchor :\
1632                 SGI = grolsch, dandelion, black :\
1633                 ALPHA = widget, thalamus, foobar :\
1634                 HPPA = boa, nag, python
1635  Host_Alias     CUNETS = 128.138.0.0/255.255.0.0
1636  Host_Alias     CSNETS = 128.138.243.0, 128.138.204.0/24, 128.138.242.0
1637  Host_Alias     SERVERS = master, mail, www, ns
1638  Host_Alias     CDROM = orion, perseus, hercules
1639
1640  # Cmnd alias specification
1641  Cmnd_Alias     DUMPS = /usr/bin/mt, /usr/sbin/dump, /usr/sbin/rdump,\
1642                         /usr/sbin/restore, /usr/sbin/rrestore
1643  Cmnd_Alias     KILL = /usr/bin/kill
1644  Cmnd_Alias     PRINTING = /usr/sbin/lpc, /usr/bin/lprm
1645  Cmnd_Alias     SHUTDOWN = /usr/sbin/shutdown
1646  Cmnd_Alias     HALT = /usr/sbin/halt
1647  Cmnd_Alias     REBOOT = /usr/sbin/reboot
1648  Cmnd_Alias     SHELLS = /usr/bin/sh, /usr/bin/csh, /usr/bin/ksh, \
1649                          /usr/local/bin/tcsh, /usr/bin/rsh, \
1650                          /usr/local/bin/zsh
1651  Cmnd_Alias     SU = /usr/bin/su
1652  Cmnd_Alias     PAGERS = /usr/bin/more, /usr/bin/pg, /usr/bin/less
1653
1654 Here we override some of the compiled in default values.  We want
1655 B<sudo> to log via L<syslog(3)> using the I<auth> facility in all
1656 cases.  We don't want to subject the full time staff to the B<sudo>
1657 lecture, user B<millert> need not give a password, and we don't
1658 want to reset the C<LOGNAME>, C<USER> or C<USERNAME> environment
1659 variables when running commands as root.  Additionally, on the
1660 machines in the I<SERVERS> C<Host_Alias>, we keep an additional
1661 local log file and make sure we log the year in each log line since
1662 the log entries will be kept around for several years.  Lastly, we
1663 disable shell escapes for the commands in the PAGERS C<Cmnd_Alias>
1664 (F</usr/bin/more>, F</usr/bin/pg> and F</usr/bin/less>).
1665
1666  # Override built-in defaults
1667  Defaults               syslog=auth
1668  Defaults>root          !set_logname
1669  Defaults:FULLTIMERS    !lecture
1670  Defaults:millert       !authenticate
1671  Defaults@SERVERS       log_year, logfile=/var/log/sudo.log
1672  Defaults!PAGERS        noexec
1673
1674 The I<User specification> is the part that actually determines who may
1675 run what.
1676
1677  root           ALL = (ALL) ALL
1678  %wheel         ALL = (ALL) ALL
1679
1680 We let B<root> and any user in group B<wheel> run any command on any
1681 host as any user.
1682
1683  FULLTIMERS     ALL = NOPASSWD: ALL
1684
1685 Full time sysadmins (B<millert>, B<mikef>, and B<dowdy>) may run any
1686 command on any host without authenticating themselves.
1687
1688  PARTTIMERS     ALL = ALL
1689
1690 Part time sysadmins (B<bostley>, B<jwfox>, and B<crawl>) may run any
1691 command on any host but they must authenticate themselves first
1692 (since the entry lacks the C<NOPASSWD> tag).
1693
1694  jack           CSNETS = ALL
1695
1696 The user B<jack> may run any command on the machines in the I<CSNETS> alias
1697 (the networks C<128.138.243.0>, C<128.138.204.0>, and C<128.138.242.0>).
1698 Of those networks, only C<128.138.204.0> has an explicit netmask (in
1699 CIDR notation) indicating it is a class C network.  For the other
1700 networks in I<CSNETS>, the local machine's netmask will be used
1701 during matching.
1702
1703  lisa           CUNETS = ALL
1704
1705 The user B<lisa> may run any command on any host in the I<CUNETS> alias
1706 (the class B network C<128.138.0.0>).
1707
1708  operator       ALL = DUMPS, KILL, SHUTDOWN, HALT, REBOOT, PRINTING,\
1709                 sudoedit /etc/printcap, /usr/oper/bin/
1710
1711 The B<operator> user may run commands limited to simple maintenance.
1712 Here, those are commands related to backups, killing processes, the
1713 printing system, shutting down the system, and any commands in the
1714 directory F</usr/oper/bin/>.
1715
1716  joe            ALL = /usr/bin/su operator
1717
1718 The user B<joe> may only L<su(1)> to operator.
1719
1720  pete           HPPA = /usr/bin/passwd [A-Za-z]*, !/usr/bin/passwd root
1721
1722  %opers         ALL = (: ADMINGRP) /usr/sbin/
1723
1724 Users in the B<opers> group may run commands in F</usr/sbin/> as themselves
1725 with any group in the I<ADMINGRP> C<Runas_Alias> (the B<adm> and B<oper>
1726 groups).
1727
1728 The user B<pete> is allowed to change anyone's password except for
1729 root on the I<HPPA> machines.  Note that this assumes L<passwd(1)>
1730 does not take multiple user names on the command line.
1731
1732  bob            SPARC = (OP) ALL : SGI = (OP) ALL
1733
1734 The user B<bob> may run anything on the I<SPARC> and I<SGI> machines
1735 as any user listed in the I<OP> C<Runas_Alias> (B<root> and B<operator>).
1736
1737  jim            +biglab = ALL
1738
1739 The user B<jim> may run any command on machines in the I<biglab> netgroup.
1740 B<sudo> knows that "biglab" is a netgroup due to the '+' prefix.
1741
1742  +secretaries   ALL = PRINTING, /usr/bin/adduser, /usr/bin/rmuser
1743
1744 Users in the B<secretaries> netgroup need to help manage the printers
1745 as well as add and remove users, so they are allowed to run those
1746 commands on all machines.
1747
1748  fred           ALL = (DB) NOPASSWD: ALL
1749
1750 The user B<fred> can run commands as any user in the I<DB> C<Runas_Alias>
1751 (B<oracle> or B<sybase>) without giving a password.
1752
1753  john           ALPHA = /usr/bin/su [!-]*, !/usr/bin/su *root*
1754
1755 On the I<ALPHA> machines, user B<john> may su to anyone except root
1756 but he is not allowed to specify any options to the L<su(1)> command.
1757
1758  jen            ALL, !SERVERS = ALL
1759
1760 The user B<jen> may run any command on any machine except for those
1761 in the I<SERVERS> C<Host_Alias> (master, mail, www and ns).
1762
1763  jill           SERVERS = /usr/bin/, !SU, !SHELLS
1764
1765 For any machine in the I<SERVERS> C<Host_Alias>, B<jill> may run
1766 any commands in the directory F</usr/bin/> except for those commands
1767 belonging to the I<SU> and I<SHELLS> C<Cmnd_Aliases>.
1768
1769  steve          CSNETS = (operator) /usr/local/op_commands/
1770
1771 The user B<steve> may run any command in the directory /usr/local/op_commands/
1772 but only as user operator.
1773
1774  matt           valkyrie = KILL
1775
1776 On his personal workstation, valkyrie, B<matt> needs to be able to
1777 kill hung processes.
1778
1779  WEBMASTERS     www = (www) ALL, (root) /usr/bin/su www
1780
1781 On the host www, any user in the I<WEBMASTERS> C<User_Alias> (will,
1782 wendy, and wim), may run any command as user www (which owns the
1783 web pages) or simply L<su(1)> to www.
1784
1785  ALL            CDROM = NOPASSWD: /sbin/umount /CDROM,\
1786                 /sbin/mount -o nosuid\,nodev /dev/cd0a /CDROM
1787
1788 Any user may mount or unmount a CD-ROM on the machines in the CDROM
1789 C<Host_Alias> (orion, perseus, hercules) without entering a password.
1790 This is a bit tedious for users to type, so it is a prime candidate
1791 for encapsulating in a shell script.
1792
1793 =head1 SECURITY NOTES
1794
1795 It is generally not effective to "subtract" commands from C<ALL>
1796 using the '!' operator.  A user can trivially circumvent this
1797 by copying the desired command to a different name and then
1798 executing that.  For example:
1799
1800     bill        ALL = ALL, !SU, !SHELLS
1801
1802 Doesn't really prevent B<bill> from running the commands listed in
1803 I<SU> or I<SHELLS> since he can simply copy those commands to a
1804 different name, or use a shell escape from an editor or other
1805 program.  Therefore, these kind of restrictions should be considered
1806 advisory at best (and reinforced by policy).
1807
1808 Furthermore, if the I<fast_glob> option is in use, it is not possible
1809 to reliably negate commands where the path name includes globbing
1810 (aka wildcard) characters.  This is because the C library's
1811 L<fnmatch(3)> function cannot resolve relative paths.  While this
1812 is typically only an inconvenience for rules that grant privileges,
1813 it can result in a security issue for rules that subtract or revoke
1814 privileges.
1815
1816 For example, given the following I<sudoers> entry:
1817
1818  john   ALL = /usr/bin/passwd [a-zA-Z0-9]*, /usr/bin/chsh [a-zA-Z0-9]*,
1819       /usr/bin/chfn [a-zA-Z0-9]*, !/usr/bin/* root
1820
1821 User B<john> can still run C</usr/bin/passwd root> if I<fast_glob> is
1822 enabled by changing to F</usr/bin> and running C<./passwd root> instead.
1823
1824 =head1 PREVENTING SHELL ESCAPES
1825
1826 Once B<sudo> executes a program, that program is free to do whatever
1827 it pleases, including run other programs.  This can be a security
1828 issue since it is not uncommon for a program to allow shell escapes,
1829 which lets a user bypass B<sudo>'s access control and logging.
1830 Common programs that permit shell escapes include shells (obviously),
1831 editors, paginators, mail and terminal programs.
1832
1833 There are two basic approaches to this problem:
1834
1835 =over 10
1836
1837 =item restrict
1838
1839 Avoid giving users access to commands that allow the user to run
1840 arbitrary commands.  Many editors have a restricted mode where shell
1841 escapes are disabled, though B<sudoedit> is a better solution to
1842 running editors via B<sudo>.  Due to the large number of programs that
1843 offer shell escapes, restricting users to the set of programs that
1844 do not is often unworkable.
1845
1846 =item noexec
1847
1848 Many systems that support shared libraries have the ability to
1849 override default library functions by pointing an environment
1850 variable (usually C<LD_PRELOAD>) to an alternate shared library.
1851 On such systems, B<sudo>'s I<noexec> functionality can be used to
1852 prevent a program run by B<sudo> from executing any other programs.
1853 Note, however, that this applies only to native dynamically-linked
1854 executables.  Statically-linked executables and foreign executables
1855 running under binary emulation are not affected.
1856
1857 The I<noexec> feature is known to work on SunOS, Solaris, *BSD,
1858 Linux, IRIX, Tru64 UNIX, MacOS X, HP-UX 11.x and AIX 5.3 and above.
1859 It should be supported on most operating systems that support the
1860 C<LD_PRELOAD> environment variable.  Check your operating system's
1861 manual pages for the dynamic linker (usually ld.so, ld.so.1, dyld,
1862 dld.sl, rld, or loader) to see if C<LD_PRELOAD> is supported.
1863
1864 On Solaris 10 and higher, I<noexec> uses Solaris privileges instead
1865 of the C<LD_PRELOAD> environment variable.
1866
1867 To enable I<noexec> for a command, use the C<NOEXEC> tag as documented
1868 in the User Specification section above.  Here is that example again:
1869
1870  aaron  shanty = NOEXEC: /usr/bin/more, /usr/bin/vi
1871
1872 This allows user B<aaron> to run F</usr/bin/more> and F</usr/bin/vi>
1873 with I<noexec> enabled.  This will prevent those two commands from
1874 executing other commands (such as a shell).  If you are unsure
1875 whether or not your system is capable of supporting I<noexec> you
1876 can always just try it out and check whether shell escapes work
1877 when I<noexec> is enabled.
1878
1879 =back
1880
1881 Note that restricting shell escapes is not a panacea.  Programs
1882 running as root are still capable of many potentially hazardous
1883 operations (such as changing or overwriting files) that could lead
1884 to unintended privilege escalation.  In the specific case of an
1885 editor, a safer approach is to give the user permission to run
1886 B<sudoedit>.
1887
1888 =head1 SECURITY NOTES
1889
1890 I<sudoers> will check the ownership of its time stamp directory
1891 (F<@timedir@> by default) and ignore the directory's contents if
1892 it is not owned by root or if it is writable by a user other than
1893 root.  On systems that allow non-root users to give away files via
1894 L<chown(2)>, if the time stamp directory is located in a world-writable
1895 directory (e.g., F</tmp>), it is possible for a user to create the
1896 time stamp directory before B<sudo> is run.  However, because
1897 I<sudoers> checks the ownership and mode of the directory and its
1898 contents, the only damage that can be done is to "hide" files by
1899 putting them in the time stamp dir.  This is unlikely to happen
1900 since once the time stamp dir is owned by root and inaccessible by
1901 any other user, the user placing files there would be unable to get
1902 them back out.
1903
1904 I<sudoers> will not honor time stamps set far in the future.  Time
1905 stamps with a date greater than current_time + 2 * C<TIMEOUT> will
1906 be ignored and sudo will log and complain.  This is done to keep a
1907 user from creating his/her own time stamp with a bogus date on
1908 systems that allow users to give away files if the time stamp directory
1909 is located in a world-writable directory.
1910
1911 On systems where the boot time is available, I<sudoers> will ignore
1912 time stamps that date from before the machine booted.
1913
1914 Since time stamp files live in the file system, they can outlive a
1915 user's login session.  As a result, a user may be able to login,
1916 run a command with B<sudo> after authenticating, logout, login
1917 again, and run B<sudo> without authenticating so long as the time
1918 stamp file's modification time is within C<@timeout@> minutes (or
1919 whatever the timeout is set to in I<sudoers>).  When the I<tty_tickets>
1920 option is enabled, the time stamp has per-tty granularity but still
1921 may outlive the user's session.  On Linux systems where the devpts
1922 filesystem is used, Solaris systems with the devices filesystem,
1923 as well as other systems that utilize a devfs filesystem that
1924 monotonically increase the inode number of devices as they are
1925 created (such as Mac OS X), I<sudoers> is able to determine when a
1926 tty-based time stamp file is stale and will ignore it.  Administrators
1927 should not rely on this feature as it is not universally available.
1928
1929 If users have sudo C<ALL> there is nothing to prevent them from
1930 creating their own program that gives them a root shell (or making
1931 their own copy of a shell) regardless of any '!' elements in the
1932 user specification.
1933
1934 =head1 SEE ALSO
1935
1936 L<rsh(1)>, L<su(1)>, L<fnmatch(3)>, L<glob(3)>, L<mktemp(3)>, L<strftime(3)>,
1937 L<sudoers.ldap(5)>, L<sudo_plugin(8)>, L<sudo(8)>, L<visudo(8)>
1938
1939 =head1 CAVEATS
1940
1941 The I<sudoers> file should B<always> be edited by the B<visudo>
1942 command which locks the file and does grammatical checking. It is
1943 imperative that I<sudoers> be free of syntax errors since B<sudo>
1944 will not run with a syntactically incorrect I<sudoers> file.
1945
1946 When using netgroups of machines (as opposed to users), if you
1947 store fully qualified host name in the netgroup (as is usually the
1948 case), you either need to have the machine's host name be fully qualified
1949 as returned by the C<hostname> command or use the I<fqdn> option in
1950 I<sudoers>.
1951
1952 =head1 BUGS
1953
1954 If you feel you have found a bug in B<sudo>, please submit a bug report
1955 at http://www.sudo.ws/sudo/bugs/
1956
1957 =head1 SUPPORT
1958
1959 Limited free support is available via the sudo-users mailing list,
1960 see http://www.sudo.ws/mailman/listinfo/sudo-users to subscribe or
1961 search the archives.
1962
1963 =head1 DISCLAIMER
1964
1965 B<sudo> is provided ``AS IS'' and any express or implied warranties,
1966 including, but not limited to, the implied warranties of merchantability
1967 and fitness for a particular purpose are disclaimed.  See the LICENSE
1968 file distributed with B<sudo> or http://www.sudo.ws/sudo/license.html
1969 for complete details.