File:  [ELWIX - Embedded LightWeight unIX -] / embedaddon / sudo / doc / sudoers.mdoc.in
Revision 1.1.1.2 (vendor branch): download - view: text, annotated - select for diffs - revision graph
Mon Jul 22 10:46:12 2013 UTC (10 years, 11 months ago) by misho
Branches: sudo, MAIN
CVS tags: v1_8_7p0, v1_8_7, HEAD
1.8.7

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

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