Imported Upstream version 1.8.6p8
[debian/sudo] / doc / sudoers.mdoc.in
1 .\"
2 .\" Copyright (c) 1994-1996, 1998-2005, 2007-2012
3 .\" Todd C. Miller <Todd.Miller@courtesan.com>
4 .\"
5 .\" Permission to use, copy, modify, and distribute this software for any
6 .\" purpose with or without fee is hereby granted, provided that the above
7 .\" copyright notice and this permission notice appear in all copies.
8 .\"
9 .\" THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
10 .\" WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
11 .\" MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
12 .\" ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
13 .\" WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
14 .\" ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
15 .\" OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
16 .\" ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
17 .\"
18 .\" Sponsored in part by the Defense Advanced Research Projects
19 .\" Agency (DARPA) and Air Force Research Laboratory, Air Force
20 .\" Materiel Command, USAF, under agreement number F39502-99-1-0512.
21 .\"
22 .Dd July 16, 2012
23 .Dt SUDOERS @mansectform@
24 .Os Sudo @PACKAGE_VERSION@
25 .Sh NAME
26 .Nm sudoers
27 .Nd default sudo security policy module
28 .Sh DESCRIPTION
29 The
30 .Em sudoers
31 policy module determines a user's
32 .Nm sudo
33 privileges.
34 It is the default
35 .Nm sudo
36 policy plugin.
37 The policy is driven by
38 the
39 .Pa @sysconfdir@/sudoers
40 file or, optionally in LDAP.
41 The policy format is described in detail in the
42 .Sx SUDOERS FILE FORMAT
43 section.
44 For information on storing
45 .Em sudoers
46 policy information
47 in LDAP, please see
48 .Xr sudoers.ldap @mansectform@ .
49 .Ss Authentication and logging
50 The
51 .Em sudoers
52 security policy requires that most users authenticate
53 themselves before they can use
54 .Nm sudo .
55 A password is not required
56 if the invoking user is root, if the target user is the same as the
57 invoking user, or if the policy has disabled authentication for the
58 user or command.
59 Unlike
60 .Xr su 1 ,
61 when
62 .Em sudoers
63 requires
64 authentication, it validates the invoking user's credentials, not
65 the target user's (or root's) credentials.
66 This can be changed via
67 the
68 .Em rootpw ,
69 .Em targetpw
70 and
71 .Em runaspw
72 flags, described later.
73 .Pp
74 If a user who is not listed in the policy tries to run a command
75 via
76 .Nm sudo ,
77 mail is sent to the proper authorities.
78 The address
79 used for such mail is configurable via the
80 .Em mailto
81 Defaults entry
82 (described later) and defaults to
83 .Li @mailto@ .
84 .Pp
85 Note that mail will not be sent if an unauthorized user tries to
86 run
87 .Nm sudo
88 with the
89 .Fl l
90 or
91 .Fl v
92 option.
93 This allows users to
94 determine for themselves whether or not they are allowed to use
95 .Nm sudo .
96 .Pp
97 If
98 .Nm sudo
99 is run by root and the
100 .Ev SUDO_USER
101 environment variable
102 is set, the
103 .Em sudoers
104 policy will use this value to determine who
105 the actual user is.
106 This can be used by a user to log commands
107 through sudo even when a root shell has been invoked.
108 It also
109 allows the
110 .Fl e
111 option to remain useful even when invoked via a
112 sudo-run script or program.
113 Note, however, that the
114 .Em sudoers
115 lookup is still done for root, not the user specified by
116 .Ev SUDO_USER .
117 .Pp
118 .Em sudoers
119 uses time stamp files for credential caching.
120 Once a
121 user has been authenticated, the time stamp is updated and the user
122 may then use sudo without a password for a short period of time
123 .Po
124 .Li @timeout@
125 minutes unless overridden by the
126 .Em timeout
127 option
128 .Pc .
129 By default,
130 .Em sudoers
131 uses a tty-based time stamp which means that
132 there is a separate time stamp for each of a user's login sessions.
133 The
134 .Em tty_tickets
135 option can be disabled to force the use of a
136 single time stamp for all of a user's sessions.
137 .Pp
138 .Em sudoers
139 can log both successful and unsuccessful attempts (as well
140 as errors) to
141 .Xr syslog 3 ,
142 a log file, or both.
143 By default,
144 .Em sudoers
145 will log via
146 .Xr syslog 3
147 but this is changeable via the
148 .Em syslog
149 and
150 .Em logfile
151 Defaults settings.
152 .Pp
153 .Em sudoers
154 also supports logging a command's input and output
155 streams.
156 I/O logging is not on by default but can be enabled using
157 the
158 .Em log_input
159 and
160 .Em log_output
161 Defaults flags as well as the
162 .Li LOG_INPUT
163 and
164 .Li LOG_OUTPUT
165 command tags.
166 .Ss Command environment
167 Since environment variables can influence program behavior,
168 .Em sudoers
169 provides a means to restrict which variables from the user's
170 environment are inherited by the command to be run.
171 There are two
172 distinct ways
173 .Em sudoers
174 can deal with environment variables.
175 .Pp
176 By default, the
177 .Em env_reset
178 option is enabled.
179 This causes commands
180 to be executed with a new, minimal environment.
181 On AIX (and Linux
182 systems without PAM), the environment is initialized with the
183 contents of the
184 .Pa /etc/environment
185 file.
186 On BSD systems, if the
187 .Em use_loginclass
188 option is enabled, the environment is initialized
189 based on the
190 .Em path
191 and
192 .Em setenv
193 settings in
194 .Pa /etc/login.conf .
195 The new environment contains the
196 .Ev TERM ,
197 .Ev PATH ,
198 .Ev HOME ,
199 .Ev MAIL ,
200 .Ev SHELL ,
201 .Ev LOGNAME ,
202 .Ev USER ,
203 .Ev USERNAME
204 and
205 .Ev SUDO_*
206 variables
207 in addition to variables from the invoking process permitted by the
208 .Em env_check
209 and
210 .Em env_keep
211 options.
212 This is effectively a whitelist
213 for environment variables.
214 .Pp
215 If, however, the
216 .Em env_reset
217 option is disabled, any variables not
218 explicitly denied by the
219 .Em env_check
220 and
221 .Em env_delete
222 options are
223 inherited from the invoking process.
224 In this case,
225 .Em env_check
226 and
227 .Em env_delete
228 behave like a blacklist.
229 Since it is not possible
230 to blacklist all potentially dangerous environment variables, use
231 of the default
232 .Em env_reset
233 behavior is encouraged.
234 .Pp
235 In all cases, environment variables with a value beginning with
236 .Li ()
237 are removed as they could be interpreted as
238 .Sy bash
239 functions.
240 The list of environment variables that
241 .Nm sudo
242 allows or denies is
243 contained in the output of
244 .Dq Li sudo -V
245 when run as root.
246 .Pp
247 Note that the dynamic linker on most operating systems will remove
248 variables that can control dynamic linking from the environment of
249 setuid executables, including
250 .Nm sudo .
251 Depending on the operating
252 system this may include
253 .Ev _RLD* ,
254 .Ev DYLD_* ,
255 .Ev LD_* ,
256 .Ev LDR_* ,
257 .Ev LIBPATH ,
258 .Ev SHLIB_PATH ,
259 and others.
260 These type of variables are
261 removed from the environment before
262 .Nm sudo
263 even begins execution
264 and, as such, it is not possible for
265 .Nm sudo
266 to preserve them.
267 .Pp
268 As a special case, if
269 .Nm sudo Ns No 's
270 .Fl i
271 option (initial login) is
272 specified,
273 .Em sudoers
274 will initialize the environment regardless
275 of the value of
276 .Em env_reset .
277 The
278 .Ev DISPLAY ,
279 .Ev PATH
280 and
281 .Ev TERM
282 variables remain unchanged;
283 .Ev HOME ,
284 .Ev MAIL ,
285 .Ev SHELL ,
286 .Ev USER ,
287 and
288 .Ev LOGNAME
289 are set based on the target user.
290 On AIX (and Linux
291 systems without PAM), the contents of
292 .Pa /etc/environment
293 are also
294 included.
295 On BSD systems, if the
296 .Em use_loginclass
297 option is
298 enabled, the
299 .Em path
300 and
301 .Em setenv
302 variables in
303 .Pa /etc/login.conf
304 are also applied.
305 All other environment variables are removed.
306 .Pp
307 Finally, if the
308 .Em env_file
309 option is defined, any variables present
310 in that file will be set to their specified values as long as they
311 would not conflict with an existing environment variable.
312 .Sh SUDOERS FILE FORMAT
313 The
314 .Em sudoers
315 file is composed of two types of entries: aliases
316 (basically variables) and user specifications (which specify who
317 may run what).
318 .Pp
319 When multiple entries match for a user, they are applied in order.
320 Where there are multiple matches, the last match is used (which is
321 not necessarily the most specific match).
322 .Pp
323 The
324 .Em sudoers
325 grammar will be described below in Extended Backus-Naur
326 Form (EBNF).
327 Don't despair if you are unfamiliar with EBNF; it is fairly simple,
328 and the definitions below are annotated.
329 .Ss Quick guide to EBNF
330 EBNF is a concise and exact way of describing the grammar of a language.
331 Each EBNF definition is made up of
332 .Em production rules .
333 E.g.,
334 .Pp
335 .Li  symbol ::= definition | alternate1 | alternate2 ...
336 .Pp
337 Each
338 .Em production rule
339 references others and thus makes up a
340 grammar for the language.
341 EBNF also contains the following
342 operators, which many readers will recognize from regular
343 expressions.
344 Do not, however, confuse them with
345 .Dq wildcard
346 characters, which have different meanings.
347 .Bl -tag -width 4n
348 .It Li \&?
349 Means that the preceding symbol (or group of symbols) is optional.
350 That is, it may appear once or not at all.
351 .It Li *
352 Means that the preceding symbol (or group of symbols) may appear
353 zero or more times.
354 .It Li +
355 Means that the preceding symbol (or group of symbols) may appear
356 one or more times.
357 .El
358 .Pp
359 Parentheses may be used to group symbols together.
360 For clarity,
361 we will use single quotes
362 .Pq ''
363 to designate what is a verbatim character string (as opposed to a symbol name).
364 .Ss Aliases
365 There are four kinds of aliases:
366 .Li User_Alias ,
367 .Li Runas_Alias ,
368 .Li Host_Alias
369 and
370 .Li Cmnd_Alias .
371 .Bd -literal
372 Alias ::= 'User_Alias'  User_Alias (':' User_Alias)* |
373           'Runas_Alias' Runas_Alias (':' Runas_Alias)* |
374           'Host_Alias'  Host_Alias (':' Host_Alias)* |
375           'Cmnd_Alias'  Cmnd_Alias (':' Cmnd_Alias)*
376
377 User_Alias ::= NAME '=' User_List
378
379 Runas_Alias ::= NAME '=' Runas_List
380
381 Host_Alias ::= NAME '=' Host_List
382
383 Cmnd_Alias ::= NAME '=' Cmnd_List
384
385 NAME ::= [A-Z]([A-Z][0-9]_)*
386 .Ed
387 .Pp
388 Each
389 .Em alias
390 definition is of the form
391 .Bd -literal
392 Alias_Type NAME = item1, item2, ...
393 .Ed
394 .Pp
395 where
396 .Em Alias_Type
397 is one of
398 .Li User_Alias ,
399 .Li Runas_Alias ,
400 .Li Host_Alias ,
401 or
402 .Li Cmnd_Alias .
403 A
404 .Li NAME
405 is a string of uppercase letters, numbers,
406 and underscore characters
407 .Pq Ql _ .
408 A
409 .Li NAME
410 .Sy must
411 start with an
412 uppercase letter.
413 It is possible to put several alias definitions
414 of the same type on a single line, joined by a colon
415 .Pq Ql :\& .
416 E.g.,
417 .Bd -literal
418 Alias_Type NAME = item1, item2, item3 : NAME = item4, item5
419 .Ed
420 .Pp
421 The definitions of what constitutes a valid
422 .Em alias
423 member follow.
424 .Bd -literal
425 User_List ::= User |
426               User ',' User_List
427
428 User ::= '!'* user name |
429          '!'* #uid |
430          '!'* %group |
431          '!'* %#gid |
432          '!'* +netgroup |
433          '!'* %:nonunix_group |
434          '!'* %:#nonunix_gid |
435          '!'* User_Alias
436 .Ed
437 .Pp
438 A
439 .Li User_List
440 is made up of one or more user names, user ids
441 (prefixed with
442 .Ql # ) ,
443 system group names and ids (prefixed with
444 .Ql %
445 and
446 .Ql %#
447 respectively), netgroups (prefixed with
448 .Ql + ) ,
449 non-Unix group names and IDs (prefixed with
450 .Ql %:
451 and
452 .Ql %:#
453 respectively) and
454 .Li User_Alias Ns No es.
455 Each list item may be prefixed with zero or more
456 .Ql \&!
457 operators.
458 An odd number of
459 .Ql \&!
460 operators negate the value of
461 the item; an even number just cancel each other out.
462 .Pp
463 A
464 .Li user name ,
465 .Li uid ,
466 .Li group ,
467 .Li gid ,
468 .Li netgroup ,
469 .Li nonunix_group
470 or
471 .Li nonunix_gid
472 may be enclosed in double quotes to avoid the
473 need for escaping special characters.
474 Alternately, special characters
475 may be specified in escaped hex mode, e.g.\& \ex20 for space.
476 When
477 using double quotes, any prefix characters must be included inside
478 the quotes.
479 .Pp
480 The actual
481 .Li nonunix_group
482 and
483 .Li nonunix_gid
484 syntax depends on
485 the underlying group provider plugin (see the
486 .Em group_plugin
487 description below).
488 For instance, the QAS AD plugin supports the following formats:
489 .Bl -bullet -width 4n
490 .It
491 Group in the same domain: "%:Group Name"
492 .It
493 Group in any domain: "%:Group Name@FULLY.QUALIFIED.DOMAIN"
494 .It
495 Group SID: "%:S-1-2-34-5678901234-5678901234-5678901234-567"
496 .El
497 .Pp
498 Note that quotes around group names are optional.
499 Unquoted strings must use a backslash
500 .Pq Ql \e
501 to escape spaces and special characters.
502 See
503 .Sx Other special characters and reserved words
504 for a list of
505 characters that need to be escaped.
506 .Bd -literal
507 Runas_List ::= Runas_Member |
508                Runas_Member ',' Runas_List
509
510 Runas_Member ::= '!'* user name |
511                  '!'* #uid |
512                  '!'* %group |
513                  '!'* %#gid |
514                  '!'* %:nonunix_group |
515                  '!'* %:#nonunix_gid |
516                  '!'* +netgroup |
517                  '!'* Runas_Alias
518 .Ed
519 .Pp
520 A
521 .Li Runas_List
522 is similar to a
523 .Li User_List
524 except that instead
525 of
526 .Li User_Alias Ns No es
527 it can contain
528 .Li Runas_Alias Ns No es .
529 Note that
530 user names and groups are matched as strings.
531 In other words, two
532 users (groups) with the same uid (gid) are considered to be distinct.
533 If you wish to match all user names with the same uid (e.g.\&
534 root and toor), you can use a uid instead (#0 in the example given).
535 .Bd -literal
536 Host_List ::= Host |
537               Host ',' Host_List
538
539 Host ::= '!'* host name |
540          '!'* ip_addr |
541          '!'* network(/netmask)? |
542          '!'* +netgroup |
543          '!'* Host_Alias
544 .Ed
545 .Pp
546 A
547 .Li Host_List
548 is made up of one or more host names, IP addresses,
549 network numbers, netgroups (prefixed with
550 .Ql + )
551 and other aliases.
552 Again, the value of an item may be negated with the
553 .Ql \&!
554 operator.
555 If you do not specify a netmask along with the network number,
556 .Nm sudo
557 will query each of the local host's network interfaces and,
558 if the network number corresponds to one of the hosts's network
559 interfaces, the corresponding netmask will be used.
560 The netmask
561 may be specified either in standard IP address notation
562 (e.g.\& 255.255.255.0 or ffff:ffff:ffff:ffff::),
563 or CIDR notation (number of bits, e.g.\& 24 or 64).
564 A host name may include shell-style wildcards (see the
565 .Sx Wildcards
566 section below),
567 but unless the
568 .Li host name
569 command on your machine returns the fully
570 qualified host name, you'll need to use the
571 .Em fqdn
572 option for wildcards to be useful.
573 Note that
574 .Nm sudo
575 only inspects actual network interfaces; this means that IP address
576 127.0.0.1 (localhost) will never match.
577 Also, the host name
578 .Dq localhost
579 will only match if that is the actual host name, which is usually
580 only the case for non-networked systems.
581 .Bd -literal
582 Cmnd_List ::= Cmnd |
583               Cmnd ',' Cmnd_List
584
585 command name ::= file name |
586                  file name args |
587                  file name '""'
588
589 Cmnd ::= '!'* command name |
590          '!'* directory |
591          '!'* "sudoedit" |
592          '!'* Cmnd_Alias
593 .Ed
594 .Pp
595 A
596 .Li Cmnd_List
597 is a list of one or more command names, directories, and other aliases.
598 A command name is a fully qualified file name which may include
599 shell-style wildcards (see the
600 .Sx Wildcards
601 section below).
602 A simple file name allows the user to run the command with any
603 arguments he/she wishes.
604 However, you may also specify command line arguments (including
605 wildcards).
606 Alternately, you can specify
607 .Li \&""
608 to indicate that the command
609 may only be run
610 .Sy without
611 command line arguments.
612 A directory is a
613 fully qualified path name ending in a
614 .Ql / .
615 When you specify a directory in a
616 .Li Cmnd_List ,
617 the user will be able to run any file within that directory
618 (but not in any sub-directories therein).
619 .Pp
620 If a
621 .Li Cmnd
622 has associated command line arguments, then the arguments
623 in the
624 .Li Cmnd
625 must match exactly those given by the user on the command line
626 (or match the wildcards if there are any).
627 Note that the following characters must be escaped with a
628 .Ql \e
629 if they are used in command arguments:
630 .Ql ,\& ,
631 .Ql :\& ,
632 .Ql =\& ,
633 .Ql \e .
634 The special command
635 .Dq Li sudoedit
636 is used to permit a user to run
637 .Nm sudo
638 with the
639 .Fl e
640 option (or as
641 .Nm sudoedit ) .
642 It may take command line arguments just as a normal command does.
643 .Ss Defaults
644 Certain configuration options may be changed from their default
645 values at run-time via one or more
646 .Li Default_Entry
647 lines.
648 These may affect all users on any host, all users on a specific host, a
649 specific user, a specific command, or commands being run as a specific user.
650 Note that per-command entries may not include command line arguments.
651 If you need to specify arguments, define a
652 .Li Cmnd_Alias
653 and reference
654 that instead.
655 .Bd -literal
656 Default_Type ::= 'Defaults' |
657                  'Defaults' '@' Host_List |
658                  'Defaults' ':' User_List |
659                  'Defaults' '!' Cmnd_List |
660                  'Defaults' '>' Runas_List
661
662 Default_Entry ::= Default_Type Parameter_List
663
664 Parameter_List ::= Parameter |
665                    Parameter ',' Parameter_List
666
667 Parameter ::= Parameter '=' Value |
668               Parameter '+=' Value |
669               Parameter '-=' Value |
670               '!'* Parameter
671 .Ed
672 .Pp
673 Parameters may be
674 .Sy flags ,
675 .Sy integer
676 values,
677 .Sy strings ,
678 or
679 .Sy lists .
680 Flags are implicitly boolean and can be turned off via the
681 .Ql \&!
682 operator.
683 Some integer, string and list parameters may also be
684 used in a boolean context to disable them.
685 Values may be enclosed
686 in double quotes
687 .Pq \&""
688 when they contain multiple words.
689 Special characters may be escaped with a backslash
690 .Pq Ql \e .
691 .Pp
692 Lists have two additional assignment operators,
693 .Li +=
694 and
695 .Li -= .
696 These operators are used to add to and delete from a list respectively.
697 It is not an error to use the
698 .Li -=
699 operator to remove an element
700 that does not exist in a list.
701 .Pp
702 Defaults entries are parsed in the following order: generic, host
703 and user Defaults first, then runas Defaults and finally command
704 defaults.
705 .Pp
706 See
707 .Sx SUDOERS OPTIONS
708 for a list of supported Defaults parameters.
709 .Ss User specification
710 .Bd -literal
711 User_Spec ::= User_List Host_List '=' Cmnd_Spec_List \e
712               (':' Host_List '=' Cmnd_Spec_List)*
713
714 Cmnd_Spec_List ::= Cmnd_Spec |
715                    Cmnd_Spec ',' Cmnd_Spec_List
716
717 Cmnd_Spec ::= Runas_Spec? SELinux_Spec? Solaris_Priv_Spec? Tag_Spec* Cmnd
718
719 Runas_Spec ::= '(' Runas_List? (':' Runas_List)? ')'
720
721 SELinux_Spec ::= ('ROLE=role' | 'TYPE=type')
722
723 Solaris_Priv_Spec ::= ('PRIVS=privset' | 'LIMITPRIVS=privset')
724
725 Tag_Spec ::= ('NOPASSWD:' | 'PASSWD:' | 'NOEXEC:' | 'EXEC:' |
726               'SETENV:' | 'NOSETENV:' | 'LOG_INPUT:' | 'NOLOG_INPUT:' |
727               'LOG_OUTPUT:' | 'NOLOG_OUTPUT:')
728 .Ed
729 .Pp
730 A
731 .Sy user specification
732 determines which commands a user may run
733 (and as what user) on specified hosts.
734 By default, commands are
735 run as
736 .Sy root ,
737 but this can be changed on a per-command basis.
738 .Pp
739 The basic structure of a user specification is
740 .Dq who where = (as_whom) what .
741 Let's break that down into its constituent parts:
742 .Ss Runas_Spec
743 A
744 .Li Runas_Spec
745 determines the user and/or the group that a command
746 may be run as.
747 A fully-specified
748 .Li Runas_Spec
749 consists of two
750 .Li Runas_List Ns No s
751 (as defined above) separated by a colon
752 .Pq Ql :\&
753 and enclosed in a set of parentheses.
754 The first
755 .Li Runas_List
756 indicates
757 which users the command may be run as via
758 .Nm sudo Ns No 's
759 .Fl u
760 option.
761 The second defines a list of groups that can be specified via
762 .Nm sudo Ns No 's
763 .Fl g
764 option.
765 If both
766 .Li Runas_List Ns No s
767 are specified, the command may be run with any combination of users
768 and groups listed in their respective
769 .Li Runas_List Ns No s.
770 If only the first is specified, the command may be run as any user
771 in the list but no
772 .Fl g
773 option
774 may be specified.
775 If the first
776 .Li Runas_List
777 is empty but the
778 second is specified, the command may be run as the invoking user
779 with the group set to any listed in the
780 .Li Runas_List .
781 If both
782 .Li Runas_List Ns No s
783 are empty, the command may only be run as the invoking user.
784 If no
785 .Li Runas_Spec
786 is specified the command may be run as
787 .Sy root
788 and
789 no group may be specified.
790 .Pp
791 A
792 .Li Runas_Spec
793 sets the default for the commands that follow it.
794 What this means is that for the entry:
795 .Bd -literal
796 dgb     boulder = (operator) /bin/ls, /bin/kill, /usr/bin/lprm
797 .Ed
798 .Pp
799 The user
800 .Sy dgb
801 may run
802 .Pa /bin/ls ,
803 .Pa /bin/kill ,
804 and
805 .Pa /usr/bin/lprm Ns No \(em Ns but
806 only as
807 .Sy operator .
808 E.g.,
809 .Bd -literal
810 $ sudo -u operator /bin/ls
811 .Ed
812 .Pp
813 It is also possible to override a
814 .Li Runas_Spec
815 later on in an entry.
816 If we modify the entry like so:
817 .Bd -literal
818 dgb     boulder = (operator) /bin/ls, (root) /bin/kill, /usr/bin/lprm
819 .Ed
820 .Pp
821 Then user
822 .Sy dgb
823 is now allowed to run
824 .Pa /bin/ls
825 as
826 .Sy operator ,
827 but
828 .Pa /bin/kill
829 and
830 .Pa /usr/bin/lprm
831 as
832 .Sy root .
833 .Pp
834 We can extend this to allow
835 .Sy dgb
836 to run
837 .Li /bin/ls
838 with either
839 the user or group set to
840 .Sy operator :
841 .Bd -literal
842 dgb     boulder = (operator : operator) /bin/ls, (root) /bin/kill,\e
843         /usr/bin/lprm
844 .Ed
845 .Pp
846 Note that while the group portion of the
847 .Li Runas_Spec
848 permits the
849 user to run as command with that group, it does not force the user
850 to do so.
851 If no group is specified on the command line, the command
852 will run with the group listed in the target user's password database
853 entry.
854 The following would all be permitted by the sudoers entry above:
855 .Bd -literal
856 $ sudo -u operator /bin/ls
857 $ sudo -u operator -g operator /bin/ls
858 $ sudo -g operator /bin/ls
859 .Ed
860 .Pp
861 In the following example, user
862 .Sy tcm
863 may run commands that access
864 a modem device file with the dialer group.
865 .Bd -literal
866 tcm     boulder = (:dialer) /usr/bin/tip, /usr/bin/cu,\e
867         /usr/local/bin/minicom
868 .Ed
869 .Pp
870 Note that in this example only the group will be set, the command
871 still runs as user
872 .Sy tcm .
873 E.g.\&
874 .Bd -literal
875 $ sudo -g dialer /usr/bin/cu
876 .Ed
877 .Pp
878 Multiple users and groups may be present in a
879 .Li Runas_Spec ,
880 in which case the user may select any combination of users and groups via the
881 .Fl u
882 and
883 .Fl g
884 options.
885 In this example:
886 .Bd -literal
887 alan    ALL = (root, bin : operator, system) ALL
888 .Ed
889 .Pp
890 user
891 .Sy alan
892 may run any command as either user root or bin,
893 optionally setting the group to operator or system.
894 .Ss SELinux_Spec
895 On systems with SELinux support,
896 .Em sudoers
897 entries may optionally have an SELinux role and/or type associated
898 with a command.
899 If a role or
900 type is specified with the command it will override any default values
901 specified in
902 .Em sudoers .
903 A role or type specified on the command line,
904 however, will supersede the values in
905 .Em sudoers .
906 .Ss Solaris_Priv_Spec
907 On Solaris systems,
908 .Em sudoers
909 entries may optionally specify Solaris privilege set and/or limit
910 privilege set associated with a command.
911 If privileges or limit privileges are specified with the command
912 it will override any default values specified in
913 .Em sudoers .
914 .Pp
915 A privilege set is a comma-separated list of privilege names.
916 The
917 .Xr ppriv 1
918 command can be used to list all privileges known to the system.
919 For example:
920 .Bd -literal
921 $ ppriv -l
922 .Ed
923 .Pp
924 In addition, there are several
925 .Dq special
926 privilege strings:
927 .Bl -tag -width 8n
928 .It none
929 the empty set
930 .It all
931 the set of all privileges
932 .It zone
933 the set of all privileges available in the current zone
934 .It basic
935 the default set of privileges normal users are granted at login time
936 .El
937 .Pp
938 Privileges can be excluded from a set by prefixing the privilege
939 name with either an
940 .Ql \&!
941 or
942 .Ql \-
943 character.
944 .Ss Tag_Spec
945 A command may have zero or more tags associated with it.
946 There are
947 ten possible tag values:
948 .Li NOPASSWD ,
949 .Li PASSWD ,
950 .Li NOEXEC ,
951 .Li EXEC ,
952 .Li SETENV ,
953 .Li NOSETENV ,
954 .Li LOG_INPUT ,
955 .Li NOLOG_INPUT ,
956 .Li LOG_OUTPUT
957 and
958 .Li NOLOG_OUTPUT .
959 Once a tag is set on a
960 .Li Cmnd ,
961 subsequent
962 .Li Cmnd Ns No s
963 in the
964 .Li Cmnd_Spec_List ,
965 inherit the tag unless it is overridden by the opposite tag (in other words,
966 .Li PASSWD
967 overrides
968 .Li NOPASSWD
969 and
970 .Li NOEXEC
971 overrides
972 .Li EXEC ) .
973 .Pp
974 .Em NOPASSWD and PASSWD
975 .Pp
976 By default,
977 .Nm sudo
978 requires that a user authenticate him or herself
979 before running a command.
980 This behavior can be modified via the
981 .Li NOPASSWD
982 tag.
983 Like a
984 .Li Runas_Spec ,
985 the
986 .Li NOPASSWD
987 tag sets
988 a default for the commands that follow it in the
989 .Li Cmnd_Spec_List .
990 Conversely, the
991 .Li PASSWD
992 tag can be used to reverse things.
993 For example:
994 .Bd -literal
995 ray     rushmore = NOPASSWD: /bin/kill, /bin/ls, /usr/bin/lprm
996 .Ed
997 .Pp
998 would allow the user
999 .Sy ray
1000 to run
1001 .Pa /bin/kill ,
1002 .Pa /bin/ls ,
1003 and
1004 .Pa /usr/bin/lprm
1005 as
1006 .Sy root
1007 on the machine rushmore without authenticating himself.
1008 If we only want
1009 .Sy ray
1010 to be able to
1011 run
1012 .Pa /bin/kill
1013 without a password the entry would be:
1014 .Bd -literal
1015 ray     rushmore = NOPASSWD: /bin/kill, PASSWD: /bin/ls, /usr/bin/lprm
1016 .Ed
1017 .Pp
1018 Note, however, that the
1019 .Li PASSWD
1020 tag has no effect on users who are in the group specified by the
1021 .Em exempt_group
1022 option.
1023 .Pp
1024 By default, if the
1025 .Li NOPASSWD
1026 tag is applied to any of the entries for a user on the current host,
1027 he or she will be able to run
1028 .Dq Li sudo -l
1029 without a password.
1030 Additionally, a user may only run
1031 .Dq Li sudo -v
1032 without a password if the
1033 .Li NOPASSWD
1034 tag is present for all a user's entries that pertain to the current host.
1035 This behavior may be overridden via the
1036 .Em verifypw
1037 and
1038 .Em listpw
1039 options.
1040 .Pp
1041 .Em NOEXEC and EXEC
1042 .Pp
1043 If
1044 .Nm sudo
1045 has been compiled with
1046 .Em noexec
1047 support and the underlying operating system supports it, the
1048 .Li NOEXEC
1049 tag can be used to prevent a dynamically-linked executable from
1050 running further commands itself.
1051 .Pp
1052 In the following example, user
1053 .Sy aaron
1054 may run
1055 .Pa /usr/bin/more
1056 and
1057 .Pa /usr/bin/vi
1058 but shell escapes will be disabled.
1059 .Bd -literal
1060 aaron   shanty = NOEXEC: /usr/bin/more, /usr/bin/vi
1061 .Ed
1062 .Pp
1063 See the
1064 .Sx Preventing shell escapes
1065 section below for more details on how
1066 .Li NOEXEC
1067 works and whether or not it will work on your system.
1068 .Pp
1069 .Em SETENV and NOSETENV
1070 .Pp
1071 These tags override the value of the
1072 .Em setenv
1073 option on a per-command basis.
1074 Note that if
1075 .Li SETENV
1076 has been set for a command, the user may disable the
1077 .Em env_reset
1078 option from the command line via the
1079 .Fl E
1080 option.
1081 Additionally, environment variables set on the command
1082 line are not subject to the restrictions imposed by
1083 .Em env_check ,
1084 .Em env_delete ,
1085 or
1086 .Em env_keep .
1087 As such, only trusted users should be allowed to set variables in this manner.
1088 If the command matched is
1089 .Sy ALL ,
1090 the
1091 .Li SETENV
1092 tag is implied for that command; this default may be overridden by use of the
1093 .Li NOSETENV
1094 tag.
1095 .Pp
1096 .Em LOG_INPUT and NOLOG_INPUT
1097 .Pp
1098 These tags override the value of the
1099 .Em log_input
1100 option on a per-command basis.
1101 For more information, see the description of
1102 .Em log_input
1103 in the
1104 .Sx SUDOERS OPTIONS
1105 section below.
1106 .Pp
1107 .Em LOG_OUTPUT and NOLOG_OUTPUT
1108 .Pp
1109 These tags override the value of the
1110 .Em log_output
1111 option on a per-command basis.
1112 For more information, see the description of
1113 .Em log_output
1114 in the
1115 .Sx SUDOERS OPTIONS
1116 section below.
1117 .Ss Wildcards
1118 .Nm sudo
1119 allows shell-style
1120 .Em wildcards
1121 (aka meta or glob characters)
1122 to be used in host names, path names and command line arguments in the
1123 .Em sudoers
1124 file.
1125 Wildcard matching is done via the
1126 .Sy POSIX
1127 .Xr glob 3
1128 and
1129 .Xr fnmatch 3
1130 routines.
1131 Note that these are
1132 .Em not
1133 regular expressions.
1134 .Bl -tag -width 8n
1135 .It Li *
1136 Matches any set of zero or more characters.
1137 .It Li \&?
1138 Matches any single character.
1139 .It Li [...]
1140 Matches any character in the specified range.
1141 .It Li [!...]
1142 Matches any character
1143 .Sy not
1144 in the specified range.
1145 .It Li \ex
1146 For any character
1147 .Sq x ,
1148 evaluates to
1149 .Sq x .
1150 This is used to escape special characters such as:
1151 .Ql * ,
1152 .Ql \&? ,
1153 .Ql [\& ,
1154 and
1155 .Ql ]\& .
1156 .El
1157 .Pp
1158 POSIX character classes may also be used if your system's
1159 .Xr glob 3
1160 and
1161 .Xr fnmatch 3
1162 functions support them.
1163 However, because the
1164 .Ql :\&
1165 character has special meaning in
1166 .Em sudoers ,
1167 it must be
1168 escaped.
1169 For example:
1170 .Bd -literal -offset 4n
1171 /bin/ls [[\:alpha\:]]*
1172 .Ed
1173 .Pp
1174 Would match any file name beginning with a letter.
1175 .Pp
1176 Note that a forward slash
1177 .Pq Ql /
1178 will
1179 .Sy not
1180 be matched by
1181 wildcards used in the path name.
1182 This is to make a path like:
1183 .Bd -literal -offset 4n
1184 /usr/bin/*
1185 .Ed
1186 .Pp
1187 match
1188 .Pa /usr/bin/who
1189 but not
1190 .Pa /usr/bin/X11/xterm .
1191 .Pp
1192 When matching the command line arguments, however, a slash
1193 .Sy does
1194 get matched by wildcards since command line arguments may contain
1195 arbitrary strings and not just path names.
1196 .Pp
1197 Wildcards in command line arguments should be used with care.
1198 Because command line arguments are matched as a single, concatenated
1199 string, a wildcard such as
1200 .Ql \&?
1201 or
1202 .Ql *
1203 can match multiple words.
1204 For example, while a sudoers entry like:
1205 .Bd -literal -offset 4n
1206 %operator ALL = /bin/cat /var/log/messages*
1207 .Ed
1208 .Pp
1209 will allow command like:
1210 .Bd -literal -offset 4n
1211 $ sudo cat /var/log/messages.1
1212 .Ed
1213 .Pp
1214 It will also allow:
1215 .Bd -literal -offset 4n
1216 $ sudo cat /var/log/messages /etc/shadow
1217 .Ed
1218 .Pp
1219 which is probably not what was intended.
1220 .Ss Exceptions to wildcard rules
1221 The following exceptions apply to the above rules:
1222 .Bl -tag -width 8n
1223 .It Li \&""
1224 If the empty string
1225 .Li \&""
1226 is the only command line argument in the
1227 .Em sudoers
1228 entry it means that command is not allowed to be run with
1229 .Sy any
1230 arguments.
1231 .It sudoedit
1232 Command line arguments to the
1233 .Em sudoedit
1234 built-in command should always be path names, so a forward slash
1235 .Pq Ql /
1236 will not be matched by a wildcard.
1237 .El
1238 .Ss Including other files from within sudoers
1239 It is possible to include other
1240 .Em sudoers
1241 files from within the
1242 .Em sudoers
1243 file currently being parsed using the
1244 .Li #include
1245 and
1246 .Li #includedir
1247 directives.
1248 .Pp
1249 This can be used, for example, to keep a site-wide
1250 .Em sudoers
1251 file in addition to a local, per-machine file.
1252 For the sake of this example the site-wide
1253 .Em sudoers
1254 will be
1255 .Pa /etc/sudoers
1256 and the per-machine one will be
1257 .Pa /etc/sudoers.local .
1258 To include
1259 .Pa /etc/sudoers.local
1260 from within
1261 .Pa /etc/sudoers
1262 we would use the
1263 following line in
1264 .Pa /etc/sudoers :
1265 .Bd -literal -offset 4n
1266 #include /etc/sudoers.local
1267 .Ed
1268 .Pp
1269 When
1270 .Nm sudo
1271 reaches this line it will suspend processing of the current file
1272 .Pq Pa /etc/sudoers
1273 and switch to
1274 .Pa /etc/sudoers.local .
1275 Upon reaching the end of
1276 .Pa /etc/sudoers.local ,
1277 the rest of
1278 .Pa /etc/sudoers
1279 will be processed.
1280 Files that are included may themselves include other files.
1281 A hard limit of 128 nested include files is enforced to prevent include
1282 file loops.
1283 .Pp
1284 If the path to the include file is not fully-qualified (does not
1285 begin with a
1286 .Ql / ,
1287 it must be located in the same directory as the sudoers file it was
1288 included from.
1289 For example, if
1290 .Pa /etc/sudoers
1291 contains the line:
1292 .Bd -literal -offset 4n
1293 .Li #include sudoers.local
1294 .Ed
1295 .Pp
1296 the file that will be included is
1297 .Pa /etc/sudoers.local .
1298 .Pp
1299 The file name may also include the
1300 .Li %h
1301 escape, signifying the short form of the host name.
1302 In other words, if the machine's host name is
1303 .Dq xerxes ,
1304 then
1305 .Bd -literal -offset 4n
1306 #include /etc/sudoers.%h
1307 .Ed
1308 .Pp
1309 will cause
1310 .Nm sudo
1311 to include the file
1312 .Pa /etc/sudoers.xerxes .
1313 .Pp
1314 The
1315 .Li #includedir
1316 directive can be used to create a
1317 .Pa sudo.d
1318 directory that the system package manager can drop
1319 .Em sudoers
1320 rules
1321 into as part of package installation.
1322 For example, given:
1323 .Bd -literal -offset 4n
1324 #includedir /etc/sudoers.d
1325 .Ed
1326 .Pp
1327 .Nm sudo
1328 will read each file in
1329 .Pa /etc/sudoers.d ,
1330 skipping file names that end in
1331 .Ql ~
1332 or contain a
1333 .Ql .\&
1334 character to avoid causing problems with package manager or editor
1335 temporary/backup files.
1336 Files are parsed in sorted lexical order.
1337 That is,
1338 .Pa /etc/sudoers.d/01_first
1339 will be parsed before
1340 .Pa /etc/sudoers.d/10_second .
1341 Be aware that because the sorting is lexical, not numeric,
1342 .Pa /etc/sudoers.d/1_whoops
1343 would be loaded
1344 .Sy after
1345 .Pa /etc/sudoers.d/10_second .
1346 Using a consistent number of leading zeroes in the file names can be used
1347 to avoid such problems.
1348 .Pp
1349 Note that unlike files included via
1350 .Li #include ,
1351 .Nm visudo
1352 will not edit the files in a
1353 .Li #includedir
1354 directory unless one of them contains a syntax error.
1355 It is still possible to run
1356 .Nm visudo
1357 with the
1358 .Fl f
1359 flag to edit the files directly.
1360 .Ss Other special characters and reserved words
1361 The pound sign
1362 .Pq Ql #
1363 is used to indicate a comment (unless it is part of a #include
1364 directive or unless it occurs in the context of a user name and is
1365 followed by one or more digits, in which case it is treated as a
1366 uid).
1367 Both the comment character and any text after it, up to the end of
1368 the line, are ignored.
1369 .Pp
1370 The reserved word
1371 .Sy ALL
1372 is a built-in
1373 .Em alias
1374 that always causes a match to succeed.
1375 It can be used wherever one might otherwise use a
1376 .Li Cmnd_Alias ,
1377 .Li User_Alias ,
1378 .Li Runas_Alias ,
1379 or
1380 .Li Host_Alias .
1381 You should not try to define your own
1382 .Em alias
1383 called
1384 .Sy ALL
1385 as the built-in alias will be used in preference to your own.
1386 Please note that using
1387 .Sy ALL
1388 can be dangerous since in a command context, it allows the user to run
1389 .Sy any
1390 command on the system.
1391 .Pp
1392 An exclamation point
1393 .Pq Ql \&!
1394 can be used as a logical
1395 .Em not
1396 operator both in an
1397 .Em alias
1398 and in front of a
1399 .Li Cmnd .
1400 This allows one to exclude certain values.
1401 Note, however, that using a
1402 .Ql \&!
1403 in conjunction with the built-in
1404 .Sy ALL
1405 alias to allow a user to run
1406 .Dq all but a few
1407 commands rarely works as intended (see
1408 .Sx SECURITY NOTES
1409 below).
1410 .Pp
1411 Long lines can be continued with a backslash
1412 .Pq Ql \e
1413 as the last character on the line.
1414 .Pp
1415 White space between elements in a list as well as special syntactic
1416 characters in a
1417 .Em User Specification
1418 .Po
1419 .Ql =\& ,
1420 .Ql :\& ,
1421 .Ql (\& ,
1422 .Ql )\&
1423 .Pc
1424 is optional.
1425 .Pp
1426 The following characters must be escaped with a backslash
1427 .Pq Ql \e
1428 when used as part of a word (e.g.\& a user name or host name):
1429 .Ql \&! ,
1430 .Ql =\& ,
1431 .Ql :\& ,
1432 .Ql ,\& ,
1433 .Ql (\& ,
1434 .Ql )\& ,
1435 .Ql \e .
1436 .Sh SUDOERS OPTIONS
1437 .Nm sudo Ns No 's
1438 behavior can be modified by
1439 .Li Default_Entry
1440 lines, as explained earlier.
1441 A list of all supported Defaults parameters, grouped by type, are listed below.
1442 .Pp
1443 .Sy Boolean Flags :
1444 .Bl -tag -width 16n
1445 .It always_set_home
1446 If enabled,
1447 .Nm sudo
1448 will set the
1449 .Ev HOME
1450 environment variable to the home directory of the target user
1451 (which is root unless the
1452 .Fl u
1453 option is used).
1454 This effectively means that the
1455 .Fl H
1456 option is always implied.
1457 Note that
1458 .Ev HOME
1459 is already set when the the
1460 .Em env_reset
1461 option is enabled, so
1462 .Em always_set_home
1463 is only effective for configurations where either
1464 .Em env_reset
1465 is disabled or
1466 .Ev HOME
1467 is present in the
1468 .Em env_keep
1469 list.
1470 This flag is
1471 .Em off
1472 by default.
1473 .It authenticate
1474 If set, users must authenticate themselves via a password (or other
1475 means of authentication) before they may run commands.
1476 This default may be overridden via the
1477 .Li PASSWD
1478 and
1479 .Li NOPASSWD
1480 tags.
1481 This flag is
1482 .Em on
1483 by default.
1484 .It closefrom_override
1485 If set, the user may use
1486 .Nm sudo Ns No 's
1487 .Fl C
1488 option which overrides the default starting point at which
1489 .Nm sudo
1490 begins closing open file descriptors.
1491 This flag is
1492 .Em off
1493 by default.
1494 .It compress_io
1495 If set, and
1496 .Nm sudo
1497 is configured to log a command's input or output,
1498 the I/O logs will be compressed using
1499 .Sy zlib .
1500 This flag is
1501 .Em on
1502 by default when
1503 .Nm sudo
1504 is compiled with
1505 .Sy zlib
1506 support.
1507 .It env_editor
1508 If set,
1509 .Nm visudo
1510 will use the value of the
1511 .Ev EDITOR
1512 or
1513 .Ev VISUAL
1514 environment variables before falling back on the default editor list.
1515 Note that this may create a security hole as it allows the user to
1516 run any arbitrary command as root without logging.
1517 A safer alternative is to place a colon-separated list of editors
1518 in the
1519 .Li editor
1520 variable.
1521 .Nm visudo
1522 will then only use the
1523 .Ev EDITOR
1524 or
1525 .Ev VISUAL
1526 if they match a value specified in
1527 .Li editor .
1528 This flag is
1529 .Em @env_editor@
1530 by
1531 default.
1532 .It env_reset
1533 If set,
1534 .Nm sudo
1535 will run the command in a minimal environment containing the
1536 .Ev TERM ,
1537 .Ev PATH ,
1538 .Ev HOME ,
1539 .Ev MAIL ,
1540 .Ev SHELL ,
1541 .Ev LOGNAME ,
1542 .Ev USER ,
1543 .Ev USERNAME
1544 and
1545 .Ev SUDO_*
1546 variables.
1547 Any
1548 variables in the caller's environment that match the
1549 .Li env_keep
1550 and
1551 .Li env_check
1552 lists are then added, followed by any variables present in the file
1553 specified by the
1554 .Em env_file
1555 option (if any).
1556 The default contents of the
1557 .Li env_keep
1558 and
1559 .Li env_check
1560 lists are displayed when
1561 .Nm sudo
1562 is run by root with the
1563 .Fl V
1564 option.
1565 If the
1566 .Em secure_path
1567 option is set, its value will be used for the
1568 .Ev PATH
1569 environment variable.
1570 This flag is
1571 .Em @env_reset@
1572 by default.
1573 .It fast_glob
1574 Normally,
1575 .Nm sudo
1576 uses the
1577 .Xr glob 3
1578 function to do shell-style globbing when matching path names.
1579 However, since it accesses the file system,
1580 .Xr glob 3
1581 can take a long time to complete for some patterns, especially
1582 when the pattern references a network file system that is mounted
1583 on demand (auto mounted).
1584 The
1585 .Em fast_glob
1586 option causes
1587 .Nm sudo
1588 to use the
1589 .Xr fnmatch 3
1590 function, which does not access the file system to do its matching.
1591 The disadvantage of
1592 .Em fast_glob
1593 is that it is unable to match relative path names such as
1594 .Pa ./ls
1595 or
1596 .Pa ../bin/ls .
1597 This has security implications when path names that include globbing
1598 characters are used with the negation operator,
1599 .Ql !\& ,
1600 as such rules can be trivially bypassed.
1601 As such, this option should not be used when
1602 .Em sudoers
1603 contains rules that contain negated path names which include globbing
1604 characters.
1605 This flag is
1606 .Em off
1607 by default.
1608 .It fqdn
1609 Set this flag if you want to put fully qualified host names in the
1610 .Em sudoers
1611 file when the local host name (as returned by the
1612 .Li hostname
1613 command) does not contain the domain name.
1614 In other words, instead of myhost you would use myhost.mydomain.edu.
1615 You may still use the short form if you wish (and even mix the two).
1616 This option is only effective when the
1617 .Dq canonical
1618 host name, as returned by the
1619 .Fn getaddrinfo
1620 or
1621 .Fn gethostbyname
1622 function, is a fully-qualified domain name.
1623 This is usually the case when the system is configured to use DNS
1624 for host name resolution.
1625 .Pp
1626 If the system is configured to use the
1627 .Pa /etc/hosts
1628 file in preference to DNS, the
1629 .Dq canonical
1630 host name may not be fully-qualified.
1631 The order that sources are queried for hosts name resolution
1632 is usually specified in the
1633 .Pa @nsswitch_conf@ ,
1634 .Pa @netsvc_conf@ ,
1635 .Pa /etc/host.conf ,
1636 or, in some cases,
1637 .Pa /etc/resolv.conf
1638 file.
1639 In the
1640 .Pa /etc/hosts
1641 file, the first host name of the entry is considered to be the
1642 .Dq canonical
1643 name; subsequent names are aliases that are not used by
1644 .Nm sudoers .
1645 For example, the following hosts file line for the machine
1646 .Dq xyzzy
1647 has the fully-qualified domain name as the
1648 .Dq canonical
1649 host name, and the short version as an alias.
1650 .sp
1651 .Dl 192.168.1.1 xyzzy.sudo.ws xyzzy
1652 .sp
1653 If the machine's hosts file entry is not formatted properly, the
1654 .Em fqdn
1655 option will not be effective if it is queried before DNS.
1656 .Pp
1657 Beware that when using DNS for host name resolution, turning on
1658 .Em fqdn
1659 requires
1660 .Nm sudoers
1661 to make DNS lookups which renders
1662 .Nm sudo
1663 unusable if DNS stops working (for example if the machine is disconnected
1664 from the network).
1665 Also note that just like with the hosts file, you must use the
1666 .Dq canonical
1667 name as DNS knows it.
1668 That is, you may not use a host alias
1669 .Po
1670 .Li CNAME
1671 entry
1672 .Pc
1673 due to performance issues and the fact that there is no way to get all
1674 aliases from DNS.
1675 .Pp
1676 This flag is
1677 .Em @fqdn@
1678 by default.
1679 .It ignore_dot
1680 If set,
1681 .Nm sudo
1682 will ignore "." or "" (both denoting current directory) in the
1683 .Ev PATH
1684 environment variable; the
1685 .Ev PATH
1686 itself is not modified.
1687 This flag is
1688 .Em @ignore_dot@
1689 by default.
1690 .It ignore_local_sudoers
1691 If set via LDAP, parsing of
1692 .Pa @sysconfdir@/sudoers
1693 will be skipped.
1694 This is intended for Enterprises that wish to prevent the usage of local
1695 sudoers files so that only LDAP is used.
1696 This thwarts the efforts of rogue operators who would attempt to add roles to
1697 .Pa @sysconfdir@/sudoers .
1698 When this option is present,
1699 .Pa @sysconfdir@/sudoers
1700 does not even need to exist.
1701 Since this option tells
1702 .Nm sudo
1703 how to behave when no specific LDAP entries have been matched, this
1704 sudoOption is only meaningful for the
1705 .Li cn=defaults
1706 section.
1707 This flag is
1708 .Em off
1709 by default.
1710 .It insults
1711 If set,
1712 .Nm sudo
1713 will insult users when they enter an incorrect password.
1714 This flag is
1715 .Em @insults@
1716 by default.
1717 .It log_host
1718 If set, the host name will be logged in the (non-syslog)
1719 .Nm sudo
1720 log file.
1721 This flag is
1722 .Em off
1723 by default.
1724 .It log_input
1725 If set,
1726 .Nm sudo
1727 will run the command in a
1728 .Em pseudo tty
1729 and log all user input.
1730 If the standard input is not connected to the user's tty, due to
1731 I/O redirection or because the command is part of a pipeline, that
1732 input is also captured and stored in a separate log file.
1733 .Pp
1734 Input is logged to the directory specified by the
1735 .Em iolog_dir
1736 option
1737 .Po
1738 .Pa @iolog_dir@
1739 by default
1740 .Pc
1741 using a unique session ID that is included in the normal
1742 .Nm sudo
1743 log line, prefixed with
1744 .Dq Li TSID= .
1745 The
1746 .Em iolog_file
1747 option may be used to control the format of the session ID.
1748 .Pp
1749 Note that user input may contain sensitive information such as
1750 passwords (even if they are not echoed to the screen), which will
1751 be stored in the log file unencrypted.
1752 In most cases, logging the command output via
1753 .Em log_output
1754 is all that is required.
1755 .It log_output
1756 If set,
1757 .Nm sudo
1758 will run the command in a
1759 .Em pseudo tty
1760 and log all output that is sent to the screen, similar to the
1761 .Xr script 1
1762 command.
1763 If the standard output or standard error is not connected to the
1764 user's tty, due to I/O redirection or because the command is part
1765 of a pipeline, that output is also captured and stored in separate
1766 log files.
1767 .Pp
1768 Output is logged to the directory specified by the
1769 .Em iolog_dir
1770 option
1771 .Po
1772 .Pa @iolog_dir@
1773 by default
1774 .Pc
1775 using a unique session ID that is included in the normal
1776 .Nm sudo
1777 log line, prefixed with
1778 .Dq Li TSID= .
1779 The
1780 .Em iolog_file
1781 option may be used to control the format of the session ID.
1782 .Pp
1783 Output logs may be viewed with the
1784 .Xr sudoreplay @mansectsu@
1785 utility, which can also be used to list or search the available logs.
1786 .It log_year
1787 If set, the four-digit year will be logged in the (non-syslog)
1788 .Nm sudo
1789 log file.
1790 This flag is
1791 .Em off
1792 by default.
1793 .It long_otp_prompt
1794 When validating with a One Time Password (OTP) scheme such as
1795 .Sy S/Key
1796 or
1797 .Sy OPIE ,
1798 a two-line prompt is used to make it easier
1799 to cut and paste the challenge to a local window.
1800 It's not as pretty as the default but some people find it more convenient.
1801 This flag is
1802 .Em @long_otp_prompt@
1803 by default.
1804 .It mail_always
1805 Send mail to the
1806 .Em mailto
1807 user every time a users runs
1808 .Nm sudo .
1809 This flag is
1810 .Em off
1811 by default.
1812 .It mail_badpass
1813 Send mail to the
1814 .Em mailto
1815 user if the user running
1816 .Nm sudo
1817 does not enter the correct password.
1818 If the command the user is attempting to run is not permitted by
1819 .Em sudoers
1820 and one of the
1821 .Em mail_always ,
1822 .Em mail_no_host ,
1823 .Em mail_no_perms
1824 or
1825 .Em mail_no_user
1826 flags are set, this flag will have no effect.
1827 This flag is
1828 .Em off
1829 by default.
1830 .It mail_no_host
1831 If set, mail will be sent to the
1832 .Em mailto
1833 user if the invoking user exists in the
1834 .Em sudoers
1835 file, but is not allowed to run commands on the current host.
1836 This flag is
1837 .Em @mail_no_host@
1838 by default.
1839 .It mail_no_perms
1840 If set, mail will be sent to the
1841 .Em mailto
1842 user if the invoking user is allowed to use
1843 .Nm sudo
1844 but the command they are trying is not listed in their
1845 .Em sudoers
1846 file entry or is explicitly denied.
1847 This flag is
1848 .Em @mail_no_perms@
1849 by default.
1850 .It mail_no_user
1851 If set, mail will be sent to the
1852 .Em mailto
1853 user if the invoking user is not in the
1854 .Em sudoers
1855 file.
1856 This flag is
1857 .Em @mail_no_user@
1858 by default.
1859 .It noexec
1860 If set, all commands run via
1861 .Nm sudo
1862 will behave as if the
1863 .Li NOEXEC
1864 tag has been set, unless overridden by a
1865 .Li EXEC
1866 tag.
1867 See the description of
1868 .Em NOEXEC and EXEC
1869 below as well as the
1870 .Sx Preventing shell escapes
1871 section at the end of this manual.
1872 This flag is
1873 .Em off
1874 by default.
1875 .It path_info
1876 Normally,
1877 .Nm sudo
1878 will tell the user when a command could not be
1879 found in their
1880 .Ev PATH
1881 environment variable.
1882 Some sites may wish to disable this as it could be used to gather
1883 information on the location of executables that the normal user does
1884 not have access to.
1885 The disadvantage is that if the executable is simply not in the user's
1886 .Ev PATH ,
1887 .Nm sudo
1888 will tell the user that they are not allowed to run it, which can be confusing.
1889 This flag is
1890 .Em @path_info@
1891 by default.
1892 .It passprompt_override
1893 The password prompt specified by
1894 .Em passprompt
1895 will normally only be used if the password prompt provided by systems
1896 such as PAM matches the string
1897 .Dq Password: .
1898 If
1899 .Em passprompt_override
1900 is set,
1901 .Em passprompt
1902 will always be used.
1903 This flag is
1904 .Em off
1905 by default.
1906 .It preserve_groups
1907 By default,
1908 .Nm sudo
1909 will initialize the group vector to the list of groups the target user is in.
1910 When
1911 .Em preserve_groups
1912 is set, the user's existing group vector is left unaltered.
1913 The real and effective group IDs, however, are still set to match the
1914 target user.
1915 This flag is
1916 .Em off
1917 by default.
1918 .It pwfeedback
1919 By default,
1920 .Nm sudo
1921 reads the password like most other Unix programs,
1922 by turning off echo until the user hits the return (or enter) key.
1923 Some users become confused by this as it appears to them that
1924 .Nm sudo
1925 has hung at this point.
1926 When
1927 .Em pwfeedback
1928 is set,
1929 .Nm sudo
1930 will provide visual feedback when the user presses a key.
1931 Note that this does have a security impact as an onlooker may be able to
1932 determine the length of the password being entered.
1933 This flag is
1934 .Em off
1935 by default.
1936 .It requiretty
1937 If set,
1938 .Nm sudo
1939 will only run when the user is logged in to a real tty.
1940 When this flag is set,
1941 .Nm sudo
1942 can only be run from a login session and not via other means such as
1943 .Xr cron @mansectsu@
1944 or cgi-bin scripts.
1945 This flag is
1946 .Em off
1947 by default.
1948 .It root_sudo
1949 If set, root is allowed to run
1950 .Nm sudo
1951 too.
1952 Disabling this prevents users from
1953 .Dq chaining
1954 .Nm sudo
1955 commands to get a root shell by doing something like
1956 .Dq Li sudo sudo /bin/sh .
1957 Note, however, that turning off
1958 .Em root_sudo
1959 will also prevent root from running
1960 .Nm sudoedit .
1961 Disabling
1962 .Em root_sudo
1963 provides no real additional security; it exists purely for historical reasons.
1964 This flag is
1965 .Em @root_sudo@
1966 by default.
1967 .It rootpw
1968 If set,
1969 .Nm sudo
1970 will prompt for the root password instead of the password of the invoking user.
1971 This flag is
1972 .Em off
1973 by default.
1974 .It runaspw
1975 If set,
1976 .Nm sudo
1977 will prompt for the password of the user defined by the
1978 .Em runas_default
1979 option (defaults to
1980 .Li @runas_default@ )
1981 instead of the password of the invoking user.
1982 This flag is
1983 .Em off
1984 by default.
1985 .It set_home
1986 If enabled and
1987 .Nm sudo
1988 is invoked with the
1989 .Fl s
1990 option the
1991 .Ev HOME
1992 environment variable will be set to the home directory of the target
1993 user (which is root unless the
1994 .Fl u
1995 option is used).
1996 This effectively makes the
1997 .Fl s
1998 option imply
1999 .Fl H .
2000 Note that
2001 .Ev HOME
2002 is already set when the the
2003 .Em env_reset
2004 option is enabled, so
2005 .Em set_home
2006 is only effective for configurations where either
2007 .Em env_reset
2008 is disabled
2009 or
2010 .Ev HOME
2011 is present in the
2012 .Em env_keep
2013 list.
2014 This flag is
2015 .Em off
2016 by default.
2017 .It set_logname
2018 Normally,
2019 .Nm sudo
2020 will set the
2021 .Ev LOGNAME ,
2022 .Ev USER
2023 and
2024 .Ev USERNAME
2025 environment variables to the name of the target user (usually root unless the
2026 .Fl u
2027 option is given).
2028 However, since some programs (including the RCS revision control system) use
2029 .Ev LOGNAME
2030 to determine the real identity of the user, it may be desirable to
2031 change this behavior.
2032 This can be done by negating the set_logname option.
2033 Note that if the
2034 .Em env_reset
2035 option has not been disabled, entries in the
2036 .Em env_keep
2037 list will override the value of
2038 .Em set_logname .
2039 This flag is
2040 .Em on
2041 by default.
2042 .It set_utmp
2043 When enabled,
2044 .Nm sudo
2045 will create an entry in the utmp (or utmpx) file when a pseudo-tty
2046 is allocated.
2047 A pseudo-tty is allocated by
2048 .Nm sudo
2049 when the
2050 .Em log_input ,
2051 .Em log_output
2052 or
2053 .Em use_pty
2054 flags are enabled.
2055 By default, the new entry will be a copy of the user's existing utmp
2056 entry (if any), with the tty, time, type and pid fields updated.
2057 This flag is
2058 .Em on
2059 by default.
2060 .It setenv
2061 Allow the user to disable the
2062 .Em env_reset
2063 option from the command line via the
2064 .Fl E
2065 option.
2066 Additionally, environment variables set via the command line are
2067 not subject to the restrictions imposed by
2068 .Em env_check ,
2069 .Em env_delete ,
2070 or
2071 .Em env_keep .
2072 As such, only trusted users should be allowed to set variables in this manner.
2073 This flag is
2074 .Em off
2075 by default.
2076 .It shell_noargs
2077 If set and
2078 .Nm sudo
2079 is invoked with no arguments it acts as if the
2080 .Fl s
2081 option had been given.
2082 That is, it runs a shell as root (the shell is determined by the
2083 .Ev SHELL
2084 environment variable if it is set, falling back on the shell listed
2085 in the invoking user's /etc/passwd entry if not).
2086 This flag is
2087 .Em off
2088 by default.
2089 .It stay_setuid
2090 Normally, when
2091 .Nm sudo
2092 executes a command the real and effective UIDs are set to the target
2093 user (root by default).
2094 This option changes that behavior such that the real UID is left
2095 as the invoking user's UID.
2096 In other words, this makes
2097 .Nm sudo
2098 act as a setuid wrapper.
2099 This can be useful on systems that disable some potentially
2100 dangerous functionality when a program is run setuid.
2101 This option is only effective on systems that support either the
2102 .Xr setreuid 2
2103 or
2104 .Xr setresuid 2
2105 system call.
2106 This flag is
2107 .Em off
2108 by default.
2109 .It targetpw
2110 If set,
2111 .Nm sudo
2112 will prompt for the password of the user specified
2113 by the
2114 .Fl u
2115 option (defaults to
2116 .Li root )
2117 instead of the password of the invoking user.
2118 In addition, the time stamp file name will include the target user's name.
2119 Note that this flag precludes the use of a uid not listed in the passwd
2120 database as an argument to the
2121 .Fl u
2122 option.
2123 This flag is
2124 .Em off
2125 by default.
2126 .It tty_tickets
2127 If set, users must authenticate on a per-tty basis.
2128 With this flag enabled,
2129 .Nm sudo
2130 will use a file named for the tty the user is
2131 logged in on in the user's time stamp directory.
2132 If disabled, the time stamp of the directory is used instead.
2133 This flag is
2134 .Em @tty_tickets@
2135 by default.
2136 .It umask_override
2137 If set,
2138 .Nm sudo
2139 will set the umask as specified by
2140 .Em sudoers
2141 without modification.
2142 This makes it possible to specify a more permissive umask in
2143 .Em sudoers
2144 than the user's own umask and matches historical behavior.
2145 If
2146 .Em umask_override
2147 is not set,
2148 .Nm sudo
2149 will set the umask to be the union of the user's umask and what is specified in
2150 .Em sudoers .
2151 This flag is
2152 .Em @umask_override@
2153 by default.
2154 .It use_loginclass
2155 If set,
2156 .Nm sudo
2157 will apply the defaults specified for the target user's login class
2158 if one exists.
2159 Only available if
2160 .Nm sudo
2161 is configured with the
2162 .Li --with-logincap
2163 option.
2164 This flag is
2165 .Em off
2166 by default.
2167 .It use_pty
2168 If set,
2169 .Nm sudo
2170 will run the command in a pseudo-pty even if no I/O logging is being gone.
2171 A malicious program run under
2172 .Nm sudo
2173 could conceivably fork a background process that retains to the user's
2174 terminal device after the main program has finished executing.
2175 Use of this option will make that impossible.
2176 This flag is
2177 .Em off
2178 by default.
2179 .It utmp_runas
2180 If set,
2181 .Nm sudo
2182 will store the name of the runas user when updating the utmp (or utmpx) file.
2183 By default,
2184 .Nm sudo
2185 stores the name of the invoking user.
2186 This flag is
2187 .Em off
2188 by default.
2189 .It visiblepw
2190 By default,
2191 .Nm sudo
2192 will refuse to run if the user must enter a password but it is not
2193 possible to disable echo on the terminal.
2194 If the
2195 .Em visiblepw
2196 flag is set,
2197 .Nm sudo
2198 will prompt for a password even when it would be visible on the screen.
2199 This makes it possible to run things like
2200 .Dq Li ssh somehost sudo ls
2201 since by default,
2202 .Xr ssh 1
2203 does
2204 not allocate a tty when running a command.
2205 This flag is
2206 .Em off
2207 by default.
2208 .El
2209 .Pp
2210 .Sy Integers :
2211 .Bl -tag -width 16n
2212 .It closefrom
2213 Before it executes a command,
2214 .Nm sudo
2215 will close all open file descriptors other than standard input,
2216 standard output and standard error (ie: file descriptors 0-2).
2217 The
2218 .Em closefrom
2219 option can be used to specify a different file descriptor at which
2220 to start closing.
2221 The default is
2222 .Li 3 .
2223 .It passwd_tries
2224 The number of tries a user gets to enter his/her password before
2225 .Nm sudo
2226 logs the failure and exits.
2227 The default is
2228 .Li @passwd_tries@ .
2229 .El
2230 .Pp
2231 .Sy Integers that can be used in a boolean context :
2232 .Bl -tag -width 16n
2233 .It loglinelen
2234 Number of characters per line for the file log.
2235 This value is used to decide when to wrap lines for nicer log files.
2236 This has no effect on the syslog log file, only the file log.
2237 The default is
2238 .Li @loglen@
2239 (use 0 or negate the option to disable word wrap).
2240 .It passwd_timeout
2241 Number of minutes before the
2242 .Nm sudo
2243 password prompt times out, or
2244 .Li 0
2245 for no timeout.
2246 The timeout may include a fractional component
2247 if minute granularity is insufficient, for example
2248 .Li 2.5 .
2249 The
2250 default is
2251 .Li @password_timeout@ .
2252 .It timestamp_timeout
2253 Number of minutes that can elapse before
2254 .Nm sudo
2255 will ask for a passwd again.
2256 The timeout may include a fractional component if
2257 minute granularity is insufficient, for example
2258 .Li 2.5 .
2259 The default is
2260 .Li @timeout@ .
2261 Set this to
2262 .Li 0
2263 to always prompt for a password.
2264 If set to a value less than
2265 .Li 0
2266 the user's time stamp will never expire.
2267 This can be used to allow users to create or delete their own time stamps via
2268 .Dq Li sudo -v
2269 and
2270 .Dq Li sudo -k
2271 respectively.
2272 .It umask
2273 Umask to use when running the command.
2274 Negate this option or set it to 0777 to preserve the user's umask.
2275 The actual umask that is used will be the union of the user's umask
2276 and the value of the
2277 .Em umask
2278 option, which defaults to
2279 .Li @sudo_umask@ .
2280 This guarantees
2281 that
2282 .Nm sudo
2283 never lowers the umask when running a command.
2284 Note: on systems that use PAM, the default PAM configuration may specify
2285 its own umask which will override the value set in
2286 .Em sudoers .
2287 .El
2288 .Pp
2289 .Sy Strings :
2290 .Bl -tag -width 16n
2291 .It badpass_message
2292 Message that is displayed if a user enters an incorrect password.
2293 The default is
2294 .Li @badpass_message@
2295 unless insults are enabled.
2296 .It editor
2297 A colon
2298 .Pq Ql :\&
2299 separated list of editors allowed to be used with
2300 .Nm visudo .
2301 .Nm visudo
2302 will choose the editor that matches the user's
2303 .Ev EDITOR
2304 environment variable if possible, or the first editor in the
2305 list that exists and is executable.
2306 The default is
2307 .Pa @editor@ .
2308 .It iolog_dir
2309 The top-level directory to use when constructing the path name for
2310 the input/output log directory.
2311 Only used if the
2312 .Em log_input
2313 or
2314 .Em log_output
2315 options are enabled or when the
2316 .Li LOG_INPUT
2317 or
2318 .Li LOG_OUTPUT
2319 tags are present for a command.
2320 The session sequence number, if any, is stored in the directory.
2321 The default is
2322 .Pa @iolog_dir@ .
2323 .Pp
2324 The following percent
2325 .Pq Ql %
2326 escape sequences are supported:
2327 .Bl -tag -width 4n
2328 .It Li %{seq}
2329 expanded to a monotonically increasing base-36 sequence number, such as 0100A5,
2330 where every two digits are used to form a new directory, e.g.\&
2331 .Pa 01/00/A5
2332 .It Li %{user}
2333 expanded to the invoking user's login name
2334 .It Li %{group}
2335 expanded to the name of the invoking user's real group ID
2336 .It Li %{runas_user}
2337 expanded to the login name of the user the command will
2338 be run as (e.g.\& root)
2339 .It Li %{runas_group}
2340 expanded to the group name of the user the command will
2341 be run as (e.g.\& wheel)
2342 .It Li %{hostname}
2343 expanded to the local host name without the domain name
2344 .It Li %{command}
2345 expanded to the base name of the command being run
2346 .El
2347 .Pp
2348 In addition, any escape sequences supported by the system's
2349 .Xr strftime 3
2350 function will be expanded.
2351 .Pp
2352 To include a literal
2353 .Ql %
2354 character, the string
2355 .Ql %%
2356 should be used.
2357 .It iolog_file
2358 The path name, relative to
2359 .Em iolog_dir ,
2360 in which to store input/output logs when the
2361 .Em log_input
2362 or
2363 .Em log_output
2364 options are enabled or when the
2365 .Li LOG_INPUT
2366 or
2367 .Li LOG_OUTPUT
2368 tags are present for a command.
2369 Note that
2370 .Em iolog_file
2371 may contain directory components.
2372 The default is
2373 .Dq Li %{seq} .
2374 .Pp
2375 See the
2376 .Em iolog_dir
2377 option above for a list of supported percent
2378 .Pq Ql %
2379 escape sequences.
2380 .Pp
2381 In addition to the escape sequences, path names that end in six or
2382 more
2383 .Li X Ns No s
2384 will have the
2385 .Li X Ns No s
2386 replaced with a unique combination of digits and letters, similar to the
2387 .Xr mktemp 3
2388 function.
2389 .It limitprivs
2390 The default Solaris limit privileges to use when constructing a new
2391 privilege set for a command.
2392 This bounds all privileges of the executing process.
2393 The default limit privileges may be overridden on a per-command basis in
2394 .Em sudoers .
2395 This option is only available if
2396 .Nm
2397 is built on Solaris 10 or higher.
2398 .It mailsub
2399 Subject of the mail sent to the
2400 .Em mailto
2401 user.
2402 The escape
2403 .Li %h
2404 will expand to the host name of the machine.
2405 Default is
2406 .Dq Li @mailsub@ .
2407 .It noexec_file
2408 This option is no longer supported.
2409 The path to the noexec file should now be set in the
2410 .Pa @sysconfdir@/sudo.conf
2411 file.
2412 .It passprompt
2413 The default prompt to use when asking for a password; can be overridden via the
2414 .Fl p
2415 option or the
2416 .Ev SUDO_PROMPT
2417 environment variable.
2418 The following percent
2419 .Pq Ql %
2420 escape sequences are supported:
2421 .Bl -tag -width 4n
2422 .It Li %H
2423 expanded to the local host name including the domain name
2424 (only if the machine's host name is fully qualified or the
2425 .Em fqdn
2426 option is set)
2427 .It Li %h
2428 expanded to the local host name without the domain name
2429 .It Li %p
2430 expanded to the user whose password is being asked for (respects the
2431 .Em rootpw ,
2432 .Em targetpw
2433 and
2434 .Em runaspw
2435 flags in
2436 .Em sudoers )
2437 .It Li \&%U
2438 expanded to the login name of the user the command will
2439 be run as (defaults to root)
2440 .It Li %u
2441 expanded to the invoking user's login name
2442 .It Li %%
2443 two consecutive
2444 .Li %
2445 characters are collapsed into a single
2446 .Li %
2447 character
2448 .El
2449 .Pp
2450 The default value is
2451 .Dq Li @passprompt@ .
2452 .It privs
2453 The default Solaris privileges to use when constructing a new
2454 privilege set for a command.
2455 This is passed to the executing process via the inherited privilege set,
2456 but is bounded by the limit privileges.
2457 If the
2458 .Em privs
2459 option is specified but the
2460 .Em limitprivs
2461 option is not, the limit privileges of the executing process is set to
2462 .Em privs .
2463 The default privileges may be overridden on a per-command basis in
2464 .Em sudoers .
2465 This option is only available if
2466 .Nm
2467 is built on Solaris 10 or higher.
2468 .It role
2469 The default SELinux role to use when constructing a new security
2470 context to run the command.
2471 The default role may be overridden on a per-command basis in
2472 .Em sudoers
2473 or via command line options.
2474 This option is only available when
2475 .Nm sudo
2476 is built with SELinux support.
2477 .It runas_default
2478 The default user to run commands as if the
2479 .Fl u
2480 option is not specified on the command line.
2481 This defaults to
2482 .Li @runas_default@ .
2483 .It syslog_badpri
2484 Syslog priority to use when user authenticates unsuccessfully.
2485 Defaults to
2486 .Li @badpri@ .
2487 .Pp
2488 The following syslog priorities are supported:
2489 .Sy alert ,
2490 .Sy crit ,
2491 .Sy debug ,
2492 .Sy emerg ,
2493 .Sy err ,
2494 .Sy info ,
2495 .Sy notice ,
2496 and
2497 .Sy warning .
2498 .It syslog_goodpri
2499 Syslog priority to use when user authenticates successfully.
2500 Defaults to
2501 .Li @goodpri@ .
2502 .Pp
2503 See
2504 .Sx syslog_badpri
2505 for the list of supported syslog priorities.
2506 .It sudoers_locale
2507 Locale to use when parsing the sudoers file, logging commands, and
2508 sending email.
2509 Note that changing the locale may affect how sudoers is interpreted.
2510 Defaults to
2511 .Dq Li C .
2512 .It timestampdir
2513 The directory in which
2514 .Nm sudo
2515 stores its time stamp files.
2516 The default is
2517 .Pa @timedir@ .
2518 .It timestampowner
2519 The owner of the time stamp directory and the time stamps stored therein.
2520 The default is
2521 .Li root .
2522 .It type
2523 The default SELinux type to use when constructing a new security
2524 context to run the command.
2525 The default type may be overridden on a per-command basis in
2526 .Em sudoers
2527 or via command line options.
2528 This option is only available when
2529 .Nm sudo
2530 is built with SELinux support.
2531 .El
2532 .Pp
2533 .Sy Strings that can be used in a boolean context :
2534 .Bl -tag -width 12n
2535 .It env_file
2536 The
2537 .Em env_file
2538 option specifies the fully qualified path to a file containing variables
2539 to be set in the environment of the program being run.
2540 Entries in this file should either be of the form
2541 .Dq Li VARIABLE=value
2542 or
2543 .Dq Li export VARIABLE=value .
2544 The value may optionally be surrounded by single or double quotes.
2545 Variables in this file are subject to other
2546 .Nm sudo
2547 environment settings such as
2548 .Em env_keep
2549 and
2550 .Em env_check .
2551 .It exempt_group
2552 Users in this group are exempt from password and PATH requirements.
2553 The group name specified should not include a
2554 .Li %
2555 prefix.
2556 This is not set by default.
2557 .It group_plugin
2558 A string containing a
2559 .Em sudoers
2560 group plugin with optional arguments.
2561 This can be used to implement support for the
2562 .Li nonunix_group
2563 syntax described earlier.
2564 The string should consist of the plugin
2565 path, either fully-qualified or relative to the
2566 .Pa @prefix@/libexec
2567 directory, followed by any configuration arguments the plugin requires.
2568 These arguments (if any) will be passed to the plugin's initialization function.
2569 If arguments are present, the string must be enclosed in double quotes
2570 .Pq \&"" .
2571 .Pp
2572 For example, given
2573 .Pa /etc/sudo-group ,
2574 a group file in Unix group format, the sample group plugin can be used:
2575 .Bd -literal
2576 Defaults group_plugin="sample_group.so /etc/sudo-group"
2577 .Ed
2578 .Pp
2579 For more information see
2580 .Xr sudo_plugin @mansectform@ .
2581 .It lecture
2582 This option controls when a short lecture will be printed along with
2583 the password prompt.
2584 It has the following possible values:
2585 .Bl -tag -width 6n
2586 .It always
2587 Always lecture the user.
2588 .It never
2589 Never lecture the user.
2590 .It once
2591 Only lecture the user the first time they run
2592 .Nm sudo .
2593 .El
2594 .Pp
2595 If no value is specified, a value of
2596 .Em once
2597 is implied.
2598 Negating the option results in a value of
2599 .Em never
2600 being used.
2601 The default value is
2602 .Em @lecture@ .
2603 .It lecture_file
2604 Path to a file containing an alternate
2605 .Nm sudo
2606 lecture that will be used in place of the standard lecture if the named
2607 file exists.
2608 By default,
2609 .Nm sudo
2610 uses a built-in lecture.
2611 .It listpw
2612 This option controls when a password will be required when a user runs
2613 .Nm sudo
2614 with the
2615 .Fl l
2616 option.
2617 It has the following possible values:
2618 .Bl -tag -width 8n
2619 .It all
2620 All the user's
2621 .Em sudoers
2622 entries for the current host must have
2623 the
2624 .Li NOPASSWD
2625 flag set to avoid entering a password.
2626 .It always
2627 The user must always enter a password to use the
2628 .Fl l
2629 option.
2630 .It any
2631 At least one of the user's
2632 .Em sudoers
2633 entries for the current host
2634 must have the
2635 .Li NOPASSWD
2636 flag set to avoid entering a password.
2637 .It never
2638 The user need never enter a password to use the
2639 .Fl l
2640 option.
2641 .El
2642 .Pp
2643 If no value is specified, a value of
2644 .Em any
2645 is implied.
2646 Negating the option results in a value of
2647 .Em never
2648 being used.
2649 The default value is
2650 .Em any .
2651 .It logfile
2652 Path to the
2653 .Nm sudo
2654 log file (not the syslog log file).
2655 Setting a path turns on logging to a file;
2656 negating this option turns it off.
2657 By default,
2658 .Nm sudo
2659 logs via syslog.
2660 .It mailerflags
2661 Flags to use when invoking mailer. Defaults to
2662 .Fl t .
2663 .It mailerpath
2664 Path to mail program used to send warning mail.
2665 Defaults to the path to sendmail found at configure time.
2666 .It mailfrom
2667 Address to use for the
2668 .Dq from
2669 address when sending warning and error mail.
2670 The address should be enclosed in double quotes
2671 .Pq \&""
2672 to protect against
2673 .Nm sudo
2674 interpreting the
2675 .Li @
2676 sign.
2677 Defaults to the name of the user running
2678 .Nm sudo .
2679 .It mailto
2680 Address to send warning and error mail to.
2681 The address should be enclosed in double quotes
2682 .Pq \&""
2683 to protect against
2684 .Nm sudo
2685 interpreting the
2686 .Li @
2687 sign.
2688 Defaults to
2689 .Li @mailto@ .
2690 .It secure_path
2691 Path used for every command run from
2692 .Nm sudo .
2693 If you don't trust the
2694 people running
2695 .Nm sudo
2696 to have a sane
2697 .Ev PATH
2698 environment variable you may want to use this.
2699 Another use is if you want to have the
2700 .Dq root path
2701 be separate from the
2702 .Dq user path .
2703 Users in the group specified by the
2704 .Em exempt_group
2705 option are not affected by
2706 .Em secure_path .
2707 This option is @secure_path@ by default.
2708 .It syslog
2709 Syslog facility if syslog is being used for logging (negate to
2710 disable syslog logging).
2711 Defaults to
2712 .Li @logfac@ .
2713 .Pp
2714 The following syslog facilities are supported:
2715 .Sy authpriv
2716 (if your
2717 OS supports it),
2718 .Sy auth ,
2719 .Sy daemon ,
2720 .Sy user ,
2721 .Sy local0 ,
2722 .Sy local1 ,
2723 .Sy local2 ,
2724 .Sy local3 ,
2725 .Sy local4 ,
2726 .Sy local5 ,
2727 .Sy local6 ,
2728 and
2729 .Sy local7 .
2730 .It verifypw
2731 This option controls when a password will be required when a user runs
2732 .Nm sudo
2733 with the
2734 .Fl v
2735 option.
2736 It has the following possible values:
2737 .Bl -tag -width 6n
2738 .It all
2739 All the user's
2740 .Em sudoers
2741 entries for the current host must have the
2742 .Li NOPASSWD
2743 flag set to avoid entering a password.
2744 .It always
2745 The user must always enter a password to use the
2746 .Fl v
2747 option.
2748 .It any
2749 At least one of the user's
2750 .Em sudoers
2751 entries for the current host must have the
2752 .Li NOPASSWD
2753 flag set to avoid entering a password.
2754 .It never
2755 The user need never enter a password to use the
2756 .Fl v
2757 option.
2758 .El
2759 .Pp
2760 If no value is specified, a value of
2761 .Em all
2762 is implied.
2763 Negating the option results in a value of
2764 .Em never
2765 being used.
2766 The default value is
2767 .Em all .
2768 .El
2769 .Pp
2770 .Sy Lists that can be used in a boolean context :
2771 .Bl -tag -width 16n
2772 .It env_check
2773 Environment variables to be removed from the user's environment if
2774 the variable's value contains
2775 .Ql %
2776 or
2777 .Ql /
2778 characters.
2779 This can be used to guard against printf-style format vulnerabilities
2780 in poorly-written programs.
2781 The argument may be a double-quoted, space-separated list or a
2782 single value without double-quotes.
2783 The list can be replaced, added to, deleted from, or disabled by using
2784 the
2785 .Li = ,
2786 .Li += ,
2787 .Li -= ,
2788 and
2789 .Li \&!
2790 operators respectively.
2791 Regardless of whether the
2792 .Li env_reset
2793 option is enabled or disabled, variables specified by
2794 .Li env_check
2795 will be preserved in the environment if they pass the aforementioned check.
2796 The default list of environment variables to check is displayed when
2797 .Nm sudo
2798 is run by root with
2799 the
2800 .Fl V
2801 option.
2802 .It env_delete
2803 Environment variables to be removed from the user's environment when the
2804 .Em env_reset
2805 option is not in effect.
2806 The argument may be a double-quoted, space-separated list or a
2807 single value without double-quotes.
2808 The list can be replaced, added to, deleted from, or disabled by using the
2809 .Li = ,
2810 .Li += ,
2811 .Li -= ,
2812 and
2813 .Li \&!
2814 operators respectively.
2815 The default list of environment variables to remove is displayed when
2816 .Nm sudo
2817 is run by root with the
2818 .Fl V
2819 option.
2820 Note that many operating systems will remove potentially dangerous
2821 variables from the environment of any setuid process (such as
2822 .Nm sudo ) .
2823 .It env_keep
2824 Environment variables to be preserved in the user's environment when the
2825 .Em env_reset
2826 option is in effect.
2827 This allows fine-grained control over the environment
2828 .Nm sudo Ns No -spawned
2829 processes will receive.
2830 The argument may be a double-quoted, space-separated list or a
2831 single value without double-quotes.
2832 The list can be replaced, added to, deleted from, or disabled by using the
2833 .Li = ,
2834 .Li += ,
2835 .Li -= ,
2836 and
2837 .Li \&!
2838 operators respectively.
2839 The default list of variables to keep
2840 is displayed when
2841 .Nm sudo
2842 is run by root with the
2843 .Fl V
2844 option.
2845 .El
2846 .Sh LOG FORMAT
2847 .Nm sudoers
2848 can log events using either
2849 .Xr syslog 3
2850 or a simple log file.
2851 In each case the log format is almost identical.
2852 .Ss Accepted command log entries
2853 Commands that sudo runs are logged using the following format (split
2854 into multiple lines for readability):
2855 .Bd -literal -offset 4n
2856 date hostname progname: username : TTY=ttyname ; PWD=cwd ; \e
2857     USER=runasuser ; GROUP=runasgroup ; TSID=logid ; \e
2858     ENV=env_vars COMMAND=command
2859 .Ed
2860 .Pp
2861 Where the fields are as follows:
2862 .Bl -tag -width 12n
2863 .It date
2864 The date the command was run.
2865 Typically, this is in the format
2866 .Dq MMM, DD, HH:MM:SS .
2867 If logging via
2868 .Xr syslog 3 ,
2869 the actual date format is controlled by the syslog daemon.
2870 If logging to a file and the
2871 .Em log_year
2872 option is enabled,
2873 the date will also include the year.
2874 .It hostname
2875 The name of the host
2876 .Nm sudo
2877 was run on.
2878 This field is only present when logging via
2879 .Xr syslog 3 .
2880 .It progname
2881 The name of the program, usually
2882 .Em sudo
2883 or
2884 .Em sudoedit .
2885 This field is only present when logging via
2886 .Xr syslog 3 .
2887 .It username
2888 The login name of the user who ran
2889 .Nm sudo .
2890 .It ttyname
2891 The short name of the terminal (e.g.\&
2892 .Dq console ,
2893 .Dq tty01 ,
2894 or
2895 .Dq pts/0 )
2896 .Nm sudo
2897 was run on, or
2898 .Dq unknown
2899 if there was no terminal present.
2900 .It cwd
2901 The current working directory that
2902 .Nm sudo
2903 was run in.
2904 .It runasuser
2905 The user the command was run as.
2906 .It runasgroup
2907 The group the command was run as if one was specified on the command line.
2908 .It logid
2909 An I/O log identifier that can be used to replay the command's output.
2910 This is only present when the
2911 .Em log_input
2912 or
2913 .Em log_output
2914 option is enabled.
2915 .It env_vars
2916 A list of environment variables specified on the command line,
2917 if specified.
2918 .It command
2919 The actual command that was executed.
2920 .El
2921 .Pp
2922 Messages are logged using the locale specified by
2923 .Em sudoers_locale ,
2924 which defaults to the
2925 .Dq Li C
2926 locale.
2927 .Ss Denied command log entries
2928 If the user is not allowed to run the command, the reason for the denial
2929 will follow the user name.
2930 Possible reasons include:
2931 .Bl -tag -width 4
2932 .It user NOT in sudoers
2933 The user is not listed in the
2934 .Em sudoers
2935 file.
2936 .It user NOT authorized on host
2937 The user is listed in the
2938 .Em sudoers
2939 file but is not allowed to run commands on the host.
2940 .It command not allowed
2941 The user is listed in the
2942 .Em sudoers
2943 file for the host but they are not allowed to run the specified command.
2944 .It 3 incorrect password attempts
2945 The user failed to enter their password after 3 tries.
2946 The actual number of tries will vary based on the number of
2947 failed attempts and the value of the
2948 .Em passwd_tries
2949 option.
2950 .It a password is required
2951 .Nm sudo Ns No 's
2952 .Fl n
2953 option was specified but a password was required.
2954 .It sorry, you are not allowed to set the following environment variables
2955 The user specified environment variables on the command line that
2956 were not allowed by
2957 .Em sudoers .
2958 .El
2959 .Ss Error log entries
2960 If an error occurs,
2961 .Nm sudoers
2962 will log a message and, in most cases, send a message to the
2963 administrator via email.
2964 Possible errors include:
2965 .Bl -tag -width 4
2966 .It parse error in @sysconfdir@/sudoers near line N
2967 .Nm sudoers
2968 encountered an error when parsing the specified file.
2969 In some cases, the actual error may be one line above or below the
2970 line number listed, depending on the type of error.
2971 .It problem with defaults entries
2972 The
2973 .Em sudoers
2974 file contains one or more unknown Defaults settings.
2975 This does not prevent
2976 .Nm sudo
2977 from running, but the
2978 .Em sudoers
2979 file should be checked using
2980 .Nm visudo .
2981 .It timestamp owner (username): \&No such user
2982 The time stamp directory owner, as specified by the
2983 .Em timestampowner
2984 setting, could not be found in the password database.
2985 .It unable to open/read @sysconfdir@/sudoers
2986 The
2987 .Em sudoers
2988 file could not be opened for reading.
2989 This can happen when the
2990 .Em sudoers
2991 file is located on a remote file system that maps user ID 0 to
2992 a different value.
2993 Normally,
2994 .Nm sudoers
2995 tries to open
2996 .Em sudoers
2997 using group permissions to avoid this problem.
2998 Consider changing the ownership of
2999 .Pa @sysconfdir@/sudoers
3000 by adding an option like
3001 .Dq sudoers_uid=N
3002 (where
3003 .Sq N
3004 is the user ID that owns the
3005 .Em sudoers
3006 file) to the
3007 .Nm sudoers
3008 plugin line in the
3009 .Pa @sysconfdir@/sudo.conf
3010 file.
3011 .It unable to stat @sysconfdir@/sudoers
3012 The
3013 .Pa @sysconfdir@/sudoers
3014 file is missing.
3015 .It @sysconfdir@/sudoers is not a regular file
3016 The
3017 .Pa @sysconfdir@/sudoers
3018 file exists but is not a regular file or symbolic link.
3019 .It @sysconfdir@/sudoers is owned by uid N, should be 0
3020 The
3021 .Em sudoers
3022 file has the wrong owner.
3023 If you wish to change the
3024 .Em sudoers
3025 file owner, please add
3026 .Dq sudoers_uid=N
3027 (where
3028 .Sq N
3029 is the user ID that owns the
3030 .Em sudoers
3031 file) to the
3032 .Nm sudoers
3033 plugin line in the
3034 .Pa @sysconfdir@/sudo.conf
3035 file.
3036 .It @sysconfdir@/sudoers is world writable
3037 The permissions on the
3038 .Em sudoers
3039 file allow all users to write to it.
3040 The
3041 .Em sudoers
3042 file must not be world-writable, the default file mode
3043 is 0440 (readable by owner and group, writable by none).
3044 The default mode may be changed via the
3045 .Dq sudoers_mode
3046 option to the
3047 .Nm sudoers
3048 plugin line in the
3049 .Pa @sysconfdir@/sudo.conf
3050 file.
3051 .It @sysconfdir@/sudoers is owned by gid N, should be 1
3052 The
3053 .Em sudoers
3054 file has the wrong group ownership.
3055 If you wish to change the
3056 .Em sudoers
3057 file group ownership, please add
3058 .Dq sudoers_gid=N
3059 (where
3060 .Sq N
3061 is the group ID that owns the
3062 .Em sudoers
3063 file) to the
3064 .Nm sudoers
3065 plugin line in the
3066 .Pa @sysconfdir@/sudo.conf
3067 file.
3068 .It unable to open @timedir@/username/ttyname
3069 .Em sudoers
3070 was unable to read or create the user's time stamp file.
3071 .It unable to write to @timedir@/username/ttyname
3072 .Em sudoers
3073 was unable to write to the user's time stamp file.
3074 .It unable to mkdir to @timedir@/username
3075 .Em sudoers
3076 was unable to create the user's time stamp directory.
3077 .El
3078 .Ss Notes on logging via syslog
3079 By default,
3080 .Em sudoers
3081 logs messages via
3082 .Xr syslog 3 .
3083 The
3084 .Em date ,
3085 .Em hostname ,
3086 and
3087 .Em progname
3088 fields are added by the syslog daemon, not
3089 .Em sudoers
3090 itself.
3091 As such, they may vary in format on different systems.
3092 .Pp
3093 On most systems,
3094 .Xr syslog 3
3095 has a relatively small log buffer.
3096 To prevent the command line arguments from being truncated,
3097 .Nm sudoers
3098 will split up log messages that are larger than 960 characters
3099 (not including the date, hostname, and the string
3100 .Dq sudo ) .
3101 When a message is split, additional parts will include the string
3102 .Dq Pq command continued
3103 after the user name and before the continued command line arguments.
3104 .Ss Notes on logging to a file
3105 If the
3106 .Em logfile
3107 option is set,
3108 .Em sudoers
3109 will log to a local file, such as
3110 .Pa /var/log/sudo .
3111 When logging to a file,
3112 .Em sudoers
3113 uses a format similar to
3114 .Xr syslog 3 ,
3115 with a few important differences:
3116 .Bl -enum
3117 .It
3118 The
3119 .Em progname
3120 and
3121 .Em hostname
3122 fields are not present.
3123 .It
3124 If the
3125 .Em log_year
3126 option is enabled,
3127 the date will also include the year.
3128 .It
3129 Lines that are longer than
3130 .Em loglinelen
3131 characters (80 by default) are word-wrapped and continued on the
3132 next line with a four character indent.
3133 This makes entries easier to read for a human being, but makes it
3134 more difficult to use
3135 .Xr grep 1
3136 on the log files.
3137 If the
3138 .Em loglinelen
3139 option is set to 0 (or negated with a
3140 .Ql \&! ) ,
3141 word wrap will be disabled.
3142 .El
3143 .Sh SUDO.CONF
3144 The
3145 .Pa @sysconfdir@/sudo.conf
3146 file determines which plugins the
3147 .Nm sudo
3148 front end will load.
3149 If no
3150 .Pa @sysconfdir@/sudo.conf
3151 file
3152 is present, or it contains no
3153 .Li Plugin
3154 lines,
3155 .Nm sudo
3156 will use the
3157 .Em sudoers
3158 security policy and I/O logging, which corresponds to the following
3159 .Pa @sysconfdir@/sudo.conf
3160 file.
3161 .Bd -literal
3162 #
3163 # Default @sysconfdir@/sudo.conf file
3164 #
3165 # Format:
3166 #   Plugin plugin_name plugin_path plugin_options ...
3167 #   Path askpass /path/to/askpass
3168 #   Path noexec /path/to/sudo_noexec.so
3169 #   Debug sudo /var/log/sudo_debug all@warn
3170 #   Set disable_coredump true
3171 #
3172 # The plugin_path is relative to @prefix@/libexec unless
3173 #   fully qualified.
3174 # The plugin_name corresponds to a global symbol in the plugin
3175 #   that contains the plugin interface structure.
3176 # The plugin_options are optional.
3177 #
3178 Plugin policy_plugin sudoers.so
3179 Plugin io_plugin sudoers.so
3180 .Ed
3181 .Ss Plugin options
3182 Starting with
3183 .Nm sudo
3184 1.8.5, it is possible to pass options to the
3185 .Em sudoers
3186 plugin.
3187 Options may be listed after the path to the plugin (i.e.\& after
3188 .Pa sudoers.so ) ;
3189 multiple options should be space-separated.
3190 For example:
3191 .Bd -literal
3192 Plugin sudoers_policy sudoers.so sudoers_file=/etc/sudoers sudoers_uid=0 sudoers_gid=0 sudoers_mode=0440
3193 .Ed
3194 .Pp
3195 The following plugin options are supported:
3196 .Bl -tag -width 8n
3197 .It sudoers_file=pathname
3198 The
3199 .Em sudoers_file
3200 option can be used to override the default path
3201 to the
3202 .Em sudoers
3203 file.
3204 .It sudoers_uid=uid
3205 The
3206 .Em sudoers_uid
3207 option can be used to override the default owner of the sudoers file.
3208 It should be specified as a numeric user ID.
3209 .It sudoers_gid=gid
3210 The
3211 .Em sudoers_gid
3212 option can be used to override the default group of the sudoers file.
3213 It should be specified as a numeric group ID.
3214 .It sudoers_mode=mode
3215 The
3216 .Em sudoers_mode
3217 option can be used to override the default file mode for the sudoers file.
3218 It should be specified as an octal value.
3219 .El
3220 .Ss Debug flags
3221 Versions 1.8.4 and higher of the
3222 .Em sudoers
3223 plugin supports a debugging framework that can help track down what the
3224 plugin is doing internally if there is a problem.
3225 This can be configured in the
3226 .Pa @sysconfdir@/sudo.conf
3227 file as described in
3228 .Xr sudo @mansectsu@ .
3229 .Pp
3230 The
3231 .Em sudoers
3232 plugin uses the same debug flag format as the
3233 .Nm sudo
3234 front-end:
3235 .Em subsystem Ns No @ Ns Em priority .
3236 .Pp
3237 The priorities used by
3238 .Em sudoers ,
3239 in order of decreasing severity,
3240 are:
3241 .Em crit ,
3242 .Em err ,
3243 .Em warn ,
3244 .Em notice ,
3245 .Em diag ,
3246 .Em info ,
3247 .Em trace
3248 and
3249 .Em debug .
3250 Each priority, when specified, also includes all priorities higher than it.
3251 For example, a priority of
3252 .Em notice
3253 would include debug messages logged at
3254 .Em notice
3255 and higher.
3256 .Pp
3257 The following subsystems are used by
3258 .Em sudoers :
3259 .Bl -tag -width 8n
3260 .It Em alias
3261 .Li User_Alias ,
3262 .Li Runas_Alias ,
3263 .Li Host_Alias
3264 and
3265 .Li Cmnd_Alias
3266 processing
3267 .It Em all
3268 matches every subsystem
3269 .It Em audit
3270 BSM and Linux audit code
3271 .It Em auth
3272 user authentication
3273 .It Em defaults
3274 .Em sudoers
3275 .Em Defaults
3276 settings
3277 .It Em env
3278 environment handling
3279 .It Em ldap
3280 LDAP-based sudoers
3281 .It Em logging
3282 logging support
3283 .It Em match
3284 matching of users, groups, hosts and netgroups in
3285 .Em sudoers
3286 .It Em netif
3287 network interface handling
3288 .It Em nss
3289 network service switch handling in
3290 .Em sudoers
3291 .It Em parser
3292 .Em sudoers
3293 file parsing
3294 .It Em perms
3295 permission setting
3296 .It Em plugin
3297 The equivalent of
3298 .Em main
3299 for the plugin.
3300 .It Em pty
3301 pseudo-tty related code
3302 .It Em rbtree
3303 redblack tree internals
3304 .It Em util
3305 utility functions
3306 .El
3307 .Sh FILES
3308 .Bl -tag -width 24n
3309 .It Pa @sysconfdir@/sudo.conf
3310 Sudo front end configuration
3311 .It Pa @sysconfdir@/sudoers
3312 List of who can run what
3313 .It Pa /etc/group
3314 Local groups file
3315 .It Pa /etc/netgroup
3316 List of network groups
3317 .It Pa @iolog_dir@
3318 I/O log files
3319 .It Pa @timedir@
3320 Directory containing time stamps for the
3321 .Em sudoers
3322 security policy
3323 .It Pa /etc/environment
3324 Initial environment for
3325 .Fl i
3326 mode on AIX and Linux systems
3327 .El
3328 .Sh EXAMPLES
3329 Below are example
3330 .Em sudoers
3331 entries.
3332 Admittedly, some of these are a bit contrived.
3333 First, we allow a few environment variables to pass and then define our
3334 .Em aliases :
3335 .Bd -literal
3336 # Run X applications through sudo; HOME is used to find the
3337 # .Xauthority file.  Note that other programs use HOME to find
3338 # configuration files and this may lead to privilege escalation!
3339 Defaults env_keep += "DISPLAY HOME"
3340
3341 # User alias specification
3342 User_Alias      FULLTIMERS = millert, mikef, dowdy
3343 User_Alias      PARTTIMERS = bostley, jwfox, crawl
3344 User_Alias      WEBMASTERS = will, wendy, wim
3345
3346 # Runas alias specification
3347 Runas_Alias     OP = root, operator
3348 Runas_Alias     DB = oracle, sybase
3349 Runas_Alias     ADMINGRP = adm, oper
3350
3351 # Host alias specification
3352 Host_Alias      SPARC = bigtime, eclipse, moet, anchor :\e
3353                 SGI = grolsch, dandelion, black :\e
3354                 ALPHA = widget, thalamus, foobar :\e
3355                 HPPA = boa, nag, python
3356 Host_Alias      CUNETS = 128.138.0.0/255.255.0.0
3357 Host_Alias      CSNETS = 128.138.243.0, 128.138.204.0/24, 128.138.242.0
3358 Host_Alias      SERVERS = master, mail, www, ns
3359 Host_Alias      CDROM = orion, perseus, hercules
3360
3361 # Cmnd alias specification
3362 Cmnd_Alias      DUMPS = /usr/bin/mt, /usr/sbin/dump, /usr/sbin/rdump,\e
3363                         /usr/sbin/restore, /usr/sbin/rrestore
3364 Cmnd_Alias      KILL = /usr/bin/kill
3365 Cmnd_Alias      PRINTING = /usr/sbin/lpc, /usr/bin/lprm
3366 Cmnd_Alias      SHUTDOWN = /usr/sbin/shutdown
3367 Cmnd_Alias      HALT = /usr/sbin/halt
3368 Cmnd_Alias      REBOOT = /usr/sbin/reboot
3369 Cmnd_Alias      SHELLS = /usr/bin/sh, /usr/bin/csh, /usr/bin/ksh,\e
3370                          /usr/local/bin/tcsh, /usr/bin/rsh,\e
3371                          /usr/local/bin/zsh
3372 Cmnd_Alias      SU = /usr/bin/su
3373 Cmnd_Alias      PAGERS = /usr/bin/more, /usr/bin/pg, /usr/bin/less
3374 .Ed
3375 .Pp
3376 Here we override some of the compiled in default values.
3377 We want
3378 .Nm sudo
3379 to log via
3380 .Xr syslog 3
3381 using the
3382 .Em auth
3383 facility in all cases.
3384 We don't want to subject the full time staff to the
3385 .Nm sudo
3386 lecture, user
3387 .Sy millert
3388 need not give a password, and we don't want to reset the
3389 .Ev LOGNAME ,
3390 .Ev USER
3391 or
3392 .Ev USERNAME
3393 environment variables when running commands as root.
3394 Additionally, on the machines in the
3395 .Em SERVERS
3396 .Li Host_Alias ,
3397 we keep an additional local log file and make sure we log the year
3398 in each log line since the log entries will be kept around for several years.
3399 Lastly, we disable shell escapes for the commands in the PAGERS
3400 .Li Cmnd_Alias
3401 .Po
3402 .Pa /usr/bin/more ,
3403 .Pa /usr/bin/pg
3404 and
3405 .Pa /usr/bin/less
3406 .Pc .
3407 .Bd -literal
3408 # Override built-in defaults
3409 Defaults                syslog=auth
3410 Defaults>root           !set_logname
3411 Defaults:FULLTIMERS     !lecture
3412 Defaults:millert        !authenticate
3413 Defaults@SERVERS        log_year, logfile=/var/log/sudo.log
3414 Defaults!PAGERS         noexec
3415 .Ed
3416 .Pp
3417 The
3418 .Em User specification
3419 is the part that actually determines who may run what.
3420 .Bd -literal
3421 root            ALL = (ALL) ALL
3422 %wheel          ALL = (ALL) ALL
3423 .Ed
3424 .Pp
3425 We let
3426 .Sy root
3427 and any user in group
3428 .Sy wheel
3429 run any command on any host as any user.
3430 .Bd -literal
3431 FULLTIMERS      ALL = NOPASSWD: ALL
3432 .Ed
3433 .Pp
3434 Full time sysadmins
3435 .Po
3436 .Sy millert ,
3437 .Sy mikef ,
3438 and
3439 .Sy dowdy
3440 .Pc
3441 may run any command on any host without authenticating themselves.
3442 .Bd -literal
3443 PARTTIMERS      ALL = ALL
3444 .Ed
3445 .Pp
3446 Part time sysadmins
3447 .Sy bostley ,
3448 .Sy jwfox ,
3449 and
3450 .Sy crawl )
3451 may run any command on any host but they must authenticate themselves
3452 first (since the entry lacks the
3453 .Li NOPASSWD
3454 tag).
3455 .Bd -literal
3456 jack            CSNETS = ALL
3457 .Ed
3458 .Pp
3459 The user
3460 .Sy jack
3461 may run any command on the machines in the
3462 .Em CSNETS
3463 alias (the networks
3464 .Li 128.138.243.0 ,
3465 .Li 128.138.204.0 ,
3466 and
3467 .Li 128.138.242.0 ) .
3468 Of those networks, only
3469 .Li 128.138.204.0
3470 has an explicit netmask (in CIDR notation) indicating it is a class C network.
3471 For the other networks in
3472 .Em CSNETS ,
3473 the local machine's netmask will be used during matching.
3474 .Bd -literal
3475 lisa            CUNETS = ALL
3476 .Ed
3477 .Pp
3478 The user
3479 .Sy lisa
3480 may run any command on any host in the
3481 .Em CUNETS
3482 alias (the class B network
3483 .Li 128.138.0.0 ) .
3484 .Bd -literal
3485 operator        ALL = DUMPS, KILL, SHUTDOWN, HALT, REBOOT, PRINTING,\e
3486                 sudoedit /etc/printcap, /usr/oper/bin/
3487 .Ed
3488 .Pp
3489 The
3490 .Sy operator
3491 user may run commands limited to simple maintenance.
3492 Here, those are commands related to backups, killing processes, the
3493 printing system, shutting down the system, and any commands in the
3494 directory
3495 .Pa /usr/oper/bin/ .
3496 .Bd -literal
3497 joe             ALL = /usr/bin/su operator
3498 .Ed
3499 .Pp
3500 The user
3501 .Sy joe
3502 may only
3503 .Xr su 1
3504 to operator.
3505 .Bd -literal
3506 pete            HPPA = /usr/bin/passwd [A-Za-z]*, !/usr/bin/passwd root
3507
3508 %opers          ALL = (: ADMINGRP) /usr/sbin/
3509 .Ed
3510 .Pp
3511 Users in the
3512 .Sy opers
3513 group may run commands in
3514 .Pa /usr/sbin/
3515 as themselves
3516 with any group in the
3517 .Em ADMINGRP
3518 .Li Runas_Alias
3519 (the
3520 .Sy adm
3521 and
3522 .Sy oper
3523 groups).
3524 .Pp
3525 The user
3526 .Sy pete
3527 is allowed to change anyone's password except for
3528 root on the
3529 .Em HPPA
3530 machines.
3531 Note that this assumes
3532 .Xr passwd 1
3533 does not take multiple user names on the command line.
3534 .Bd -literal
3535 bob             SPARC = (OP) ALL : SGI = (OP) ALL
3536 .Ed
3537 .Pp
3538 The user
3539 .Sy bob
3540 may run anything on the
3541 .Em SPARC
3542 and
3543 .Em SGI
3544 machines as any user listed in the
3545 .Em OP
3546 .Li Runas_Alias
3547 .Po
3548 .Sy root
3549 and
3550 .Sy operator .
3551 .Pc
3552 .Bd -literal
3553 jim             +biglab = ALL
3554 .Ed
3555 .Pp
3556 The user
3557 .Sy jim
3558 may run any command on machines in the
3559 .Em biglab
3560 netgroup.
3561 .Nm sudo
3562 knows that
3563 .Dq biglab
3564 is a netgroup due to the
3565 .Ql +
3566 prefix.
3567 .Bd -literal
3568 +secretaries    ALL = PRINTING, /usr/bin/adduser, /usr/bin/rmuser
3569 .Ed
3570 .Pp
3571 Users in the
3572 .Sy secretaries
3573 netgroup need to help manage the printers as well as add and remove users,
3574 so they are allowed to run those commands on all machines.
3575 .Bd -literal
3576 fred            ALL = (DB) NOPASSWD: ALL
3577 .Ed
3578 .Pp
3579 The user
3580 .Sy fred
3581 can run commands as any user in the
3582 .Em DB
3583 .Li Runas_Alias
3584 .Po
3585 .Sy oracle
3586 or
3587 .Sy sybase
3588 .Pc
3589 without giving a password.
3590 .Bd -literal
3591 john            ALPHA = /usr/bin/su [!-]*, !/usr/bin/su *root*
3592 .Ed
3593 .Pp
3594 On the
3595 .Em ALPHA
3596 machines, user
3597 .Sy john
3598 may su to anyone except root but he is not allowed to specify any options
3599 to the
3600 .Xr su 1
3601 command.
3602 .Bd -literal
3603 jen             ALL, !SERVERS = ALL
3604 .Ed
3605 .Pp
3606 The user
3607 .Sy jen
3608 may run any command on any machine except for those in the
3609 .Em SERVERS
3610 .Li Host_Alias
3611 (master, mail, www and ns).
3612 .Bd -literal
3613 jill            SERVERS = /usr/bin/, !SU, !SHELLS
3614 .Ed
3615 .Pp
3616 For any machine in the
3617 .Em SERVERS
3618 .Li Host_Alias ,
3619 .Sy jill
3620 may run
3621 any commands in the directory
3622 .Pa /usr/bin/
3623 except for those commands
3624 belonging to the
3625 .Em SU
3626 and
3627 .Em SHELLS
3628 .Li Cmnd_Aliases .
3629 .Bd -literal
3630 steve           CSNETS = (operator) /usr/local/op_commands/
3631 .Ed
3632 .Pp
3633 The user
3634 .Sy steve
3635 may run any command in the directory /usr/local/op_commands/
3636 but only as user operator.
3637 .Bd -literal
3638 matt            valkyrie = KILL
3639 .Ed
3640 .Pp
3641 On his personal workstation, valkyrie,
3642 .Sy matt
3643 needs to be able to kill hung processes.
3644 .Bd -literal
3645 WEBMASTERS      www = (www) ALL, (root) /usr/bin/su www
3646 .Ed
3647 .Pp
3648 On the host www, any user in the
3649 .Em WEBMASTERS
3650 .Li User_Alias
3651 (will, wendy, and wim), may run any command as user www (which owns the
3652 web pages) or simply
3653 .Xr su 1
3654 to www.
3655 .Bd -literal
3656 ALL             CDROM = NOPASSWD: /sbin/umount /CDROM,\e
3657                 /sbin/mount -o nosuid\,nodev /dev/cd0a /CDROM
3658 .Ed
3659 .Pp
3660 Any user may mount or unmount a CD-ROM on the machines in the CDROM
3661 .Li Host_Alias
3662 (orion, perseus, hercules) without entering a password.
3663 This is a bit tedious for users to type, so it is a prime candidate
3664 for encapsulating in a shell script.
3665 .Sh SECURITY NOTES
3666 .Ss Limitations of the So !\& Sc operator
3667 It is generally not effective to
3668 .Dq subtract
3669 commands from
3670 .Sy ALL
3671 using the
3672 .Ql !\&
3673 operator.
3674 A user can trivially circumvent this by copying the desired command
3675 to a different name and then executing that.
3676 For example:
3677 .Bd -literal
3678 bill    ALL = ALL, !SU, !SHELLS
3679 .Ed
3680 .Pp
3681 Doesn't really prevent
3682 .Sy bill
3683 from running the commands listed in
3684 .Em SU
3685 or
3686 .Em SHELLS
3687 since he can simply copy those commands to a different name, or use
3688 a shell escape from an editor or other program.
3689 Therefore, these kind of restrictions should be considered
3690 advisory at best (and reinforced by policy).
3691 .Pp
3692 In general, if a user has sudo
3693 .Sy ALL
3694 there is nothing to prevent them from creating their own program that gives
3695 them a root shell (or making their own copy of a shell) regardless of any
3696 .Ql !\&
3697 elements in the user specification.
3698 .Ss Security implications of Em fast_glob
3699 If the
3700 .Em fast_glob
3701 option is in use, it is not possible to reliably negate commands where the
3702 path name includes globbing (aka wildcard) characters.
3703 This is because the C library's
3704 .Xr fnmatch 3
3705 function cannot resolve relative paths.
3706 While this is typically only an inconvenience for rules that grant privileges,
3707 it can result in a security issue for rules that subtract or revoke privileges.
3708 .Pp
3709 For example, given the following
3710 .Em sudoers
3711 entry:
3712 .Bd -literal
3713 john    ALL = /usr/bin/passwd [a-zA-Z0-9]*, /usr/bin/chsh [a-zA-Z0-9]*,\e
3714               /usr/bin/chfn [a-zA-Z0-9]*, !/usr/bin/* root
3715 .Ed
3716 .Pp
3717 User
3718 .Sy john
3719 can still run
3720 .Li /usr/bin/passwd root
3721 if
3722 .Em fast_glob
3723 is enabled by changing to
3724 .Pa /usr/bin
3725 and running
3726 .Li ./passwd root
3727 instead.
3728 .Ss Preventing shell escapes
3729 Once
3730 .Nm sudo
3731 executes a program, that program is free to do whatever
3732 it pleases, including run other programs.
3733 This can be a security issue since it is not uncommon for a program to
3734 allow shell escapes, which lets a user bypass
3735 .Nm sudo Ns No 's
3736 access control and logging.
3737 Common programs that permit shell escapes include shells (obviously),
3738 editors, paginators, mail and terminal programs.
3739 .Pp
3740 There are two basic approaches to this problem:
3741 .Bl -tag -width 8n
3742 .It restrict
3743 Avoid giving users access to commands that allow the user to run
3744 arbitrary commands.
3745 Many editors have a restricted mode where shell
3746 escapes are disabled, though
3747 .Nm sudoedit
3748 is a better solution to
3749 running editors via
3750 .Nm sudo .
3751 Due to the large number of programs that
3752 offer shell escapes, restricting users to the set of programs that
3753 do not is often unworkable.
3754 .It noexec
3755 Many systems that support shared libraries have the ability to
3756 override default library functions by pointing an environment
3757 variable (usually
3758 .Ev LD_PRELOAD )
3759 to an alternate shared library.
3760 On such systems,
3761 .Nm sudo Ns No 's
3762 .Em noexec
3763 functionality can be used to prevent a program run by
3764 .Nm sudo
3765 from executing any other programs.
3766 Note, however, that this applies only to native dynamically-linked
3767 executables.
3768 Statically-linked executables and foreign executables
3769 running under binary emulation are not affected.
3770 .Pp
3771 The
3772 .Em noexec
3773 feature is known to work on SunOS, Solaris, *BSD,
3774 Linux, IRIX, Tru64 UNIX, MacOS X, HP-UX 11.x and AIX 5.3 and above.
3775 It should be supported on most operating systems that support the
3776 .Ev LD_PRELOAD
3777 environment variable.
3778 Check your operating system's manual pages for the dynamic linker
3779 (usually ld.so, ld.so.1, dyld, dld.sl, rld, or loader) to see if
3780 .Ev LD_PRELOAD
3781 is supported.
3782 .Pp
3783 On Solaris 10 and higher,
3784 .Em noexec
3785 uses Solaris privileges instead of the
3786 .Ev LD_PRELOAD
3787 environment variable.
3788 .Pp
3789 To enable
3790 .Em noexec
3791 for a command, use the
3792 .Li NOEXEC
3793 tag as documented
3794 in the User Specification section above.
3795 Here is that example again:
3796 .Bd -literal
3797 aaron   shanty = NOEXEC: /usr/bin/more, /usr/bin/vi
3798 .Ed
3799 .Pp
3800 This allows user
3801 .Sy aaron
3802 to run
3803 .Pa /usr/bin/more
3804 and
3805 .Pa /usr/bin/vi
3806 with
3807 .Em noexec
3808 enabled.
3809 This will prevent those two commands from
3810 executing other commands (such as a shell).
3811 If you are unsure whether or not your system is capable of supporting
3812 .Em noexec
3813 you can always just try it out and check whether shell escapes work when
3814 .Em noexec
3815 is enabled.
3816 .El
3817 .Pp
3818 Note that restricting shell escapes is not a panacea.
3819 Programs running as root are still capable of many potentially hazardous
3820 operations (such as changing or overwriting files) that could lead
3821 to unintended privilege escalation.
3822 In the specific case of an editor, a safer approach is to give the
3823 user permission to run
3824 .Nm sudoedit .
3825 .Ss Time stamp file checks
3826 .Em sudoers
3827 will check the ownership of its time stamp directory
3828 .Po
3829 .Pa @timedir@
3830 by default
3831 .Pc
3832 and ignore the directory's contents if it is not owned by root or
3833 if it is writable by a user other than root.
3834 On systems that allow non-root users to give away files via
3835 .Xr chown 2 ,
3836 if the time stamp directory is located in a world-writable
3837 directory (e.g.\&,
3838 .Pa /tmp ) ,
3839 it is possible for a user to create the time stamp directory before
3840 .Nm sudo
3841 is run.
3842 However, because
3843 .Em sudoers
3844 checks the ownership and mode of the directory and its
3845 contents, the only damage that can be done is to
3846 .Dq hide
3847 files by putting them in the time stamp dir.
3848 This is unlikely to happen since once the time stamp dir is owned by root
3849 and inaccessible by any other user, the user placing files there would be
3850 unable to get them back out.
3851 .Pp
3852 .Em sudoers
3853 will not honor time stamps set far in the future.
3854 Time stamps with a date greater than current_time + 2 *
3855 .Li TIMEOUT
3856 will be ignored and sudo will log and complain.
3857 This is done to keep a user from creating his/her own time stamp with a
3858 bogus date on systems that allow users to give away files if the time
3859 stamp directory is located in a world-writable directory.
3860 .Pp
3861 On systems where the boot time is available,
3862 .Em sudoers
3863 will ignore time stamps that date from before the machine booted.
3864 .Pp
3865 Since time stamp files live in the file system, they can outlive a
3866 user's login session.
3867 As a result, a user may be able to login, run a command with
3868 .Nm sudo
3869 after authenticating, logout, login again, and run
3870 .Nm sudo
3871 without authenticating so long as the time stamp file's modification
3872 time is within
3873 .Li @timeout@
3874 minutes (or whatever the timeout is set to in
3875 .Em sudoers ) .
3876 When the
3877 .Em tty_tickets
3878 option is enabled, the time stamp has per-tty granularity but still
3879 may outlive the user's session.
3880 On Linux systems where the devpts filesystem is used, Solaris systems
3881 with the devices filesystem, as well as other systems that utilize a
3882 devfs filesystem that monotonically increase the inode number of devices
3883 as they are created (such as Mac OS X),
3884 .Em sudoers
3885 is able to determine when a tty-based time stamp file is stale and will
3886 ignore it.
3887 Administrators should not rely on this feature as it is not universally
3888 available.
3889 .Sh SEE ALSO
3890 .Xr ssh 1 ,
3891 .Xr su 1 ,
3892 .Xr fnmatch 3 ,
3893 .Xr glob 3 ,
3894 .Xr mktemp 3 ,
3895 .Xr strftime 3 ,
3896 .Xr sudoers.ldap @mansectform@ ,
3897 .Xr sudo_plugin @mansectsu@ ,
3898 .Xr sudo @mansectsu@ ,
3899 .Xr visudo @mansectsu@
3900 .Sh CAVEATS
3901 The
3902 .Em sudoers
3903 file should
3904 .Sy always
3905 be edited by the
3906 .Nm visudo
3907 command which locks the file and does grammatical checking.
3908 It is
3909 imperative that
3910 .Em sudoers
3911 be free of syntax errors since
3912 .Nm sudo
3913 will not run with a syntactically incorrect
3914 .Em sudoers
3915 file.
3916 .Pp
3917 When using netgroups of machines (as opposed to users), if you
3918 store fully qualified host name in the netgroup (as is usually the
3919 case), you either need to have the machine's host name be fully qualified
3920 as returned by the
3921 .Li hostname
3922 command or use the
3923 .Em fqdn
3924 option in
3925 .Em sudoers .
3926 .Sh BUGS
3927 If you feel you have found a bug in
3928 .Nm sudo ,
3929 please submit a bug report at http://www.sudo.ws/sudo/bugs/
3930 .Sh SUPPORT
3931 Limited free support is available via the sudo-users mailing list,
3932 see http://www.sudo.ws/mailman/listinfo/sudo-users to subscribe or
3933 search the archives.
3934 .Sh DISCLAIMER
3935 .Nm sudo
3936 is provided
3937 .Dq AS IS
3938 and any express or implied warranties, including, but not limited
3939 to, the implied warranties of merchantability and fitness for a
3940 particular purpose are disclaimed.
3941 See the LICENSE file distributed with
3942 .Nm sudo
3943 or http://www.sudo.ws/sudo/license.html for complete details.