Annotation of embedaddon/sudo/doc/sudoers.mdoc.in, revision 1.1.1.1
1.1 misho 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.
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>