Annotation of embedaddon/sudo/doc/sudoers.mdoc.in, revision 1.1

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

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