5354 lines
128 KiB
Plaintext
5354 lines
128 KiB
Plaintext
.\"
|
|
.\" Copyright (c) 1994-1996, 1998-2005, 2007-2018
|
|
.\" Todd C. Miller <Todd.Miller@sudo.ws>
|
|
.\"
|
|
.\" Permission to use, copy, modify, and distribute this software for any
|
|
.\" purpose with or without fee is hereby granted, provided that the above
|
|
.\" copyright notice and this permission notice appear in all copies.
|
|
.\"
|
|
.\" THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
|
|
.\" WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
|
|
.\" MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
|
|
.\" ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
|
|
.\" WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
|
|
.\" ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
|
|
.\" OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
|
.\" ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
.\"
|
|
.\" Sponsored in part by the Defense Advanced Research Projects
|
|
.\" Agency (DARPA) and Air Force Research Laboratory, Air Force
|
|
.\" Materiel Command, USAF, under agreement number F39502-99-1-0512.
|
|
.\"
|
|
.Dd August 7, 2018
|
|
.Dt SUDOERS @mansectform@
|
|
.Os Sudo @PACKAGE_VERSION@
|
|
.Sh NAME
|
|
.Nm sudoers
|
|
.Nd default sudo security policy plugin
|
|
.Sh DESCRIPTION
|
|
The
|
|
.Nm
|
|
policy plugin determines a user's
|
|
.Nm sudo
|
|
privileges.
|
|
It is the default
|
|
.Nm sudo
|
|
policy plugin.
|
|
The policy is driven by
|
|
the
|
|
.Pa @sysconfdir@/sudoers
|
|
file or, optionally in LDAP.
|
|
The policy format is described in detail in the
|
|
.Sx SUDOERS FILE FORMAT
|
|
section.
|
|
For information on storing
|
|
.Nm sudoers
|
|
policy information
|
|
in LDAP, please see
|
|
.Xr sudoers.ldap @mansectform@ .
|
|
.Ss Configuring sudo.conf for sudoers
|
|
.Nm sudo
|
|
consults the
|
|
.Xr sudo.conf @mansectform@
|
|
file to determine which policy and and I/O logging plugins to load.
|
|
If no
|
|
.Xr sudo.conf @mansectform@
|
|
file is present, or if it contains no
|
|
.Li Plugin
|
|
lines,
|
|
.Nm
|
|
will be used for policy decisions and I/O logging.
|
|
To explicitly configure
|
|
.Xr sudo.conf @mansectform@
|
|
to use the
|
|
.Nm
|
|
plugin, the following configuration can be used.
|
|
.Bd -literal -offset indent
|
|
Plugin sudoers_policy sudoers.so
|
|
Plugin sudoers_io sudoers.so
|
|
.Ed
|
|
.Pp
|
|
Starting with
|
|
.Nm sudo
|
|
1.8.5, it is possible to specify optional arguments to the
|
|
.Nm
|
|
plugin in the
|
|
.Xr sudo.conf @mansectform@
|
|
file.
|
|
These arguments, if present, should be listed after the path to the plugin
|
|
(i.e.\& after
|
|
.Pa sudoers.so ) .
|
|
Multiple arguments may be specified, separated by white space.
|
|
For example:
|
|
.Bd -literal -offset indent
|
|
Plugin sudoers_policy sudoers.so sudoers_mode=0400
|
|
.Ed
|
|
.Pp
|
|
The following plugin arguments are supported:
|
|
.Bl -tag -width 8n
|
|
.It ldap_conf=pathname
|
|
The
|
|
.Em ldap_conf
|
|
argument can be used to override the default path to the
|
|
.Pa ldap.conf
|
|
file.
|
|
.It ldap_secret=pathname
|
|
The
|
|
.Em ldap_secret
|
|
argument can be used to override the default path to the
|
|
.Pa ldap.secret
|
|
file.
|
|
.It sudoers_file=pathname
|
|
The
|
|
.Em sudoers_file
|
|
argument can be used to override the default path to the
|
|
.Em sudoers
|
|
file.
|
|
.It sudoers_uid=uid
|
|
The
|
|
.Em sudoers_uid
|
|
argument can be used to override the default owner of the sudoers file.
|
|
It should be specified as a numeric user ID.
|
|
.It sudoers_gid=gid
|
|
The
|
|
.Em sudoers_gid
|
|
argument can be used to override the default group of the sudoers file.
|
|
It must be specified as a numeric group ID (not a group name).
|
|
.It sudoers_mode=mode
|
|
The
|
|
.Em sudoers_mode
|
|
argument can be used to override the default file mode for the sudoers file.
|
|
It should be specified as an octal value.
|
|
.El
|
|
.Pp
|
|
For more information on configuring
|
|
.Xr sudo.conf @mansectform@ ,
|
|
please refer to its manual.
|
|
.Ss User Authentication
|
|
The
|
|
.Nm sudoers
|
|
security policy requires that most users authenticate
|
|
themselves before they can use
|
|
.Nm sudo .
|
|
A password is not required
|
|
if the invoking user is root, if the target user is the same as the
|
|
invoking user, or if the policy has disabled authentication for the
|
|
user or command.
|
|
Unlike
|
|
.Xr su 1 ,
|
|
when
|
|
.Nm sudoers
|
|
requires
|
|
authentication, it validates the invoking user's credentials, not
|
|
the target user's (or root's) credentials.
|
|
This can be changed via
|
|
the
|
|
.Em rootpw ,
|
|
.Em targetpw
|
|
and
|
|
.Em runaspw
|
|
flags, described later.
|
|
.Pp
|
|
If a user who is not listed in the policy tries to run a command
|
|
via
|
|
.Nm sudo ,
|
|
mail is sent to the proper authorities.
|
|
The address
|
|
used for such mail is configurable via the
|
|
.Em mailto
|
|
Defaults entry
|
|
(described later) and defaults to
|
|
.Li @mailto@ .
|
|
.Pp
|
|
Note that no mail will be sent if an unauthorized user tries to run
|
|
.Nm sudo
|
|
with the
|
|
.Fl l
|
|
or
|
|
.Fl v
|
|
option unless there is an authentication error and
|
|
either the
|
|
.Em mail_always
|
|
or
|
|
.Em mail_badpass
|
|
flags are enabled.
|
|
This allows users to
|
|
determine for themselves whether or not they are allowed to use
|
|
.Nm sudo .
|
|
All attempts to run
|
|
.Nm sudo
|
|
(successful or not)
|
|
will be logged, regardless of whether or not mail is sent.
|
|
.Pp
|
|
If
|
|
.Nm sudo
|
|
is run by root and the
|
|
.Ev SUDO_USER
|
|
environment variable
|
|
is set, the
|
|
.Nm sudoers
|
|
policy will use this value to determine who
|
|
the actual user is.
|
|
This can be used by a user to log commands
|
|
through sudo even when a root shell has been invoked.
|
|
It also
|
|
allows the
|
|
.Fl e
|
|
option to remain useful even when invoked via a
|
|
sudo-run script or program.
|
|
Note, however, that the
|
|
.Em sudoers
|
|
file lookup is still done for root, not the user specified by
|
|
.Ev SUDO_USER .
|
|
.Pp
|
|
.Nm sudoers
|
|
uses per-user time stamp files for credential caching.
|
|
Once a user has been authenticated, a record is written
|
|
containing the user ID that was used to authenticate, the
|
|
terminal session ID, the start time of the session leader
|
|
(or parent process) and a time stamp
|
|
(using a monotonic clock if one is available).
|
|
The user may then use
|
|
.Nm sudo
|
|
without a password for a short period of time
|
|
.Po
|
|
.Li @timeout@
|
|
minutes unless overridden by the
|
|
.Em timestamp_timeout
|
|
option
|
|
.Pc .
|
|
By default,
|
|
.Nm sudoers
|
|
uses a separate record for each terminal, which means that
|
|
a user's login sessions are authenticated separately.
|
|
The
|
|
.Em timestamp_type
|
|
option can be used to select the type of time stamp record
|
|
.Nm sudoers
|
|
will use.
|
|
.Ss Logging
|
|
.Nm sudoers
|
|
can log both successful and unsuccessful attempts (as well
|
|
as errors) to
|
|
.Xr syslog 3 ,
|
|
a log file, or both.
|
|
By default,
|
|
.Nm sudoers
|
|
will log via
|
|
.Xr syslog 3
|
|
but this is changeable via the
|
|
.Em syslog
|
|
and
|
|
.Em logfile
|
|
Defaults settings.
|
|
See
|
|
.Sx "LOG FORMAT"
|
|
for a description of the log file format.
|
|
.Pp
|
|
.Nm sudoers
|
|
is also capable of running a command in a pseudo-tty and logging all
|
|
input and/or output.
|
|
The standard input, standard output and standard error can be logged
|
|
even when not associated with a terminal.
|
|
I/O logging is not on by default but can be enabled using
|
|
the
|
|
.Em log_input
|
|
and
|
|
.Em log_output
|
|
options as well as the
|
|
.Li LOG_INPUT
|
|
and
|
|
.Li LOG_OUTPUT
|
|
command tags.
|
|
See
|
|
.Sx "I/O LOG FILES"
|
|
for details on how I/O log files are stored.
|
|
.Ss Command environment
|
|
Since environment variables can influence program behavior,
|
|
.Nm sudoers
|
|
provides a means to restrict which variables from the user's
|
|
environment are inherited by the command to be run.
|
|
There are two
|
|
distinct ways
|
|
.Nm sudoers
|
|
can deal with environment variables.
|
|
.Pp
|
|
By default, the
|
|
.Em env_reset
|
|
option is enabled.
|
|
This causes commands
|
|
to be executed with a new, minimal environment.
|
|
On AIX (and Linux
|
|
systems without PAM), the environment is initialized with the
|
|
contents of the
|
|
.Pa /etc/environment
|
|
file.
|
|
On BSD systems, if the
|
|
.Em use_loginclass
|
|
option is enabled, the environment is initialized
|
|
based on the
|
|
.Em path
|
|
and
|
|
.Em setenv
|
|
settings in
|
|
.Pa /etc/login.conf .
|
|
The new environment contains the
|
|
.Ev TERM ,
|
|
.Ev PATH ,
|
|
.Ev HOME ,
|
|
.Ev MAIL ,
|
|
.Ev SHELL ,
|
|
.Ev LOGNAME ,
|
|
.Ev USER ,
|
|
.Ev USERNAME
|
|
and
|
|
.Ev SUDO_*
|
|
variables
|
|
in addition to variables from the invoking process permitted by the
|
|
.Em env_check
|
|
and
|
|
.Em env_keep
|
|
options.
|
|
This is effectively a whitelist
|
|
for environment variables.
|
|
The environment variables
|
|
.Ev LOGNAME ,
|
|
.Ev USER
|
|
and
|
|
.Ev USERNAME
|
|
are treated specially.
|
|
If one or more variables are preserved from the invoking process,
|
|
any of the three remaining variables (that were not explicitly
|
|
preserved) will be set to the same value as the first one in the
|
|
list that was preserved.
|
|
This avoids an inconsistent environment where some of the variables
|
|
describing the user name are set to the invoking user and some are
|
|
set to the target user.
|
|
.Li ()
|
|
are removed unless both the name and value parts are matched by
|
|
.Em env_keep
|
|
or
|
|
.Em env_check ,
|
|
as they may be interpreted as functions by the
|
|
.Sy bash
|
|
shell.
|
|
Prior to version 1.8.11, such variables were always removed.
|
|
.Pp
|
|
If, however, the
|
|
.Em env_reset
|
|
option is disabled, any variables not
|
|
explicitly denied by the
|
|
.Em env_check
|
|
and
|
|
.Em env_delete
|
|
options are
|
|
inherited from the invoking process.
|
|
In this case,
|
|
.Em env_check
|
|
and
|
|
.Em env_delete
|
|
behave like a blacklist.
|
|
Prior to version 1.8.21, environment variables with a value beginning with
|
|
.Li ()
|
|
were always removed.
|
|
Beginning with version 1.8.21, a pattern in
|
|
.Em env_delete
|
|
is used to match
|
|
.Sy bash
|
|
shell functions instead.
|
|
Since it is not possible
|
|
to blacklist all potentially dangerous environment variables, use
|
|
of the default
|
|
.Em env_reset
|
|
behavior is encouraged.
|
|
.Pp
|
|
Environment variables specified by
|
|
.Em env_check ,
|
|
.Em env_delete ,
|
|
or
|
|
.Em env_keep
|
|
may include one or more
|
|
.Ql *
|
|
characters which will match zero or more characters.
|
|
No other wildcard characters are supported.
|
|
.Pp
|
|
By default, environment variables are matched by name.
|
|
However, if the pattern includes an equal sign
|
|
.Pq Ql =\& ,
|
|
both the variables name and value must match.
|
|
For example, a
|
|
.Sy bash
|
|
shell function could be matched as follows:
|
|
.Bd -literal -offset 4n
|
|
env_keep += "BASH_FUNC_my_func%%=()*"
|
|
.Ed
|
|
.Pp
|
|
Without the
|
|
.Dq Li =()*
|
|
suffix, this would not match, as
|
|
.Sy bash
|
|
shell functions are not preserved by default.
|
|
.Pp
|
|
The complete list of environment variables that
|
|
.Nm sudo
|
|
allows or denies is contained in the output of
|
|
.Dq Li sudo -V
|
|
when run as root.
|
|
Please note that this list varies based on the operating system
|
|
.Nm sudo
|
|
is running on.
|
|
.Pp
|
|
On systems that support PAM where the
|
|
.Sy pam_env
|
|
module is enabled for
|
|
.Nm sudo ,
|
|
variables in the PAM environment may be merged in to the environment.
|
|
If a variable in the PAM environment is already present in the
|
|
user's environment, the value will only be overridden if the variable
|
|
was not preserved by
|
|
.Nm .
|
|
When
|
|
.Em env_reset
|
|
is enabled, variables preserved from the invoking user's environment
|
|
by the
|
|
.Em env_keep
|
|
list take precedence over those in the PAM environment.
|
|
When
|
|
.Em env_reset
|
|
is disabled, variables present the invoking user's environment
|
|
take precedence over those in the PAM environment unless they
|
|
match a pattern in the
|
|
.Em env_delete
|
|
list.
|
|
.Pp
|
|
Note that the dynamic linker on most operating systems will remove
|
|
variables that can control dynamic linking from the environment of
|
|
setuid executables, including
|
|
.Nm sudo .
|
|
Depending on the operating
|
|
system this may include
|
|
.Ev _RLD* ,
|
|
.Ev DYLD_* ,
|
|
.Ev LD_* ,
|
|
.Ev LDR_* ,
|
|
.Ev LIBPATH ,
|
|
.Ev SHLIB_PATH ,
|
|
and others.
|
|
These type of variables are
|
|
removed from the environment before
|
|
.Nm sudo
|
|
even begins execution
|
|
and, as such, it is not possible for
|
|
.Nm sudo
|
|
to preserve them.
|
|
.Pp
|
|
As a special case, if
|
|
.Nm sudo Ns 's
|
|
.Fl i
|
|
option (initial login) is
|
|
specified,
|
|
.Nm sudoers
|
|
will initialize the environment regardless
|
|
of the value of
|
|
.Em env_reset .
|
|
The
|
|
.Ev DISPLAY ,
|
|
.Ev PATH
|
|
and
|
|
.Ev TERM
|
|
variables remain unchanged;
|
|
.Ev HOME ,
|
|
.Ev MAIL ,
|
|
.Ev SHELL ,
|
|
.Ev USER ,
|
|
and
|
|
.Ev LOGNAME
|
|
are set based on the target user.
|
|
On AIX (and Linux
|
|
systems without PAM), the contents of
|
|
.Pa /etc/environment
|
|
are also
|
|
included.
|
|
On BSD systems, if the
|
|
.Em use_loginclass
|
|
flag is
|
|
enabled, the
|
|
.Em path
|
|
and
|
|
.Em setenv
|
|
variables in
|
|
.Pa /etc/login.conf
|
|
are also applied.
|
|
All other environment variables are removed unless permitted by
|
|
.Em env_keep
|
|
or
|
|
.Em env_check ,
|
|
described above.
|
|
.Pp
|
|
Finally, the
|
|
.Em restricted_env_file
|
|
and
|
|
.Em env_file
|
|
files are applied, if present.
|
|
The variables in
|
|
.Em restricted_env_file
|
|
are applied first and are subject to the same restrictions as the
|
|
invoking user's environment, as detailed above.
|
|
The variables in
|
|
.Em env_file
|
|
are applied last and are not subject to these restrictions.
|
|
In both cases, variables present in the files will only be set to
|
|
their specified values if they would not conflict with an existing
|
|
environment variable.
|
|
.Sh SUDOERS FILE FORMAT
|
|
The
|
|
.Em sudoers
|
|
file is composed of two types of entries: aliases
|
|
(basically variables) and user specifications (which specify who
|
|
may run what).
|
|
.Pp
|
|
When multiple entries match for a user, they are applied in order.
|
|
Where there are multiple matches, the last match is used (which is
|
|
not necessarily the most specific match).
|
|
.Pp
|
|
The
|
|
.Em sudoers
|
|
file grammar will be described below in Extended Backus-Naur
|
|
Form (EBNF).
|
|
Don't despair if you are unfamiliar with EBNF; it is fairly simple,
|
|
and the definitions below are annotated.
|
|
.Ss Quick guide to EBNF
|
|
EBNF is a concise and exact way of describing the grammar of a language.
|
|
Each EBNF definition is made up of
|
|
.Em production rules .
|
|
E.g.,
|
|
.Pp
|
|
.Li symbol ::= definition | alternate1 | alternate2 ...
|
|
.Pp
|
|
Each
|
|
.Em production rule
|
|
references others and thus makes up a
|
|
grammar for the language.
|
|
EBNF also contains the following
|
|
operators, which many readers will recognize from regular
|
|
expressions.
|
|
Do not, however, confuse them with
|
|
.Dq wildcard
|
|
characters, which have different meanings.
|
|
.Bl -tag -width 4n
|
|
.It Li \&?
|
|
Means that the preceding symbol (or group of symbols) is optional.
|
|
That is, it may appear once or not at all.
|
|
.It Li *
|
|
Means that the preceding symbol (or group of symbols) may appear
|
|
zero or more times.
|
|
.It Li +
|
|
Means that the preceding symbol (or group of symbols) may appear
|
|
one or more times.
|
|
.El
|
|
.Pp
|
|
Parentheses may be used to group symbols together.
|
|
For clarity,
|
|
we will use single quotes
|
|
.Pq ''
|
|
to designate what is a verbatim character string (as opposed to a symbol name).
|
|
.Ss Aliases
|
|
There are four kinds of aliases:
|
|
.Li User_Alias ,
|
|
.Li Runas_Alias ,
|
|
.Li Host_Alias
|
|
and
|
|
.Li Cmnd_Alias .
|
|
.Bd -literal
|
|
Alias ::= 'User_Alias' User_Alias_Spec (':' User_Alias_Spec)* |
|
|
'Runas_Alias' Runas_Alias_Spec (':' Runas_Alias_Spec)* |
|
|
'Host_Alias' Host_Alias_Spec (':' Host_Alias_Spec)* |
|
|
'Cmnd_Alias' Cmnd_Alias_Spec (':' Cmnd_Alias_Spec)*
|
|
|
|
User_Alias ::= NAME
|
|
|
|
User_Alias_Spec ::= User_Alias '=' User_List
|
|
|
|
Runas_Alias ::= NAME
|
|
|
|
Runas_Alias_Spec ::= Runas_Alias '=' Runas_List
|
|
|
|
Host_Alias ::= NAME
|
|
|
|
Host_Alias_Spec ::= Host_Alias '=' Host_List
|
|
|
|
Cmnd_Alias ::= NAME
|
|
|
|
Cmnd_Alias_Spec ::= Cmnd_Alias '=' Cmnd_List
|
|
|
|
NAME ::= [A-Z]([A-Z][0-9]_)*
|
|
.Ed
|
|
.Pp
|
|
Each
|
|
.Em alias
|
|
definition is of the form
|
|
.Bd -literal
|
|
Alias_Type NAME = item1, item2, ...
|
|
.Ed
|
|
.Pp
|
|
where
|
|
.Em Alias_Type
|
|
is one of
|
|
.Li User_Alias ,
|
|
.Li Runas_Alias ,
|
|
.Li Host_Alias ,
|
|
or
|
|
.Li Cmnd_Alias .
|
|
A
|
|
.Li NAME
|
|
is a string of uppercase letters, numbers,
|
|
and underscore characters
|
|
.Pq Ql _ .
|
|
A
|
|
.Li NAME
|
|
.Sy must
|
|
start with an
|
|
uppercase letter.
|
|
It is possible to put several alias definitions
|
|
of the same type on a single line, joined by a colon
|
|
.Pq Ql :\& .
|
|
E.g.,
|
|
.Bd -literal
|
|
Alias_Type NAME = item1, item2, item3 : NAME = item4, item5
|
|
.Ed
|
|
.Pp
|
|
It is a syntax error to redefine an existing
|
|
.Em alias .
|
|
It is possible to use the same name for
|
|
.Em aliases
|
|
of different types, but this is not recommended.
|
|
.Pp
|
|
The definitions of what constitutes a valid
|
|
.Em alias
|
|
member follow.
|
|
.Bd -literal
|
|
User_List ::= User |
|
|
User ',' User_List
|
|
|
|
User ::= '!'* user name |
|
|
'!'* #uid |
|
|
'!'* %group |
|
|
'!'* %#gid |
|
|
'!'* +netgroup |
|
|
'!'* %:nonunix_group |
|
|
'!'* %:#nonunix_gid |
|
|
'!'* User_Alias
|
|
.Ed
|
|
.Pp
|
|
A
|
|
.Li User_List
|
|
is made up of one or more user names, user IDs
|
|
(prefixed with
|
|
.Ql # ) ,
|
|
system group names and IDs (prefixed with
|
|
.Ql %
|
|
and
|
|
.Ql %#
|
|
respectively), netgroups (prefixed with
|
|
.Ql + ) ,
|
|
non-Unix group names and IDs (prefixed with
|
|
.Ql %:
|
|
and
|
|
.Ql %:#
|
|
respectively) and
|
|
.Li User_Alias Ns es.
|
|
Each list item may be prefixed with zero or more
|
|
.Ql \&!
|
|
operators.
|
|
An odd number of
|
|
.Ql \&!
|
|
operators negate the value of
|
|
the item; an even number just cancel each other out.
|
|
User netgroups are matched using the user and domain members only;
|
|
the host member is not used when matching.
|
|
.Pp
|
|
A
|
|
.Li user name ,
|
|
.Li uid ,
|
|
.Li group ,
|
|
.Li gid ,
|
|
.Li netgroup ,
|
|
.Li nonunix_group
|
|
or
|
|
.Li nonunix_gid
|
|
may be enclosed in double quotes to avoid the
|
|
need for escaping special characters.
|
|
Alternately, special characters
|
|
may be specified in escaped hex mode, e.g.\& \ex20 for space.
|
|
When
|
|
using double quotes, any prefix characters must be included inside
|
|
the quotes.
|
|
.Pp
|
|
The actual
|
|
.Li nonunix_group
|
|
and
|
|
.Li nonunix_gid
|
|
syntax depends on
|
|
the underlying group provider plugin.
|
|
For instance, the QAS AD plugin supports the following formats:
|
|
.Bl -bullet -width 1n
|
|
.It
|
|
Group in the same domain: "%:Group Name"
|
|
.It
|
|
Group in any domain: "%:Group Name@FULLY.QUALIFIED.DOMAIN"
|
|
.It
|
|
Group SID: "%:S-1-2-34-5678901234-5678901234-5678901234-567"
|
|
.El
|
|
.Pp
|
|
See
|
|
.Sx "GROUP PROVIDER PLUGINS"
|
|
for more information.
|
|
.Pp
|
|
Note that quotes around group names are optional.
|
|
Unquoted strings must use a backslash
|
|
.Pq Ql \e
|
|
to escape spaces and special characters.
|
|
See
|
|
.Sx Other special characters and reserved words
|
|
for a list of
|
|
characters that need to be escaped.
|
|
.Bd -literal
|
|
Runas_List ::= Runas_Member |
|
|
Runas_Member ',' Runas_List
|
|
|
|
Runas_Member ::= '!'* user name |
|
|
'!'* #uid |
|
|
'!'* %group |
|
|
'!'* %#gid |
|
|
'!'* %:nonunix_group |
|
|
'!'* %:#nonunix_gid |
|
|
'!'* +netgroup |
|
|
'!'* Runas_Alias
|
|
.Ed
|
|
.Pp
|
|
A
|
|
.Li Runas_List
|
|
is similar to a
|
|
.Li User_List
|
|
except that instead
|
|
of
|
|
.Li User_Alias Ns es
|
|
it can contain
|
|
.Li Runas_Alias Ns es .
|
|
Note that
|
|
user names and groups are matched as strings.
|
|
In other words, two
|
|
users (groups) with the same uid (gid) are considered to be distinct.
|
|
If you wish to match all user names with the same uid (e.g.\&
|
|
root and toor), you can use a uid instead (#0 in the example given).
|
|
.Bd -literal
|
|
Host_List ::= Host |
|
|
Host ',' Host_List
|
|
|
|
Host ::= '!'* host name |
|
|
'!'* ip_addr |
|
|
'!'* network(/netmask)? |
|
|
'!'* +netgroup |
|
|
'!'* Host_Alias
|
|
.Ed
|
|
.Pp
|
|
A
|
|
.Li Host_List
|
|
is made up of one or more host names, IP addresses,
|
|
network numbers, netgroups (prefixed with
|
|
.Ql + )
|
|
and other aliases.
|
|
Again, the value of an item may be negated with the
|
|
.Ql \&!
|
|
operator.
|
|
Host netgroups are matched using the host (both qualified and unqualified)
|
|
and domain members only; the user member is not used when matching.
|
|
If you specify a network number without a netmask,
|
|
.Nm sudo
|
|
will query each of the local host's network interfaces and,
|
|
if the network number corresponds to one of the hosts's network
|
|
interfaces, will use the netmask of that interface.
|
|
The netmask may be specified either in standard IP address notation
|
|
(e.g.\& 255.255.255.0 or ffff:ffff:ffff:ffff::),
|
|
or CIDR notation (number of bits, e.g.\& 24 or 64).
|
|
A host name may include shell-style wildcards (see the
|
|
.Sx Wildcards
|
|
section below),
|
|
but unless the
|
|
.Li host name
|
|
command on your machine returns the fully
|
|
qualified host name, you'll need to use the
|
|
.Em fqdn
|
|
option for wildcards to be useful.
|
|
Note that
|
|
.Nm sudo
|
|
only inspects actual network interfaces; this means that IP address
|
|
127.0.0.1 (localhost) will never match.
|
|
Also, the host name
|
|
.Dq localhost
|
|
will only match if that is the actual host name, which is usually
|
|
only the case for non-networked systems.
|
|
.Bd -literal
|
|
digest ::= [A-Fa-f0-9]+ |
|
|
[[A-Za-z0-9\+/=]+
|
|
|
|
Digest_Spec ::= "sha224" ':' digest |
|
|
"sha256" ':' digest |
|
|
"sha384" ':' digest |
|
|
"sha512" ':' digest
|
|
|
|
Cmnd_List ::= Cmnd |
|
|
Cmnd ',' Cmnd_List
|
|
|
|
command name ::= file name |
|
|
file name args |
|
|
file name '""'
|
|
|
|
Cmnd ::= Digest_Spec? '!'* command name |
|
|
'!'* directory |
|
|
'!'* "sudoedit" |
|
|
'!'* Cmnd_Alias
|
|
.Ed
|
|
.Pp
|
|
A
|
|
.Li Cmnd_List
|
|
is a list of one or more command names, directories, and other aliases.
|
|
A command name is a fully qualified file name which may include
|
|
shell-style wildcards (see the
|
|
.Sx Wildcards
|
|
section below).
|
|
A simple file name allows the user to run the command with any
|
|
arguments he/she wishes.
|
|
However, you may also specify command line arguments (including
|
|
wildcards).
|
|
Alternately, you can specify
|
|
.Li \&""
|
|
to indicate that the command
|
|
may only be run
|
|
.Sy without
|
|
command line arguments.
|
|
A directory is a
|
|
fully qualified path name ending in a
|
|
.Ql / .
|
|
When you specify a directory in a
|
|
.Li Cmnd_List ,
|
|
the user will be able to run any file within that directory
|
|
(but not in any sub-directories therein).
|
|
.Pp
|
|
If a
|
|
.Li Cmnd
|
|
has associated command line arguments, then the arguments
|
|
in the
|
|
.Li Cmnd
|
|
must match exactly those given by the user on the command line
|
|
(or match the wildcards if there are any).
|
|
Note that the following characters must be escaped with a
|
|
.Ql \e
|
|
if they are used in command arguments:
|
|
.Ql ,\& ,
|
|
.Ql :\& ,
|
|
.Ql =\& ,
|
|
.Ql \e .
|
|
The built-in command
|
|
.Dq Li sudoedit
|
|
is used to permit a user to run
|
|
.Nm sudo
|
|
with the
|
|
.Fl e
|
|
option (or as
|
|
.Nm sudoedit ) .
|
|
It may take command line arguments just as a normal command does.
|
|
Note that
|
|
.Dq Li sudoedit
|
|
is a command built into
|
|
.Nm sudo
|
|
itself and must be specified in the
|
|
.Em sudoers
|
|
file without a leading path.
|
|
.Pp
|
|
If a
|
|
.Li command name
|
|
is prefixed with a
|
|
.Li Digest_Spec ,
|
|
the command will only match successfully if it can be verified
|
|
using the specified SHA-2 digest.
|
|
The following digest formats are supported: sha224, sha256, sha384 and sha512.
|
|
The string may be specified in either hex or base64 format
|
|
(base64 is more compact).
|
|
There are several utilities capable of generating SHA-2 digests in hex
|
|
format such as openssl, shasum, sha224sum, sha256sum, sha384sum, sha512sum.
|
|
.Pp
|
|
For example, using openssl:
|
|
.Bd -literal
|
|
$ openssl dgst -sha224 /bin/ls
|
|
SHA224(/bin/ls)= 118187da8364d490b4a7debbf483004e8f3e053ec954309de2c41a25
|
|
.Ed
|
|
.Pp
|
|
It is also possible to use openssl to generate base64 output:
|
|
.Bd -literal
|
|
$ openssl dgst -binary -sha224 /bin/ls | openssl base64
|
|
EYGH2oNk1JC0p9679IMATo8+BT7JVDCd4sQaJQ==
|
|
.Ed
|
|
.Pp
|
|
Warning, if the user has write access to the command itself (directly or via a
|
|
.Nm sudo
|
|
command), it may be possible for the user to replace the command after the
|
|
digest check has been performed but before the command is executed.
|
|
A similar race condition exists on systems that lack the
|
|
.Xr fexecve 2
|
|
system call when the directory in which the command is located
|
|
is writable by the user.
|
|
See the description of the
|
|
.Em fdexec
|
|
setting for more information on how
|
|
.Nm sudo
|
|
executes commands that have an associated digest.
|
|
.Pp
|
|
Command digests are only supported by version 1.8.7 or higher.
|
|
.Ss Defaults
|
|
Certain configuration options may be changed from their default
|
|
values at run-time via one or more
|
|
.Li Default_Entry
|
|
lines.
|
|
These may affect all users on any host, all users on a specific host, a
|
|
specific user, a specific command, or commands being run as a specific user.
|
|
Note that per-command entries may not include command line arguments.
|
|
If you need to specify arguments, define a
|
|
.Li Cmnd_Alias
|
|
and reference
|
|
that instead.
|
|
.Bd -literal
|
|
Default_Type ::= 'Defaults' |
|
|
'Defaults' '@' Host_List |
|
|
'Defaults' ':' User_List |
|
|
'Defaults' '!' Cmnd_List |
|
|
'Defaults' '>' Runas_List
|
|
|
|
Default_Entry ::= Default_Type Parameter_List
|
|
|
|
Parameter_List ::= Parameter |
|
|
Parameter ',' Parameter_List
|
|
|
|
Parameter ::= Parameter '=' Value |
|
|
Parameter '+=' Value |
|
|
Parameter '-=' Value |
|
|
'!'* Parameter
|
|
.Ed
|
|
.Pp
|
|
Parameters may be
|
|
.Sy flags ,
|
|
.Sy integer
|
|
values,
|
|
.Sy strings ,
|
|
or
|
|
.Sy lists .
|
|
Flags are implicitly boolean and can be turned off via the
|
|
.Ql \&!
|
|
operator.
|
|
Some integer, string and list parameters may also be
|
|
used in a boolean context to disable them.
|
|
Values may be enclosed
|
|
in double quotes
|
|
.Pq \&""
|
|
when they contain multiple words.
|
|
Special characters may be escaped with a backslash
|
|
.Pq Ql \e .
|
|
.Pp
|
|
Lists have two additional assignment operators,
|
|
.Li +=
|
|
and
|
|
.Li -= .
|
|
These operators are used to add to and delete from a list respectively.
|
|
It is not an error to use the
|
|
.Li -=
|
|
operator to remove an element
|
|
that does not exist in a list.
|
|
.Pp
|
|
Defaults entries are parsed in the following order: generic, host,
|
|
user and runas Defaults first, then command defaults.
|
|
If there are multiple Defaults settings of the same type, the last
|
|
matching setting is used.
|
|
The following Defaults settings are parsed before all others since
|
|
they may affect subsequent entries:
|
|
.Em fqdn ,
|
|
.Em group_plugin ,
|
|
.Em runas_default ,
|
|
.Em sudoers_locale .
|
|
.Pp
|
|
See
|
|
.Sx SUDOERS OPTIONS
|
|
for a list of supported Defaults parameters.
|
|
.Ss User specification
|
|
.Bd -literal
|
|
User_Spec ::= User_List Host_List '=' Cmnd_Spec_List \e
|
|
(':' Host_List '=' Cmnd_Spec_List)*
|
|
|
|
Cmnd_Spec_List ::= Cmnd_Spec |
|
|
Cmnd_Spec ',' Cmnd_Spec_List
|
|
|
|
Cmnd_Spec ::= Runas_Spec? Option_Spec* Tag_Spec* Cmnd
|
|
|
|
Runas_Spec ::= '(' Runas_List? (':' Runas_List)? ')'
|
|
|
|
Option_Spec ::= (SELinux_Spec | Solaris_Priv_Spec | Date_Spec | Timeout_Spec)
|
|
|
|
SELinux_Spec ::= ('ROLE=role' | 'TYPE=type')
|
|
|
|
Solaris_Priv_Spec ::= ('PRIVS=privset' | 'LIMITPRIVS=privset')
|
|
|
|
Date_Spec ::= ('NOTBEFORE=timestamp' | 'NOTAFTER=timestamp')
|
|
|
|
Timeout_Spec ::= 'TIMEOUT=timeout'
|
|
|
|
Tag_Spec ::= ('EXEC:' | 'NOEXEC:' | 'FOLLOW:' | 'NOFOLLOW' |
|
|
'LOG_INPUT:' | 'NOLOG_INPUT:' | 'LOG_OUTPUT:' |
|
|
'NOLOG_OUTPUT:' | 'MAIL:' | 'NOMAIL:' | 'PASSWD:' |
|
|
'NOPASSWD:' | 'SETENV:' | 'NOSETENV:')
|
|
.Ed
|
|
.Pp
|
|
A
|
|
.Sy user specification
|
|
determines which commands a user may run
|
|
(and as what user) on specified hosts.
|
|
By default, commands are
|
|
run as
|
|
.Sy root ,
|
|
but this can be changed on a per-command basis.
|
|
.Pp
|
|
The basic structure of a user specification is
|
|
.Dq who where = (as_whom) what .
|
|
Let's break that down into its constituent parts:
|
|
.Ss Runas_Spec
|
|
A
|
|
.Li Runas_Spec
|
|
determines the user and/or the group that a command
|
|
may be run as.
|
|
A fully-specified
|
|
.Li Runas_Spec
|
|
consists of two
|
|
.Li Runas_List Ns s
|
|
(as defined above) separated by a colon
|
|
.Pq Ql :\&
|
|
and enclosed in a set of parentheses.
|
|
The first
|
|
.Li Runas_List
|
|
indicates
|
|
which users the command may be run as via
|
|
.Nm sudo Ns 's
|
|
.Fl u
|
|
option.
|
|
The second defines a list of groups that can be specified via
|
|
.Nm sudo Ns 's
|
|
.Fl g
|
|
option.
|
|
If both
|
|
.Li Runas_List Ns s
|
|
are specified, the command may be run with any combination of users
|
|
and groups listed in their respective
|
|
.Li Runas_List Ns s.
|
|
If only the first is specified, the command may be run as any user
|
|
in the list but no
|
|
.Fl g
|
|
option
|
|
may be specified.
|
|
If the first
|
|
.Li Runas_List
|
|
is empty but the
|
|
second is specified, the command may be run as the invoking user
|
|
with the group set to any listed in the
|
|
.Li Runas_List .
|
|
If both
|
|
.Li Runas_List Ns s
|
|
are empty, the command may only be run as the invoking user.
|
|
If no
|
|
.Li Runas_Spec
|
|
is specified the command may be run as
|
|
.Sy root
|
|
and
|
|
no group may be specified.
|
|
.Pp
|
|
A
|
|
.Li Runas_Spec
|
|
sets the default for the commands that follow it.
|
|
What this means is that for the entry:
|
|
.Bd -literal
|
|
dgb boulder = (operator) /bin/ls, /bin/kill, /usr/bin/lprm
|
|
.Ed
|
|
.Pp
|
|
The user
|
|
.Sy dgb
|
|
may run
|
|
.Pa /bin/ls ,
|
|
.Pa /bin/kill ,
|
|
and
|
|
.Pa /usr/bin/lprm
|
|
on the host
|
|
.No boulder Ns \(em Ns but
|
|
only as
|
|
.Sy operator .
|
|
E.g.,
|
|
.Bd -literal
|
|
$ sudo -u operator /bin/ls
|
|
.Ed
|
|
.Pp
|
|
It is also possible to override a
|
|
.Li Runas_Spec
|
|
later on in an entry.
|
|
If we modify the entry like so:
|
|
.Bd -literal
|
|
dgb boulder = (operator) /bin/ls, (root) /bin/kill, /usr/bin/lprm
|
|
.Ed
|
|
.Pp
|
|
Then user
|
|
.Sy dgb
|
|
is now allowed to run
|
|
.Pa /bin/ls
|
|
as
|
|
.Sy operator ,
|
|
but
|
|
.Pa /bin/kill
|
|
and
|
|
.Pa /usr/bin/lprm
|
|
as
|
|
.Sy root .
|
|
.Pp
|
|
We can extend this to allow
|
|
.Sy dgb
|
|
to run
|
|
.Li /bin/ls
|
|
with either
|
|
the user or group set to
|
|
.Sy operator :
|
|
.Bd -literal
|
|
dgb boulder = (operator : operator) /bin/ls, (root) /bin/kill,\e
|
|
/usr/bin/lprm
|
|
.Ed
|
|
.Pp
|
|
Note that while the group portion of the
|
|
.Li Runas_Spec
|
|
permits the
|
|
user to run as command with that group, it does not force the user
|
|
to do so.
|
|
If no group is specified on the command line, the command
|
|
will run with the group listed in the target user's password database
|
|
entry.
|
|
The following would all be permitted by the sudoers entry above:
|
|
.Bd -literal
|
|
$ sudo -u operator /bin/ls
|
|
$ sudo -u operator -g operator /bin/ls
|
|
$ sudo -g operator /bin/ls
|
|
.Ed
|
|
.Pp
|
|
In the following example, user
|
|
.Sy tcm
|
|
may run commands that access
|
|
a modem device file with the dialer group.
|
|
.Bd -literal
|
|
tcm boulder = (:dialer) /usr/bin/tip, /usr/bin/cu,\e
|
|
/usr/local/bin/minicom
|
|
.Ed
|
|
.Pp
|
|
Note that in this example only the group will be set, the command
|
|
still runs as user
|
|
.Sy tcm .
|
|
E.g.\&
|
|
.Bd -literal
|
|
$ sudo -g dialer /usr/bin/cu
|
|
.Ed
|
|
.Pp
|
|
Multiple users and groups may be present in a
|
|
.Li Runas_Spec ,
|
|
in which case the user may select any combination of users and groups via the
|
|
.Fl u
|
|
and
|
|
.Fl g
|
|
options.
|
|
In this example:
|
|
.Bd -literal
|
|
alan ALL = (root, bin : operator, system) ALL
|
|
.Ed
|
|
.Pp
|
|
user
|
|
.Sy alan
|
|
may run any command as either user root or bin,
|
|
optionally setting the group to operator or system.
|
|
.Ss Option_Spec
|
|
A
|
|
.Li Cmnd
|
|
may have zero or more options associated with it.
|
|
Depending on the system, options may consist of SELinux roles
|
|
and/or types, Solaris privileges sets, and command timeouts.
|
|
Once an option is set for a
|
|
.Li Cmnd ,
|
|
subsequent
|
|
.Li Cmnd Ns s
|
|
in the
|
|
.Li Cmnd_Spec_List ,
|
|
inherit that option unless it is overridden by another option.
|
|
.Ss SELinux_Spec
|
|
On systems with SELinux support,
|
|
.Em sudoers
|
|
file entries may optionally have an SELinux role and/or type associated
|
|
with a command.
|
|
If a role or
|
|
type is specified with the command it will override any default values
|
|
specified in
|
|
.Em sudoers .
|
|
A role or type specified on the command line,
|
|
however, will supersede the values in
|
|
.Em sudoers .
|
|
.Ss Solaris_Priv_Spec
|
|
On Solaris systems,
|
|
.Em sudoers
|
|
file entries may optionally specify Solaris privilege set and/or limit
|
|
privilege set associated with a command.
|
|
If privileges or limit privileges are specified with the command
|
|
it will override any default values specified in
|
|
.Em sudoers .
|
|
.Pp
|
|
A privilege set is a comma-separated list of privilege names.
|
|
The
|
|
.Xr ppriv 1
|
|
command can be used to list all privileges known to the system.
|
|
For example:
|
|
.Bd -literal
|
|
$ ppriv -l
|
|
.Ed
|
|
.Pp
|
|
In addition, there are several
|
|
.Dq special
|
|
privilege strings:
|
|
.Bl -tag -width 8n
|
|
.It none
|
|
the empty set
|
|
.It all
|
|
the set of all privileges
|
|
.It zone
|
|
the set of all privileges available in the current zone
|
|
.It basic
|
|
the default set of privileges normal users are granted at login time
|
|
.El
|
|
.Pp
|
|
Privileges can be excluded from a set by prefixing the privilege
|
|
name with either an
|
|
.Ql \&!
|
|
or
|
|
.Ql \-
|
|
character.
|
|
.Ss Date_Spec
|
|
.Nm sudoers
|
|
rules can be specified with a start and end date via the
|
|
.Li NOTBEFORE
|
|
and
|
|
.Li NOTAFTER
|
|
settings.
|
|
The time stamp must be specified in
|
|
.Em Generalized Time
|
|
as defined by RFC 4517.
|
|
The format is effectively
|
|
.Li yyyymmddHHMMSSZ
|
|
where the minutes and seconds are optional.
|
|
The
|
|
.Ql Z
|
|
suffix indicates that the time stamp is in Coordinated Universal Time (UTC).
|
|
It is also possible to specify a timezone offset from UTC in hours
|
|
and minutes instead of a
|
|
.Ql Z .
|
|
For example,
|
|
.Ql -0500
|
|
would correspond to Eastern Standard time in the US.
|
|
As an extension, if no
|
|
.Ql Z
|
|
or timezone offset is specified, local time will be used.
|
|
.Pp
|
|
The following are all valid time stamps:
|
|
.Bd -literal -offset 4n
|
|
20170214083000Z
|
|
2017021408Z
|
|
20160315220000-0500
|
|
20151201235900
|
|
.Ed
|
|
.Ss Timeout_Spec
|
|
A command may have a timeout associated with it.
|
|
If the timeout expires before the command has exited, the
|
|
command will be terminated.
|
|
The timeout may be specified in combinations of days, hours,
|
|
minutes and seconds with a single-letter case-insensitive suffix
|
|
that indicates the unit of time.
|
|
For example, a timeout of 7 days, 8 hours, 30 minutes and
|
|
10 seconds would be written as
|
|
.Li 7d8h30m10s .
|
|
If a number is specified without a unit, seconds are assumed.
|
|
Any of the days, minutes, hours or seconds may be omitted.
|
|
The order must be from largest to smallest unit and a unit
|
|
may not be specified more than once.
|
|
.Pp
|
|
The following are all
|
|
.Em valid
|
|
timeout values:
|
|
.Li 7d8h30m10s ,
|
|
.Li 14d ,
|
|
.Li 8h30m ,
|
|
.Li 600s ,
|
|
.Li 3600 .
|
|
The following are
|
|
.Em invalid
|
|
timeout values:
|
|
.Li 12m2w1d ,
|
|
.Li 30s10m4h ,
|
|
.Li 1d2d3h .
|
|
.Pp
|
|
This option is only supported by version 1.8.20 or higher.
|
|
.Ss Tag_Spec
|
|
A command may have zero or more tags associated with it.
|
|
The following tag values are supported:
|
|
.Li EXEC ,
|
|
.Li NOEXEC ,
|
|
.Li FOLLOW ,
|
|
.Li NOFOLLOW ,
|
|
.Li LOG_INPUT ,
|
|
.Li NOLOG_INPUT ,
|
|
.Li LOG_OUTPUT ,
|
|
.Li NOLOG_OUTPUT ,
|
|
.Li MAIL ,
|
|
.Li NOMAIL ,
|
|
.Li PASSWD ,
|
|
.Li NOPASSWD ,
|
|
.Li SETENV ,
|
|
and
|
|
.Li NOSETENV .
|
|
Once a tag is set on a
|
|
.Li Cmnd ,
|
|
subsequent
|
|
.Li Cmnd Ns s
|
|
in the
|
|
.Li Cmnd_Spec_List ,
|
|
inherit the tag unless it is overridden by the opposite tag (in other words,
|
|
.Li PASSWD
|
|
overrides
|
|
.Li NOPASSWD
|
|
and
|
|
.Li NOEXEC
|
|
overrides
|
|
.Li EXEC ) .
|
|
.Bl -hang -width 0n
|
|
.It Em EXEC No and Em NOEXEC
|
|
.sp
|
|
If
|
|
.Nm sudo
|
|
has been compiled with
|
|
.Em noexec
|
|
support and the underlying operating system supports it, the
|
|
.Li NOEXEC
|
|
tag can be used to prevent a dynamically-linked executable from
|
|
running further commands itself.
|
|
.Pp
|
|
In the following example, user
|
|
.Sy aaron
|
|
may run
|
|
.Pa /usr/bin/more
|
|
and
|
|
.Pa /usr/bin/vi
|
|
but shell escapes will be disabled.
|
|
.Bd -literal
|
|
aaron shanty = NOEXEC: /usr/bin/more, /usr/bin/vi
|
|
.Ed
|
|
.Pp
|
|
See the
|
|
.Sx Preventing shell escapes
|
|
section below for more details on how
|
|
.Li NOEXEC
|
|
works and whether or not it will work on your system.
|
|
.It Em FOLLOW No and Em NOFOLLOW
|
|
Starting with version 1.8.15,
|
|
.Nm sudoedit
|
|
will not open a file that is a symbolic link unless the
|
|
.Em sudoedit_follow
|
|
option is enabled.
|
|
The
|
|
.Em FOLLOW
|
|
and
|
|
.Em NOFOLLOW
|
|
tags override the value of
|
|
.Em sudoedit_follow
|
|
and can be used to permit (or deny) the editing of symbolic links
|
|
on a per-command basis.
|
|
These tags are only effective for the
|
|
.Em sudoedit
|
|
command and are ignored for all other commands.
|
|
.It Em LOG_INPUT No and Em NOLOG_INPUT
|
|
.sp
|
|
These tags override the value of the
|
|
.Em log_input
|
|
option on a per-command basis.
|
|
For more information, see the description of
|
|
.Em log_input
|
|
in the
|
|
.Sx SUDOERS OPTIONS
|
|
section below.
|
|
.It Em LOG_OUTPUT No and Em NOLOG_OUTPUT
|
|
.sp
|
|
These tags override the value of the
|
|
.Em log_output
|
|
option on a per-command basis.
|
|
For more information, see the description of
|
|
.Em log_output
|
|
in the
|
|
.Sx SUDOERS OPTIONS
|
|
section below.
|
|
.It Em MAIL No and Em NOMAIL
|
|
.sp
|
|
These tags provide fine-grained control over whether
|
|
mail will be sent when a user runs a command by
|
|
overriding the value of the
|
|
.Em mail_all_cmnds
|
|
option on a per-command basis.
|
|
They have no effect when
|
|
.Nm sudo
|
|
is run with the
|
|
.Fl l
|
|
or
|
|
.Fl v
|
|
options.
|
|
A
|
|
.Em NOMAIL
|
|
tag will also override the
|
|
.Em mail_always
|
|
and
|
|
.Em mail_no_perms
|
|
options.
|
|
For more information, see the descriptions of
|
|
.Em mail_all_cmnds ,
|
|
.Em mail_always ,
|
|
and
|
|
.Em mail_no_perms
|
|
in the
|
|
.Sx SUDOERS OPTIONS
|
|
section below.
|
|
.It Em PASSWD No and Em NOPASSWD
|
|
.sp
|
|
By default,
|
|
.Nm sudo
|
|
requires that a user authenticate him or herself
|
|
before running a command.
|
|
This behavior can be modified via the
|
|
.Li NOPASSWD
|
|
tag.
|
|
Like a
|
|
.Li Runas_Spec ,
|
|
the
|
|
.Li NOPASSWD
|
|
tag sets
|
|
a default for the commands that follow it in the
|
|
.Li Cmnd_Spec_List .
|
|
Conversely, the
|
|
.Li PASSWD
|
|
tag can be used to reverse things.
|
|
For example:
|
|
.Bd -literal
|
|
ray rushmore = NOPASSWD: /bin/kill, /bin/ls, /usr/bin/lprm
|
|
.Ed
|
|
.Pp
|
|
would allow the user
|
|
.Sy ray
|
|
to run
|
|
.Pa /bin/kill ,
|
|
.Pa /bin/ls ,
|
|
and
|
|
.Pa /usr/bin/lprm
|
|
as
|
|
.Sy root
|
|
on the machine rushmore without authenticating himself.
|
|
If we only want
|
|
.Sy ray
|
|
to be able to
|
|
run
|
|
.Pa /bin/kill
|
|
without a password the entry would be:
|
|
.Bd -literal
|
|
ray rushmore = NOPASSWD: /bin/kill, PASSWD: /bin/ls, /usr/bin/lprm
|
|
.Ed
|
|
.Pp
|
|
Note, however, that the
|
|
.Li PASSWD
|
|
tag has no effect on users who are in the group specified by the
|
|
.Em exempt_group
|
|
option.
|
|
.Pp
|
|
By default, if the
|
|
.Li NOPASSWD
|
|
tag is applied to any of the entries for a user on the current host,
|
|
he or she will be able to run
|
|
.Dq Li sudo -l
|
|
without a password.
|
|
Additionally, a user may only run
|
|
.Dq Li sudo -v
|
|
without a password if the
|
|
.Li NOPASSWD
|
|
tag is present for all a user's entries that pertain to the current host.
|
|
This behavior may be overridden via the
|
|
.Em verifypw
|
|
and
|
|
.Em listpw
|
|
options.
|
|
.It Em SETENV No and Em NOSETENV
|
|
.sp
|
|
These tags override the value of the
|
|
.Em setenv
|
|
option on a per-command basis.
|
|
Note that if
|
|
.Li SETENV
|
|
has been set for a command, the user may disable the
|
|
.Em env_reset
|
|
option from the command line via the
|
|
.Fl E
|
|
option.
|
|
Additionally, environment variables set on the command
|
|
line are not subject to the restrictions imposed by
|
|
.Em env_check ,
|
|
.Em env_delete ,
|
|
or
|
|
.Em env_keep .
|
|
As such, only trusted users should be allowed to set variables in this manner.
|
|
If the command matched is
|
|
.Sy ALL ,
|
|
the
|
|
.Li SETENV
|
|
tag is implied for that command; this default may be overridden by use of the
|
|
.Li NOSETENV
|
|
tag.
|
|
.El
|
|
.Ss Wildcards
|
|
.Nm sudo
|
|
allows shell-style
|
|
.Em wildcards
|
|
(aka meta or glob characters)
|
|
to be used in host names, path names and command line arguments in the
|
|
.Em sudoers
|
|
file.
|
|
Wildcard matching is done via the
|
|
.Xr glob 3
|
|
and
|
|
.Xr fnmatch 3
|
|
functions as specified by
|
|
.St -p1003.1 .
|
|
.Bl -tag -width 8n
|
|
.It Li *
|
|
Matches any set of zero or more characters (including white space).
|
|
.It Li \&?
|
|
Matches any single character (including white space).
|
|
.It Li [...]
|
|
Matches any character in the specified range.
|
|
.It Li [!...]
|
|
Matches any character
|
|
.Em not
|
|
in the specified range.
|
|
.It Li \ex
|
|
For any character
|
|
.Sq x ,
|
|
evaluates to
|
|
.Sq x .
|
|
This is used to escape special characters such as:
|
|
.Ql * ,
|
|
.Ql \&? ,
|
|
.Ql [\& ,
|
|
and
|
|
.Ql ]\& .
|
|
.El
|
|
.Pp
|
|
.Bf -symbolic
|
|
Note that these are not regular expressions.
|
|
.Ef
|
|
Unlike a regular expression there is no way to match one or more
|
|
characters within a range.
|
|
.Pp
|
|
Character classes may be used if your system's
|
|
.Xr glob 3
|
|
and
|
|
.Xr fnmatch 3
|
|
functions support them.
|
|
However, because the
|
|
.Ql :\&
|
|
character has special meaning in
|
|
.Em sudoers ,
|
|
it must be
|
|
escaped.
|
|
For example:
|
|
.Bd -literal -offset 4n
|
|
/bin/ls [[\e:\&alpha\e:\&]]*
|
|
.Ed
|
|
.Pp
|
|
Would match any file name beginning with a letter.
|
|
.Pp
|
|
Note that a forward slash
|
|
.Pq Ql /
|
|
will
|
|
.Em not
|
|
be matched by
|
|
wildcards used in the file name portion of the command.
|
|
This is to make a path like:
|
|
.Bd -literal -offset 4n
|
|
/usr/bin/*
|
|
.Ed
|
|
.Pp
|
|
match
|
|
.Pa /usr/bin/who
|
|
but not
|
|
.Pa /usr/bin/X11/xterm .
|
|
.Pp
|
|
When matching the command line arguments, however, a slash
|
|
.Em does
|
|
get matched by wildcards since command line arguments may contain
|
|
arbitrary strings and not just path names.
|
|
.Pp
|
|
.Bf -symbolic
|
|
Wildcards in command line arguments should be used with care.
|
|
.Ef
|
|
.br
|
|
Command line arguments are matched as a single, concatenated string.
|
|
This mean a wildcard character such as
|
|
.Ql \&?
|
|
or
|
|
.Ql *
|
|
will match across word boundaries, which may be unexpected.
|
|
For example, while a sudoers entry like:
|
|
.Bd -literal -offset 4n
|
|
%operator ALL = /bin/cat /var/log/messages*
|
|
.Ed
|
|
.Pp
|
|
will allow command like:
|
|
.Bd -literal -offset 4n
|
|
$ sudo cat /var/log/messages.1
|
|
.Ed
|
|
.Pp
|
|
It will also allow:
|
|
.Bd -literal -offset 4n
|
|
$ sudo cat /var/log/messages /etc/shadow
|
|
.Ed
|
|
.Pp
|
|
which is probably not what was intended.
|
|
In most cases it is better to do command line processing
|
|
outside of the
|
|
.Em sudoers
|
|
file in a scripting language.
|
|
.Ss Exceptions to wildcard rules
|
|
The following exceptions apply to the above rules:
|
|
.Bl -tag -width 8n
|
|
.It Li \&""
|
|
If the empty string
|
|
.Li \&""
|
|
is the only command line argument in the
|
|
.Em sudoers
|
|
file entry it means that command is not allowed to be run with
|
|
.Em any
|
|
arguments.
|
|
.It sudoedit
|
|
Command line arguments to the
|
|
.Em sudoedit
|
|
built-in command should always be path names, so a forward slash
|
|
.Pq Ql /
|
|
will not be matched by a wildcard.
|
|
.El
|
|
.Ss Including other files from within sudoers
|
|
It is possible to include other
|
|
.Em sudoers
|
|
files from within the
|
|
.Em sudoers
|
|
file currently being parsed using the
|
|
.Li #include
|
|
and
|
|
.Li #includedir
|
|
directives.
|
|
.Pp
|
|
This can be used, for example, to keep a site-wide
|
|
.Em sudoers
|
|
file in addition to a local, per-machine file.
|
|
For the sake of this example the site-wide
|
|
.Em sudoers
|
|
file will be
|
|
.Pa /etc/sudoers
|
|
and the per-machine one will be
|
|
.Pa /etc/sudoers.local .
|
|
To include
|
|
.Pa /etc/sudoers.local
|
|
from within
|
|
.Pa /etc/sudoers
|
|
we would use the
|
|
following line in
|
|
.Pa /etc/sudoers :
|
|
.Bd -literal -offset 4n
|
|
#include /etc/sudoers.local
|
|
.Ed
|
|
.Pp
|
|
When
|
|
.Nm sudo
|
|
reaches this line it will suspend processing of the current file
|
|
.Pq Pa /etc/sudoers
|
|
and switch to
|
|
.Pa /etc/sudoers.local .
|
|
Upon reaching the end of
|
|
.Pa /etc/sudoers.local ,
|
|
the rest of
|
|
.Pa /etc/sudoers
|
|
will be processed.
|
|
Files that are included may themselves include other files.
|
|
A hard limit of 128 nested include files is enforced to prevent include
|
|
file loops.
|
|
.Pp
|
|
If the path to the include file is not fully-qualified (does not
|
|
begin with a
|
|
.Ql / ) ,
|
|
it must be located in the same directory as the sudoers file it was
|
|
included from.
|
|
For example, if
|
|
.Pa /etc/sudoers
|
|
contains the line:
|
|
.Bd -literal -offset 4n
|
|
.Li #include sudoers.local
|
|
.Ed
|
|
.Pp
|
|
the file that will be included is
|
|
.Pa /etc/sudoers.local .
|
|
.Pp
|
|
The file name may also include the
|
|
.Li %h
|
|
escape, signifying the short form of the host name.
|
|
In other words, if the machine's host name is
|
|
.Dq xerxes ,
|
|
then
|
|
.Bd -literal -offset 4n
|
|
#include /etc/sudoers.%h
|
|
.Ed
|
|
.Pp
|
|
will cause
|
|
.Nm sudo
|
|
to include the file
|
|
.Pa /etc/sudoers.xerxes .
|
|
.Pp
|
|
The
|
|
.Li #includedir
|
|
directive can be used to create a
|
|
.Pa sudoers.d
|
|
directory that the system package manager can drop
|
|
.Em sudoers
|
|
file rules into as part of package installation.
|
|
For example, given:
|
|
.Bd -literal -offset 4n
|
|
#includedir /etc/sudoers.d
|
|
.Ed
|
|
.Pp
|
|
.Nm sudo
|
|
will suspend processing of the current file and read each file in
|
|
.Pa /etc/sudoers.d ,
|
|
skipping file names that end in
|
|
.Ql ~
|
|
or contain a
|
|
.Ql .\&
|
|
character to avoid causing problems with package manager or editor
|
|
temporary/backup files.
|
|
Files are parsed in sorted lexical order.
|
|
That is,
|
|
.Pa /etc/sudoers.d/01_first
|
|
will be parsed before
|
|
.Pa /etc/sudoers.d/10_second .
|
|
Be aware that because the sorting is lexical, not numeric,
|
|
.Pa /etc/sudoers.d/1_whoops
|
|
would be loaded
|
|
.Em after
|
|
.Pa /etc/sudoers.d/10_second .
|
|
Using a consistent number of leading zeroes in the file names can be used
|
|
to avoid such problems.
|
|
After parsing the files in the directory, control returns to the
|
|
file that contained the
|
|
.Li #includedir
|
|
directive.
|
|
.Pp
|
|
Note that unlike files included via
|
|
.Li #include ,
|
|
.Nm visudo
|
|
will not edit the files in a
|
|
.Li #includedir
|
|
directory unless one of them contains a syntax error.
|
|
It is still possible to run
|
|
.Nm visudo
|
|
with the
|
|
.Fl f
|
|
flag to edit the files directly, but this will not catch the
|
|
redefinition of an
|
|
.Em alias
|
|
that is also present in a different file.
|
|
.Ss Other special characters and reserved words
|
|
The pound sign
|
|
.Pq Ql #
|
|
is used to indicate a comment (unless it is part of a #include
|
|
directive or unless it occurs in the context of a user name and is
|
|
followed by one or more digits, in which case it is treated as a
|
|
uid).
|
|
Both the comment character and any text after it, up to the end of
|
|
the line, are ignored.
|
|
.Pp
|
|
The reserved word
|
|
.Sy ALL
|
|
is a built-in
|
|
.Em alias
|
|
that always causes a match to succeed.
|
|
It can be used wherever one might otherwise use a
|
|
.Li Cmnd_Alias ,
|
|
.Li User_Alias ,
|
|
.Li Runas_Alias ,
|
|
or
|
|
.Li Host_Alias .
|
|
You should not try to define your own
|
|
.Em alias
|
|
called
|
|
.Sy ALL
|
|
as the built-in alias will be used in preference to your own.
|
|
Please note that using
|
|
.Sy ALL
|
|
can be dangerous since in a command context, it allows the user to run
|
|
.Em any
|
|
command on the system.
|
|
.Pp
|
|
An exclamation point
|
|
.Pq Ql \&!
|
|
can be used as a logical
|
|
.Em not
|
|
operator in a list or
|
|
.Em alias
|
|
as well as in front of a
|
|
.Li Cmnd .
|
|
This allows one to exclude certain values.
|
|
For the
|
|
.Ql \&!
|
|
operator to be effective, there must be something for it to exclude.
|
|
For example, to match all users except for root one would use:
|
|
.Bd -literal -offset 4n
|
|
ALL,!root
|
|
.Ed
|
|
.Pp
|
|
If the
|
|
.Sy ALL ,
|
|
is omitted, as in:
|
|
.Bd -literal -offset 4n
|
|
!root
|
|
.Ed
|
|
.Pp
|
|
it would explicitly deny root but not match any other users.
|
|
This is different from a true
|
|
.Dq negation
|
|
operator.
|
|
.Pp
|
|
Note, however, that using a
|
|
.Ql \&!
|
|
in conjunction with the built-in
|
|
.Sy ALL
|
|
alias to allow a user to run
|
|
.Dq all but a few
|
|
commands rarely works as intended (see
|
|
.Sx SECURITY NOTES
|
|
below).
|
|
.Pp
|
|
Long lines can be continued with a backslash
|
|
.Pq Ql \e
|
|
as the last character on the line.
|
|
.Pp
|
|
White space between elements in a list as well as special syntactic
|
|
characters in a
|
|
.Em User Specification
|
|
.Po
|
|
.Ql =\& ,
|
|
.Ql :\& ,
|
|
.Ql (\& ,
|
|
.Ql )\&
|
|
.Pc
|
|
is optional.
|
|
.Pp
|
|
The following characters must be escaped with a backslash
|
|
.Pq Ql \e
|
|
when used as part of a word (e.g.\& a user name or host name):
|
|
.Ql \&! ,
|
|
.Ql =\& ,
|
|
.Ql :\& ,
|
|
.Ql ,\& ,
|
|
.Ql (\& ,
|
|
.Ql )\& ,
|
|
.Ql \e .
|
|
.Sh SUDOERS OPTIONS
|
|
.Nm sudo Ns 's
|
|
behavior can be modified by
|
|
.Li Default_Entry
|
|
lines, as explained earlier.
|
|
A list of all supported Defaults parameters, grouped by type, are listed below.
|
|
.Pp
|
|
.Sy Boolean Flags :
|
|
.Bl -tag -width 16n
|
|
.It always_query_group_plugin
|
|
If a
|
|
.Em group_plugin
|
|
is configured, use it to resolve groups of the form %group as long
|
|
as there is not also a system group of the same name.
|
|
Normally, only groups of the form %:group are passed to the
|
|
.Em group_plugin .
|
|
This flag is
|
|
.Em off
|
|
by default.
|
|
.It always_set_home
|
|
If enabled,
|
|
.Nm sudo
|
|
will set the
|
|
.Ev HOME
|
|
environment variable to the home directory of the target user
|
|
(which is root unless the
|
|
.Fl u
|
|
option is used).
|
|
This effectively means that the
|
|
.Fl H
|
|
option is always implied.
|
|
Note that by default,
|
|
.Ev HOME
|
|
will be set to the home directory of the target user when the
|
|
.Em env_reset
|
|
option is enabled, so
|
|
.Em always_set_home
|
|
only has an effect for configurations where either
|
|
.Em env_reset
|
|
is disabled or
|
|
.Ev HOME
|
|
is present in the
|
|
.Em env_keep
|
|
list.
|
|
This flag is
|
|
.Em off
|
|
by default.
|
|
.It authenticate
|
|
If set, users must authenticate themselves via a password (or other
|
|
means of authentication) before they may run commands.
|
|
This default may be overridden via the
|
|
.Li PASSWD
|
|
and
|
|
.Li NOPASSWD
|
|
tags.
|
|
This flag is
|
|
.Em on
|
|
by default.
|
|
.It case_insensitive_group
|
|
If enabled, group names in
|
|
.Em sudoers
|
|
will be matched in a case insensitive manner.
|
|
This may be necessary when users are stored in LDAP or AD.
|
|
This flag is
|
|
.Em on
|
|
by default.
|
|
.It case_insensitive_user
|
|
If enabled, user names in
|
|
.Em sudoers
|
|
will be matched in a case insensitive manner.
|
|
This may be necessary when groups are stored in LDAP or AD.
|
|
This flag is
|
|
.Em on
|
|
by default.
|
|
.It closefrom_override
|
|
If set, the user may use
|
|
.Nm sudo Ns 's
|
|
.Fl C
|
|
option which overrides the default starting point at which
|
|
.Nm sudo
|
|
begins closing open file descriptors.
|
|
This flag is
|
|
.Em off
|
|
by default.
|
|
.It compress_io
|
|
If set, and
|
|
.Nm sudo
|
|
is configured to log a command's input or output,
|
|
the I/O logs will be compressed using
|
|
.Sy zlib .
|
|
This flag is
|
|
.Em on
|
|
by default when
|
|
.Nm sudo
|
|
is compiled with
|
|
.Sy zlib
|
|
support.
|
|
.It exec_background
|
|
By default,
|
|
.Nm sudo
|
|
runs a command as the foreground process as long as
|
|
.Nm sudo
|
|
itself is running in the foreground.
|
|
When the
|
|
.Em exec_background
|
|
flag is enabled and the command is being run in a pty (due to I/O logging
|
|
or the
|
|
.Em use_pty
|
|
flag), the command will be run as a background process.
|
|
Attempts to read from the controlling terminal (or to change terminal
|
|
settings) will result in the command being suspended with the
|
|
.Dv SIGTTIN
|
|
signal (or
|
|
.Dv SIGTTOU
|
|
in the case of terminal settings).
|
|
If this happens when
|
|
.Nm sudo
|
|
is a foreground process, the command will be granted the controlling terminal
|
|
and resumed in the foreground with no user intervention required.
|
|
The advantage of initially running the command in the background is that
|
|
.Nm sudo
|
|
need not read from the terminal unless the command explicitly requests it.
|
|
Otherwise, any terminal input must be passed to the command, whether it
|
|
has required it or not (the kernel buffers terminals so it is not possible
|
|
to tell whether the command really wants the input).
|
|
This is different from historic
|
|
.Em sudo
|
|
behavior or when the command is not being run in a pty.
|
|
.Pp
|
|
For this to work seamlessly, the operating system must support the
|
|
automatic restarting of system calls.
|
|
Unfortunately, not all operating systems do this by default,
|
|
and even those that do may have bugs.
|
|
For example, macOS fails to restart the
|
|
.Fn tcgetattr
|
|
and
|
|
.Fn tcsetattr
|
|
system calls (this is a bug in macOS).
|
|
Furthermore, because this behavior depends on the command stopping with the
|
|
.Dv SIGTTIN
|
|
or
|
|
.Dv SIGTTOU
|
|
signals, programs that catch these signals and suspend themselves
|
|
with a different signal (usually
|
|
.Dv SIGTOP )
|
|
will not be automatically foregrounded.
|
|
Some versions of the linux
|
|
.Xr su 1
|
|
command behave this way.
|
|
This flag is
|
|
.Em off
|
|
by default.
|
|
.Pp
|
|
This setting is only supported by version 1.8.7 or higher.
|
|
It has no effect unless I/O logging is enabled or the
|
|
.Em use_pty
|
|
flag is enabled.
|
|
.It env_editor
|
|
If set,
|
|
.Nm visudo
|
|
will use the value of the
|
|
.Ev SUDO_EDITOR ,
|
|
.Ev VISUAL
|
|
or
|
|
.Ev EDITOR
|
|
environment variables before falling back on the default editor list.
|
|
Note that this may create a security hole as it allows the user to
|
|
run any arbitrary command as root without logging.
|
|
A safer alternative is to place a colon-separated list of editors
|
|
in the
|
|
.Em editor
|
|
variable.
|
|
.Nm visudo
|
|
will then only use
|
|
.Ev SUDO_EDITOR ,
|
|
.Ev VISUAL
|
|
or
|
|
.Ev EDITOR
|
|
if they match a value specified in
|
|
.Em editor .
|
|
If the
|
|
.Em env_reset
|
|
flag is enabled, the
|
|
.Ev SUDO_EDITOR ,
|
|
.Ev VISUAL
|
|
and/or
|
|
.Ev EDITOR
|
|
environment variables must be present in the
|
|
.Em env_keep
|
|
list for the
|
|
.Em env_editor
|
|
flag to function when
|
|
.Nm visudo
|
|
is invoked via
|
|
.Nm sudo .
|
|
This flag is
|
|
.Em @env_editor@
|
|
by default.
|
|
.It env_reset
|
|
If set,
|
|
.Nm sudo
|
|
will run the command in a minimal environment containing the
|
|
.Ev TERM ,
|
|
.Ev PATH ,
|
|
.Ev HOME ,
|
|
.Ev MAIL ,
|
|
.Ev SHELL ,
|
|
.Ev LOGNAME ,
|
|
.Ev USER ,
|
|
.Ev USERNAME
|
|
and
|
|
.Ev SUDO_*
|
|
variables.
|
|
Any variables in the caller's environment or in the file specified
|
|
by the
|
|
.Em restricted_env_file
|
|
option that match the
|
|
.Li env_keep
|
|
and
|
|
.Li env_check
|
|
lists are then added, followed by any variables present in the file
|
|
specified by the
|
|
.Em env_file
|
|
option (if any).
|
|
The contents of the
|
|
.Li env_keep
|
|
and
|
|
.Li env_check
|
|
lists, as modified by global Defaults parameters in
|
|
.Em sudoers ,
|
|
are displayed when
|
|
.Nm sudo
|
|
is run by root with the
|
|
.Fl V
|
|
option.
|
|
If the
|
|
.Em secure_path
|
|
option is set, its value will be used for the
|
|
.Ev PATH
|
|
environment variable.
|
|
This flag is
|
|
.Em @env_reset@
|
|
by default.
|
|
.It fast_glob
|
|
Normally,
|
|
.Nm sudo
|
|
uses the
|
|
.Xr glob 3
|
|
function to do shell-style globbing when matching path names.
|
|
However, since it accesses the file system,
|
|
.Xr glob 3
|
|
can take a long time to complete for some patterns, especially
|
|
when the pattern references a network file system that is mounted
|
|
on demand (auto mounted).
|
|
The
|
|
.Em fast_glob
|
|
option causes
|
|
.Nm sudo
|
|
to use the
|
|
.Xr fnmatch 3
|
|
function, which does not access the file system to do its matching.
|
|
The disadvantage of
|
|
.Em fast_glob
|
|
is that it is unable to match relative path names such as
|
|
.Pa ./ls
|
|
or
|
|
.Pa ../bin/ls .
|
|
This has security implications when path names that include globbing
|
|
characters are used with the negation operator,
|
|
.Ql !\& ,
|
|
as such rules can be trivially bypassed.
|
|
As such, this option should not be used when the
|
|
.Em sudoers
|
|
file contains rules that contain negated path names which include globbing
|
|
characters.
|
|
This flag is
|
|
.Em off
|
|
by default.
|
|
.It fqdn
|
|
Set this flag if you want to put fully qualified host names in the
|
|
.Em sudoers
|
|
file when the local host name (as returned by the
|
|
.Li hostname
|
|
command) does not contain the domain name.
|
|
In other words, instead of myhost you would use myhost.mydomain.edu.
|
|
You may still use the short form if you wish (and even mix the two).
|
|
This option is only effective when the
|
|
.Dq canonical
|
|
host name, as returned by the
|
|
.Fn getaddrinfo
|
|
or
|
|
.Fn gethostbyname
|
|
function, is a fully-qualified domain name.
|
|
This is usually the case when the system is configured to use DNS
|
|
for host name resolution.
|
|
.Pp
|
|
If the system is configured to use the
|
|
.Pa /etc/hosts
|
|
file in preference to DNS, the
|
|
.Dq canonical
|
|
host name may not be fully-qualified.
|
|
The order that sources are queried for host name resolution
|
|
is usually specified in the
|
|
.Pa @nsswitch_conf@ ,
|
|
.Pa @netsvc_conf@ ,
|
|
.Pa /etc/host.conf ,
|
|
or, in some cases,
|
|
.Pa /etc/resolv.conf
|
|
file.
|
|
In the
|
|
.Pa /etc/hosts
|
|
file, the first host name of the entry is considered to be the
|
|
.Dq canonical
|
|
name; subsequent names are aliases that are not used by
|
|
.Nm .
|
|
For example, the following hosts file line for the machine
|
|
.Dq xyzzy
|
|
has the fully-qualified domain name as the
|
|
.Dq canonical
|
|
host name, and the short version as an alias.
|
|
.sp
|
|
.Dl 192.168.1.1 xyzzy.sudo.ws xyzzy
|
|
.sp
|
|
If the machine's hosts file entry is not formatted properly, the
|
|
.Em fqdn
|
|
option will not be effective if it is queried before DNS.
|
|
.Pp
|
|
Beware that when using DNS for host name resolution, turning on
|
|
.Em fqdn
|
|
requires
|
|
.Nm
|
|
to make DNS lookups which renders
|
|
.Nm sudo
|
|
unusable if DNS stops working (for example if the machine is disconnected
|
|
from the network).
|
|
Also note that just like with the hosts file, you must use the
|
|
.Dq canonical
|
|
name as DNS knows it.
|
|
That is, you may not use a host alias
|
|
.Po
|
|
.Li CNAME
|
|
entry
|
|
.Pc
|
|
due to performance issues and the fact that there is no way to get all
|
|
aliases from DNS.
|
|
.Pp
|
|
This flag is
|
|
.Em @fqdn@
|
|
by default.
|
|
.It ignore_audit_errors
|
|
Allow commands to be run even if
|
|
.Nm
|
|
cannot write to the audit log.
|
|
If enabled, an audit log write failure is not treated as a fatal error.
|
|
If disabled, a command may only be run after the audit event is successfully
|
|
written.
|
|
This flag is only effective on systems for which
|
|
.Nm
|
|
supports audit logging, including FreeBSD, Linux, macOS and Solaris.
|
|
This flag is
|
|
.Em on
|
|
by default.
|
|
.It ignore_dot
|
|
If set,
|
|
.Nm sudo
|
|
will ignore "." or "" (both denoting current directory) in the
|
|
.Ev PATH
|
|
environment variable; the
|
|
.Ev PATH
|
|
itself is not modified.
|
|
This flag is
|
|
.Em @ignore_dot@
|
|
by default.
|
|
.It ignore_iolog_errors
|
|
Allow commands to be run even if
|
|
.Nm
|
|
cannot write to the I/O log.
|
|
If enabled, an I/O log write failure is not treated as a fatal error.
|
|
If disabled, the command will be terminated if the I/O log cannot be written to.
|
|
This flag is
|
|
.Em off
|
|
by default.
|
|
.It ignore_logfile_errors
|
|
Allow commands to be run even if
|
|
.Nm
|
|
cannot write to the log file.
|
|
If enabled, a log file write failure is not treated as a fatal error.
|
|
If disabled, a command may only be run after the log file entry is successfully
|
|
written.
|
|
This flag only has an effect when
|
|
.Nm
|
|
is configured to use file-based logging via the
|
|
.Em logfile
|
|
option.
|
|
This flag is
|
|
.Em on
|
|
by default.
|
|
.It ignore_local_sudoers
|
|
If set via LDAP, parsing of
|
|
.Pa @sysconfdir@/sudoers
|
|
will be skipped.
|
|
This is intended for Enterprises that wish to prevent the usage of local
|
|
sudoers files so that only LDAP is used.
|
|
This thwarts the efforts of rogue operators who would attempt to add roles to
|
|
.Pa @sysconfdir@/sudoers .
|
|
When this option is present,
|
|
.Pa @sysconfdir@/sudoers
|
|
does not even need to exist.
|
|
Since this option tells
|
|
.Nm sudo
|
|
how to behave when no specific LDAP entries have been matched, this
|
|
sudoOption is only meaningful for the
|
|
.Li cn=defaults
|
|
section.
|
|
This flag is
|
|
.Em off
|
|
by default.
|
|
.It ignore_unknown_defaults
|
|
If set,
|
|
.Nm sudo
|
|
will not produce a warning if it encounters an unknown Defaults entry
|
|
in the
|
|
.Em sudoers
|
|
file or an unknown sudoOption in LDAP.
|
|
This flag is
|
|
.Em off
|
|
by default.
|
|
.It insults
|
|
If set,
|
|
.Nm sudo
|
|
will insult users when they enter an incorrect password.
|
|
This flag is
|
|
.Em @insults@
|
|
by default.
|
|
.It log_host
|
|
If set, the host name will be logged in the (non-syslog)
|
|
.Nm sudo
|
|
log file.
|
|
This flag is
|
|
.Em off
|
|
by default.
|
|
.It log_input
|
|
If set,
|
|
.Nm sudo
|
|
will run the command in a pseudo-tty and log all user input.
|
|
If the standard input is not connected to the user's tty, due to
|
|
I/O redirection or because the command is part of a pipeline, that
|
|
input is also captured and stored in a separate log file.
|
|
Anything sent to the standard input will be consumed, regardless of
|
|
whether or not the command run via
|
|
.Nm sudo
|
|
is actually reading the standard input.
|
|
This may have unexpected results when using
|
|
.Nm sudo
|
|
in a shell script that expects to process the standard input.
|
|
For more information about I/O logging, see the
|
|
.Sx "I/O LOG FILES"
|
|
section.
|
|
This flag is
|
|
.Em off
|
|
by default.
|
|
.It log_output
|
|
If set,
|
|
.Nm sudo
|
|
will run the command in a pseudo-tty and log all output that is sent
|
|
to the screen, similar to the
|
|
.Xr script 1
|
|
command.
|
|
For more information about I/O logging, see the
|
|
.Sx "I/O LOG FILES"
|
|
section.
|
|
This flag is
|
|
.Em off
|
|
by default.
|
|
.It log_year
|
|
If set, the four-digit year will be logged in the (non-syslog)
|
|
.Nm sudo
|
|
log file.
|
|
This flag is
|
|
.Em off
|
|
by default.
|
|
.It long_otp_prompt
|
|
When validating with a One Time Password (OTP) scheme such as
|
|
.Sy S/Key
|
|
or
|
|
.Sy OPIE ,
|
|
a two-line prompt is used to make it easier
|
|
to cut and paste the challenge to a local window.
|
|
It's not as pretty as the default but some people find it more convenient.
|
|
This flag is
|
|
.Em @long_otp_prompt@
|
|
by default.
|
|
.It mail_all_cmnds
|
|
Send mail to the
|
|
.Em mailto
|
|
user every time a user attempts to run a command via
|
|
.Nm sudo
|
|
(this includes
|
|
.Nm sudoedit ) .
|
|
No mail will be sent if the user runs
|
|
.Nm sudo
|
|
with the
|
|
.Fl l
|
|
or
|
|
.Fl v
|
|
option unless there is an authentication error and the
|
|
.Em mail_badpass
|
|
flag is also set.
|
|
This flag is
|
|
.Em off
|
|
by default.
|
|
.It mail_always
|
|
Send mail to the
|
|
.Em mailto
|
|
user every time a user runs
|
|
.Nm sudo .
|
|
This flag is
|
|
.Em off
|
|
by default.
|
|
.It mail_badpass
|
|
Send mail to the
|
|
.Em mailto
|
|
user if the user running
|
|
.Nm sudo
|
|
does not enter the correct password.
|
|
If the command the user is attempting to run is not permitted by
|
|
.Nm sudoers
|
|
and one of the
|
|
.Em mail_all_cmnds ,
|
|
.Em mail_always ,
|
|
.Em mail_no_host ,
|
|
.Em mail_no_perms
|
|
or
|
|
.Em mail_no_user
|
|
flags are set, this flag will have no effect.
|
|
This flag is
|
|
.Em off
|
|
by default.
|
|
.It mail_no_host
|
|
If set, mail will be sent to the
|
|
.Em mailto
|
|
user if the invoking user exists in the
|
|
.Em sudoers
|
|
file, but is not allowed to run commands on the current host.
|
|
This flag is
|
|
.Em @mail_no_host@
|
|
by default.
|
|
.It mail_no_perms
|
|
If set, mail will be sent to the
|
|
.Em mailto
|
|
user if the invoking user is allowed to use
|
|
.Nm sudo
|
|
but the command they are trying is not listed in their
|
|
.Em sudoers
|
|
file entry or is explicitly denied.
|
|
This flag is
|
|
.Em @mail_no_perms@
|
|
by default.
|
|
.It mail_no_user
|
|
If set, mail will be sent to the
|
|
.Em mailto
|
|
user if the invoking user is not in the
|
|
.Em sudoers
|
|
file.
|
|
This flag is
|
|
.Em @mail_no_user@
|
|
by default.
|
|
.It match_group_by_gid
|
|
By default,
|
|
.Nm
|
|
will look up each group the user is a member of by group ID to
|
|
determine the group name (this is only done once).
|
|
The resulting list of the user's group names is used when matching
|
|
groups listed in the
|
|
.Em sudoers
|
|
file.
|
|
This works well on systems where the number of groups listed in the
|
|
.Em sudoers
|
|
file is larger than the number of groups a typical user belongs to.
|
|
On systems where group lookups are slow, where users may belong
|
|
to a large number of groups, and where the number of groups listed
|
|
in the
|
|
.Em sudoers
|
|
file is relatively small, it may be prohibitively expensive and
|
|
running commands via
|
|
.Nm sudo
|
|
may take longer than normal.
|
|
On such systems it may be faster to use the
|
|
.Em match_group_by_gid
|
|
flag to avoid resolving the user's group IDs to group names.
|
|
In this case,
|
|
.Nm
|
|
must look up any group name listed in the
|
|
.Em sudoers
|
|
file and use the group ID instead of the group name when determining
|
|
whether the user is a member of the group.
|
|
.Pp
|
|
Note that if
|
|
.Em match_group_by_gid
|
|
is enabled, group database lookups performed by
|
|
.Nm
|
|
will be keyed by group name as opposed to group ID.
|
|
On systems where there are multiple sources for the group database,
|
|
it is possible to have conflicting group names or group IDs in the local
|
|
.Pa /etc/group
|
|
file and the remote group database.
|
|
On such systems, enabling or disabling
|
|
.Em match_group_by_gid
|
|
can be used to choose whether group database queries are performed
|
|
by name (enabled) or ID (disabled), which may aid in working around
|
|
group entry conflicts.
|
|
.Pp
|
|
The
|
|
.Em match_group_by_gid
|
|
flag has no effect when
|
|
.Em sudoers
|
|
data is stored in LDAP.
|
|
This flag is
|
|
.Em off
|
|
by default.
|
|
.Pp
|
|
This setting is only supported by version 1.8.18 or higher.
|
|
.It netgroup_tuple
|
|
If set, netgroup lookups will be performed using the full netgroup
|
|
tuple: host name, user name and domain (if one is set).
|
|
Historically,
|
|
.Nm sudo
|
|
only matched the user name and domain for netgroups used in a
|
|
.Li User_List
|
|
and only matched the host name and domain for netgroups used in a
|
|
.Li Host_List .
|
|
This flag is
|
|
.Em off
|
|
by default.
|
|
.It noexec
|
|
If set, all commands run via
|
|
.Nm sudo
|
|
will behave as if the
|
|
.Li NOEXEC
|
|
tag has been set, unless overridden by an
|
|
.Li EXEC
|
|
tag.
|
|
See the description of
|
|
.Em EXEC and NOEXEC
|
|
above as well as the
|
|
.Sx Preventing shell escapes
|
|
section at the end of this manual.
|
|
This flag is
|
|
.Em off
|
|
by default.
|
|
.It pam_session
|
|
On systems that use PAM for authentication,
|
|
.Nm sudo
|
|
will create a new PAM session for the command to be run in.
|
|
Disabling
|
|
.Em pam_session
|
|
may be needed on older PAM implementations or on operating systems where
|
|
opening a PAM session changes the utmp or wtmp files.
|
|
If PAM session support is disabled, resource limits may not be updated
|
|
for the command being run.
|
|
If
|
|
.Em pam_session ,
|
|
.Em pam_setcred ,
|
|
and
|
|
.Em use_pty
|
|
are disabled and I/O logging has not been configured,
|
|
.Nm sudo
|
|
will execute the command directly instead of running it as a child
|
|
process.
|
|
This flag is
|
|
.Em @pam_session@
|
|
by default.
|
|
.Pp
|
|
This setting is only supported by version 1.8.7 or higher.
|
|
.It pam_setcred
|
|
On systems that use PAM for authentication,
|
|
.Nm sudo
|
|
will attempt to establish credentials for the target user by default,
|
|
if supported by the underlying authentication system.
|
|
One example of a credential is a Kerberos ticket.
|
|
If
|
|
.Em pam_session ,
|
|
.Em pam_setcred ,
|
|
and
|
|
.Em use_pty
|
|
are disabled and I/O logging has not been configured,
|
|
.Nm sudo
|
|
will execute the command directly instead of running it as a child
|
|
process.
|
|
This flag is
|
|
.Em on
|
|
by default.
|
|
.Pp
|
|
This setting is only supported by version 1.8.8 or higher.
|
|
.It passprompt_override
|
|
If set, the prompt specified by
|
|
.Em passprompt
|
|
or the
|
|
.Ev SUDO_PROMPT
|
|
environment variable will always be used and will replace the
|
|
prompt provided by a PAM module or other authentication method.
|
|
This flag is
|
|
.Em off
|
|
by default.
|
|
.It path_info
|
|
Normally,
|
|
.Nm sudo
|
|
will tell the user when a command could not be
|
|
found in their
|
|
.Ev PATH
|
|
environment variable.
|
|
Some sites may wish to disable this as it could be used to gather
|
|
information on the location of executables that the normal user does
|
|
not have access to.
|
|
The disadvantage is that if the executable is simply not in the user's
|
|
.Ev PATH ,
|
|
.Nm sudo
|
|
will tell the user that they are not allowed to run it, which can be confusing.
|
|
This flag is
|
|
.Em @path_info@
|
|
by default.
|
|
.It preserve_groups
|
|
By default,
|
|
.Nm sudo
|
|
will initialize the group vector to the list of groups the target user is in.
|
|
When
|
|
.Em preserve_groups
|
|
is set, the user's existing group vector is left unaltered.
|
|
The real and effective group IDs, however, are still set to match the
|
|
target user.
|
|
This flag is
|
|
.Em off
|
|
by default.
|
|
.It pwfeedback
|
|
By default,
|
|
.Nm sudo
|
|
reads the password like most other Unix programs,
|
|
by turning off echo until the user hits the return (or enter) key.
|
|
Some users become confused by this as it appears to them that
|
|
.Nm sudo
|
|
has hung at this point.
|
|
When
|
|
.Em pwfeedback
|
|
is set,
|
|
.Nm sudo
|
|
will provide visual feedback when the user presses a key.
|
|
Note that this does have a security impact as an onlooker may be able to
|
|
determine the length of the password being entered.
|
|
This flag is
|
|
.Em off
|
|
by default.
|
|
.It requiretty
|
|
If set,
|
|
.Nm sudo
|
|
will only run when the user is logged in to a real tty.
|
|
When this flag is set,
|
|
.Nm sudo
|
|
can only be run from a login session and not via other means such as
|
|
.Xr cron @mansectsu@
|
|
or cgi-bin scripts.
|
|
This flag is
|
|
.Em off
|
|
by default.
|
|
.It root_sudo
|
|
If set, root is allowed to run
|
|
.Nm sudo
|
|
too.
|
|
Disabling this prevents users from
|
|
.Dq chaining
|
|
.Nm sudo
|
|
commands to get a root shell by doing something like
|
|
.Dq Li sudo sudo /bin/sh .
|
|
Note, however, that turning off
|
|
.Em root_sudo
|
|
will also prevent root from running
|
|
.Nm sudoedit .
|
|
Disabling
|
|
.Em root_sudo
|
|
provides no real additional security; it exists purely for historical reasons.
|
|
This flag is
|
|
.Em @root_sudo@
|
|
by default.
|
|
.It rootpw
|
|
If set,
|
|
.Nm sudo
|
|
will prompt for the root password instead of the password of the invoking user
|
|
when running a command or editing a file.
|
|
This flag is
|
|
.Em off
|
|
by default.
|
|
.It runaspw
|
|
If set,
|
|
.Nm sudo
|
|
will prompt for the password of the user defined by the
|
|
.Em runas_default
|
|
option (defaults to
|
|
.Li @runas_default@ )
|
|
instead of the password of the invoking user
|
|
when running a command or editing a file.
|
|
This flag is
|
|
.Em off
|
|
by default.
|
|
.It set_home
|
|
If enabled and
|
|
.Nm sudo
|
|
is invoked with the
|
|
.Fl s
|
|
option the
|
|
.Ev HOME
|
|
environment variable will be set to the home directory of the target
|
|
user (which is root unless the
|
|
.Fl u
|
|
option is used).
|
|
This effectively makes the
|
|
.Fl s
|
|
option imply
|
|
.Fl H .
|
|
Note that
|
|
.Ev HOME
|
|
is already set when the
|
|
.Em env_reset
|
|
option is enabled, so
|
|
.Em set_home
|
|
is only effective for configurations where either
|
|
.Em env_reset
|
|
is disabled
|
|
or
|
|
.Ev HOME
|
|
is present in the
|
|
.Em env_keep
|
|
list.
|
|
This flag is
|
|
.Em off
|
|
by default.
|
|
.It set_logname
|
|
Normally,
|
|
.Nm sudo
|
|
will set the
|
|
.Ev LOGNAME ,
|
|
.Ev USER
|
|
and
|
|
.Ev USERNAME
|
|
environment variables to the name of the target user (usually root unless the
|
|
.Fl u
|
|
option is given).
|
|
However, since some programs (including the RCS revision control system) use
|
|
.Ev LOGNAME
|
|
to determine the real identity of the user, it may be desirable to
|
|
change this behavior.
|
|
This can be done by negating the set_logname option.
|
|
Note that
|
|
.Em set_logname
|
|
will have no effect
|
|
if the
|
|
.Em env_reset
|
|
option has not been disabled and the
|
|
.Em env_keep
|
|
list contains
|
|
.Ev LOGNAME ,
|
|
.Ev USER
|
|
or
|
|
.Ev USERNAME .
|
|
This flag is
|
|
.Em on
|
|
by default.
|
|
.It set_utmp
|
|
When enabled,
|
|
.Nm sudo
|
|
will create an entry in the utmp (or utmpx) file when a pseudo-tty
|
|
is allocated.
|
|
A pseudo-tty is allocated by
|
|
.Nm sudo
|
|
when the
|
|
.Em log_input ,
|
|
.Em log_output
|
|
or
|
|
.Em use_pty
|
|
flags are enabled.
|
|
By default, the new entry will be a copy of the user's existing utmp
|
|
entry (if any), with the tty, time, type and pid fields updated.
|
|
This flag is
|
|
.Em on
|
|
by default.
|
|
.It setenv
|
|
Allow the user to disable the
|
|
.Em env_reset
|
|
option from the command line via the
|
|
.Fl E
|
|
option.
|
|
Additionally, environment variables set via the command line are
|
|
not subject to the restrictions imposed by
|
|
.Em env_check ,
|
|
.Em env_delete ,
|
|
or
|
|
.Em env_keep .
|
|
As such, only trusted users should be allowed to set variables in this manner.
|
|
This flag is
|
|
.Em off
|
|
by default.
|
|
.It shell_noargs
|
|
If set and
|
|
.Nm sudo
|
|
is invoked with no arguments it acts as if the
|
|
.Fl s
|
|
option had been given.
|
|
That is, it runs a shell as root (the shell is determined by the
|
|
.Ev SHELL
|
|
environment variable if it is set, falling back on the shell listed
|
|
in the invoking user's /etc/passwd entry if not).
|
|
This flag is
|
|
.Em off
|
|
by default.
|
|
.It stay_setuid
|
|
Normally, when
|
|
.Nm sudo
|
|
executes a command the real and effective UIDs are set to the target
|
|
user (root by default).
|
|
This option changes that behavior such that the real UID is left
|
|
as the invoking user's UID.
|
|
In other words, this makes
|
|
.Nm sudo
|
|
act as a setuid wrapper.
|
|
This can be useful on systems that disable some potentially
|
|
dangerous functionality when a program is run setuid.
|
|
This option is only effective on systems that support either the
|
|
.Xr setreuid 2
|
|
or
|
|
.Xr setresuid 2
|
|
system call.
|
|
This flag is
|
|
.Em off
|
|
by default.
|
|
.It sudoedit_checkdir
|
|
If set,
|
|
.Nm sudoedit
|
|
will check all directory components of the path to be edited for writability
|
|
by the invoking user.
|
|
Symbolic links will not be followed in writable directories and
|
|
.Nm sudoedit
|
|
will refuse to edit a file located in a writable directory.
|
|
These restrictions are not enforced when
|
|
.Nm sudoedit
|
|
is run by root.
|
|
On some systems, if all directory components of the path to be edited
|
|
are not readable by the target user,
|
|
.Nm sudoedit
|
|
will be unable to edit the file.
|
|
This flag is
|
|
.Em on
|
|
by default.
|
|
.Pp
|
|
This setting was first introduced in version 1.8.15 but initially
|
|
suffered from a race condition.
|
|
The check for symbolic links in writable intermediate directories
|
|
was added in version 1.8.16.
|
|
.It sudoedit_follow
|
|
By default,
|
|
.Nm sudoedit
|
|
will not follow symbolic links when opening files.
|
|
The
|
|
.Em sudoedit_follow
|
|
option can be enabled to allow
|
|
.Nm sudoedit
|
|
to open symbolic links.
|
|
It may be overridden on a per-command basis by the
|
|
.Em FOLLOW
|
|
and
|
|
.Em NOFOLLOW
|
|
tags.
|
|
This flag is
|
|
.Em off
|
|
by default.
|
|
.Pp
|
|
This setting is only supported by version 1.8.15 or higher.
|
|
.It syslog_pid
|
|
When logging via
|
|
.Xr syslog 3 ,
|
|
include the process ID in the log entry.
|
|
This flag is
|
|
.Em off
|
|
by default.
|
|
.Pp
|
|
This setting is only supported by version 1.8.21 or higher.
|
|
.It targetpw
|
|
If set,
|
|
.Nm sudo
|
|
will prompt for the password of the user specified
|
|
by the
|
|
.Fl u
|
|
option (defaults to
|
|
.Li root )
|
|
instead of the password of the invoking user
|
|
when running a command or editing a file.
|
|
Note that this flag precludes the use of a uid not listed in the passwd
|
|
database as an argument to the
|
|
.Fl u
|
|
option.
|
|
This flag is
|
|
.Em off
|
|
by default.
|
|
.It tty_tickets
|
|
If set, users must authenticate on a per-tty basis.
|
|
With this flag enabled,
|
|
.Nm sudo
|
|
will use a separate record in the time stamp file for each terminal.
|
|
If disabled, a single record is used for all login sessions.
|
|
.Pp
|
|
This option has been superseded by the
|
|
.Em timestamp_type
|
|
option.
|
|
.It umask_override
|
|
If set,
|
|
.Nm sudo
|
|
will set the umask as specified in the
|
|
.Em sudoers
|
|
file without modification.
|
|
This makes it possible to specify a umask in the
|
|
.Em sudoers
|
|
file that is more permissive than the user's own umask and matches
|
|
historical behavior.
|
|
If
|
|
.Em umask_override
|
|
is not set,
|
|
.Nm sudo
|
|
will set the umask to be the union of the user's umask and what is specified in
|
|
.Em sudoers .
|
|
This flag is
|
|
.Em @umask_override@
|
|
by default.
|
|
.It use_loginclass
|
|
If set,
|
|
.Nm sudo
|
|
will apply the defaults specified for the target user's login class
|
|
if one exists.
|
|
Only available if
|
|
.Nm sudo
|
|
is configured with the
|
|
.Li --with-logincap
|
|
option.
|
|
This flag is
|
|
.Em off
|
|
by default.
|
|
.It use_netgroups
|
|
If set, netgroups (prefixed with
|
|
.Ql + ) ,
|
|
may be used in place of a user or host.
|
|
For LDAP-based sudoers, netgroup support requires an expensive
|
|
sub-string match on the server unless the
|
|
.Sy NETGROUP_BASE
|
|
directive is present in the
|
|
.Pa @ldap_conf@
|
|
file.
|
|
If netgroups are not needed, this option can be disabled to reduce the
|
|
load on the LDAP server.
|
|
This flag is
|
|
.Em on
|
|
by default.
|
|
.It use_pty
|
|
If set, and
|
|
.Nm sudo
|
|
is running in a terminal, the command will be run in a pseudo-pty
|
|
(even if no I/O logging is being done).
|
|
If the
|
|
.Nm sudo
|
|
process is not attached to a terminal,
|
|
.Em use_pty
|
|
has no effect.
|
|
.Pp
|
|
A malicious program run under
|
|
.Nm sudo
|
|
may be capable of injecting injecting commands into the user's
|
|
terminal or running a background process that retains access to the
|
|
user's terminal device even after the main program has finished
|
|
executing.
|
|
By running the command in a separate pseudo-pty, this attack is
|
|
no longer possible.
|
|
This flag is
|
|
.Em off
|
|
by default.
|
|
.It user_command_timeouts
|
|
If set, the user may specify a timeout on the command line.
|
|
If the timeout expires before the command has exited, the
|
|
command will be terminated.
|
|
If a timeout is specified both in the
|
|
.Pa sudoers
|
|
file and on the command line, the smaller of the two timeouts will be used.
|
|
See the
|
|
.Li Timeout_Spec
|
|
section for a description of the timeout syntax.
|
|
This flag is
|
|
.Em off
|
|
by default.
|
|
.Pp
|
|
This setting is only supported by version 1.8.20 or higher.
|
|
.It utmp_runas
|
|
If set,
|
|
.Nm sudo
|
|
will store the name of the runas user when updating the utmp (or utmpx) file.
|
|
By default,
|
|
.Nm sudo
|
|
stores the name of the invoking user.
|
|
This flag is
|
|
.Em off
|
|
by default.
|
|
.It visiblepw
|
|
By default,
|
|
.Nm sudo
|
|
will refuse to run if the user must enter a password but it is not
|
|
possible to disable echo on the terminal.
|
|
If the
|
|
.Em visiblepw
|
|
flag is set,
|
|
.Nm sudo
|
|
will prompt for a password even when it would be visible on the screen.
|
|
This makes it possible to run things like
|
|
.Dq Li ssh somehost sudo ls
|
|
since by default,
|
|
.Xr ssh 1
|
|
does
|
|
not allocate a tty when running a command.
|
|
This flag is
|
|
.Em off
|
|
by default.
|
|
.El
|
|
.Pp
|
|
.Sy Integers :
|
|
.Bl -tag -width 16n
|
|
.It closefrom
|
|
Before it executes a command,
|
|
.Nm sudo
|
|
will close all open file descriptors other than standard input,
|
|
standard output and standard error (ie: file descriptors 0-2).
|
|
The
|
|
.Em closefrom
|
|
option can be used to specify a different file descriptor at which
|
|
to start closing.
|
|
The default is
|
|
.Li 3 .
|
|
.It command_timeout
|
|
The maximum amount of time a command is allowed to run before
|
|
it is terminated.
|
|
See the
|
|
.Li Timeout_Spec
|
|
section for a description of the timeout syntax.
|
|
.Pp
|
|
This setting is only supported by version 1.8.20 or higher.
|
|
.It maxseq
|
|
The maximum sequence number that will be substituted for the
|
|
.Dq Li %{seq}
|
|
escape in the I/O log file (see the
|
|
.Em iolog_dir
|
|
description above for more information).
|
|
While the value substituted for
|
|
.Dq Li %{seq}
|
|
is in base 36,
|
|
.Em maxseq
|
|
itself should be expressed in decimal.
|
|
Values larger than 2176782336 (which corresponds to the
|
|
base 36 sequence number
|
|
.Dq ZZZZZZ )
|
|
will be silently truncated to 2176782336.
|
|
The default value is 2176782336.
|
|
.Pp
|
|
Once the local sequence number reaches the value of
|
|
.Em maxseq ,
|
|
it will
|
|
.Dq roll over
|
|
to zero, after which
|
|
.Nm
|
|
will truncate and re-use any existing I/O log path names.
|
|
.Pp
|
|
This setting is only supported by version 1.8.7 or higher.
|
|
.It passwd_tries
|
|
The number of tries a user gets to enter his/her password before
|
|
.Nm sudo
|
|
logs the failure and exits.
|
|
The default is
|
|
.Li @passwd_tries@ .
|
|
.It syslog_maxlen
|
|
On many systems,
|
|
.Xr syslog 3
|
|
has a relatively small log buffer.
|
|
IETF RFC 5424 states that syslog servers must support messages of
|
|
at least 480 bytes and should support messages up to 2048 bytes.
|
|
By default,
|
|
.Nm
|
|
creates log messages up to 980 bytes which corresponds to the
|
|
historic BSD syslog implementation which used a 1024 byte buffer
|
|
to store the message, date, hostname and program name.
|
|
To prevent syslog messages from being truncated,
|
|
.Nm
|
|
will split up log messages that are larger than
|
|
.Em syslog_maxlen
|
|
bytes.
|
|
When a message is split, additional parts will include the string
|
|
.Dq Pq command continued
|
|
after the user name and before the continued command line arguments.
|
|
.Pp
|
|
This setting is only supported by version 1.8.19 or higher.
|
|
.El
|
|
.Pp
|
|
.Sy Integers that can be used in a boolean context :
|
|
.Bl -tag -width 16n
|
|
.It loglinelen
|
|
Number of characters per line for the file log.
|
|
This value is used to decide when to wrap lines for nicer log files.
|
|
This has no effect on the syslog log file, only the file log.
|
|
The default is
|
|
.Li @loglen@
|
|
(use 0 or negate the option to disable word wrap).
|
|
.It passwd_timeout
|
|
Number of minutes before the
|
|
.Nm sudo
|
|
password prompt times out, or
|
|
.Li 0
|
|
for no timeout.
|
|
The timeout may include a fractional component
|
|
if minute granularity is insufficient, for example
|
|
.Li 2.5 .
|
|
The
|
|
default is
|
|
.Li @password_timeout@ .
|
|
.It timestamp_timeout
|
|
Number of minutes that can elapse before
|
|
.Nm sudo
|
|
will ask for a passwd again.
|
|
The timeout may include a fractional component if
|
|
minute granularity is insufficient, for example
|
|
.Li 2.5 .
|
|
The default is
|
|
.Li @timeout@ .
|
|
Set this to
|
|
.Li 0
|
|
to always prompt for a password.
|
|
If set to a value less than
|
|
.Li 0
|
|
the user's time stamp will not expire until the system is rebooted.
|
|
This can be used to allow users to create or delete their own time stamps via
|
|
.Dq Li sudo -v
|
|
and
|
|
.Dq Li sudo -k
|
|
respectively.
|
|
.It umask
|
|
Umask to use when running the command.
|
|
Negate this option or set it to 0777 to preserve the user's umask.
|
|
The actual umask that is used will be the union of the user's umask
|
|
and the value of the
|
|
.Em umask
|
|
option, which defaults to
|
|
.Li @sudo_umask@ .
|
|
This guarantees
|
|
that
|
|
.Nm sudo
|
|
never lowers the umask when running a command.
|
|
Note: on systems that use PAM, the default PAM configuration may specify
|
|
its own umask which will override the value set in
|
|
.Em sudoers .
|
|
.El
|
|
.Pp
|
|
.Sy Strings :
|
|
.Bl -tag -width 16n
|
|
.It authfail_message
|
|
Message that is displayed after a user fails to authenticate.
|
|
The message may include the
|
|
.Ql %d
|
|
escape which will expand to the number of failed password attempts.
|
|
If set, it overrides the default message,
|
|
.Li %d incorrect password attempt(s) .
|
|
.It badpass_message
|
|
Message that is displayed if a user enters an incorrect password.
|
|
The default is
|
|
.Li @badpass_message@
|
|
unless insults are enabled.
|
|
.It editor
|
|
A colon
|
|
.Pq Ql :\&
|
|
separated list of editors path names used by
|
|
.Nm sudoedit
|
|
and
|
|
.Nm visudo .
|
|
For
|
|
.Nm sudoedit ,
|
|
this list is used to find an editor when none of the
|
|
.Ev SUDO_EDITOR ,
|
|
.Ev VISUAL
|
|
or
|
|
.Ev EDITOR
|
|
environment variables are set to an editor that exists and is executable.
|
|
For
|
|
.Nm visudo ,
|
|
it is used as a white list of allowed editors;
|
|
.Nm visudo
|
|
will choose the editor that matches the user's
|
|
.Ev SUDO_EDITOR ,
|
|
.Ev VISUAL
|
|
or
|
|
.Ev EDITOR
|
|
environment variable if possible, or the first editor in the
|
|
list that exists and is executable if not.
|
|
Unless invoked as
|
|
.Nm sudoedit ,
|
|
.Nm sudo
|
|
does not preserve the
|
|
.Ev SUDO_EDITOR ,
|
|
.Ev VISUAL
|
|
and
|
|
.Ev EDITOR
|
|
environment variables by default, even when the
|
|
.Em env_reset
|
|
option is enabled.
|
|
The default is
|
|
.Pa @editor@ .
|
|
.It iolog_dir
|
|
The top-level directory to use when constructing the path name for
|
|
the input/output log directory.
|
|
Only used if the
|
|
.Em log_input
|
|
or
|
|
.Em log_output
|
|
options are enabled or when the
|
|
.Li LOG_INPUT
|
|
or
|
|
.Li LOG_OUTPUT
|
|
tags are present for a command.
|
|
The session sequence number, if any, is stored in the directory.
|
|
The default is
|
|
.Pa @iolog_dir@ .
|
|
.Pp
|
|
The following percent
|
|
.Pq Ql %
|
|
escape sequences are supported:
|
|
.Bl -tag -width 4n
|
|
.It Li %{seq}
|
|
expanded to a monotonically increasing base-36 sequence number, such as 0100A5,
|
|
where every two digits are used to form a new directory, e.g.\&
|
|
.Pa 01/00/A5
|
|
.It Li %{user}
|
|
expanded to the invoking user's login name
|
|
.It Li %{group}
|
|
expanded to the name of the invoking user's real group ID
|
|
.It Li %{runas_user}
|
|
expanded to the login name of the user the command will
|
|
be run as (e.g.\& root)
|
|
.It Li %{runas_group}
|
|
expanded to the group name of the user the command will
|
|
be run as (e.g.\& wheel)
|
|
.It Li %{hostname}
|
|
expanded to the local host name without the domain name
|
|
.It Li %{command}
|
|
expanded to the base name of the command being run
|
|
.El
|
|
.Pp
|
|
In addition, any escape sequences supported by the system's
|
|
.Xr strftime 3
|
|
function will be expanded.
|
|
.Pp
|
|
To include a literal
|
|
.Ql %
|
|
character, the string
|
|
.Ql %%
|
|
should be used.
|
|
.It iolog_file
|
|
The path name, relative to
|
|
.Em iolog_dir ,
|
|
in which to store input/output logs when the
|
|
.Em log_input
|
|
or
|
|
.Em log_output
|
|
options are enabled or when the
|
|
.Li LOG_INPUT
|
|
or
|
|
.Li LOG_OUTPUT
|
|
tags are present for a command.
|
|
Note that
|
|
.Em iolog_file
|
|
may contain directory components.
|
|
The default is
|
|
.Dq Li %{seq} .
|
|
.Pp
|
|
See the
|
|
.Em iolog_dir
|
|
option above for a list of supported percent
|
|
.Pq Ql %
|
|
escape sequences.
|
|
.Pp
|
|
In addition to the escape sequences, path names that end in six or
|
|
more
|
|
.Li X Ns s
|
|
will have the
|
|
.Li X Ns s
|
|
replaced with a unique combination of digits and letters, similar to the
|
|
.Xr mktemp 3
|
|
function.
|
|
.Pp
|
|
If the path created by concatenating
|
|
.Em iolog_dir
|
|
and
|
|
.Em iolog_file
|
|
already exists, the existing I/O log file will be truncated and
|
|
overwritten unless
|
|
.Em iolog_file
|
|
ends in six or
|
|
more
|
|
.Li X Ns s .
|
|
.It iolog_flush
|
|
If set,
|
|
.Nm sudo
|
|
will flush I/O log data to disk after each write instead of buffering it.
|
|
This makes it possible to view the logs in real-time as the program
|
|
is executing but may significantly reduce the effectiveness of I/O
|
|
log compression.
|
|
This flag is
|
|
.Em off
|
|
by default.
|
|
.Pp
|
|
This setting is only supported by version 1.8.20 or higher.
|
|
.It iolog_group
|
|
The group name to look up when setting the group ID on new I/O log
|
|
files and directories.
|
|
If
|
|
.Em iolog_group
|
|
is not set,
|
|
the primary group ID of the user specified by
|
|
.Em iolog_user
|
|
is used.
|
|
If neither
|
|
.Em iolog_group
|
|
nor
|
|
.Em iolog_user
|
|
are set, I/O log files and directories are created with group ID 0.
|
|
.Pp
|
|
This setting is only supported by version 1.8.19 or higher.
|
|
.It iolog_mode
|
|
The file mode to use when creating I/O log files.
|
|
Mode bits for read and write permissions for owner, group or other
|
|
are honored, everything else is ignored.
|
|
The file permissions will always include the owner read and
|
|
write bits, even if they are not present in the specified mode.
|
|
When creating I/O log directories, search (execute) bits are added
|
|
to to match the read and write bits specified by
|
|
.Em iolog_mode .
|
|
Defaults to 0600 (read and write by user only).
|
|
.Pp
|
|
This setting is only supported by version 1.8.19 or higher.
|
|
.It iolog_user
|
|
The user name to look up when setting the user and group IDs on new
|
|
I/O log files and directories.
|
|
If
|
|
.Em iolog_group
|
|
is set, it will be used instead of the user's primary group ID.
|
|
By default, I/O log files and directories are created with user and
|
|
group ID 0.
|
|
.Pp
|
|
This setting can be useful when the I/O logs are stored on a Network
|
|
File System (NFS) share.
|
|
Having a dedicated user own the I/O log files means that
|
|
.Nm
|
|
does not write to the log files as user ID 0, which is usually
|
|
not permitted by NFS.
|
|
.Pp
|
|
This setting is only supported by version 1.8.19 or higher.
|
|
.It lecture_status_dir
|
|
The directory in which
|
|
.Nm sudo
|
|
stores per-user lecture status files.
|
|
Once a user has received the lecture, a zero-length file is
|
|
created in this directory so that
|
|
.Nm sudo
|
|
will not lecture the user again.
|
|
This directory should
|
|
.Em not
|
|
be cleared when the system reboots.
|
|
The default is
|
|
.Pa @vardir@/lectured .
|
|
.It limitprivs
|
|
The default Solaris limit privileges to use when constructing a new
|
|
privilege set for a command.
|
|
This bounds all privileges of the executing process.
|
|
The default limit privileges may be overridden on a per-command basis in
|
|
.Em sudoers .
|
|
This option is only available if
|
|
.Nm
|
|
is built on Solaris 10 or higher.
|
|
.It mailsub
|
|
Subject of the mail sent to the
|
|
.Em mailto
|
|
user.
|
|
The escape
|
|
.Li %h
|
|
will expand to the host name of the machine.
|
|
Default is
|
|
.Dq Li @mailsub@ .
|
|
.It noexec_file
|
|
As of
|
|
.Nm sudo
|
|
version 1.8.1 this option is no longer supported.
|
|
The path to the noexec file should now be set in the
|
|
.Xr sudo.conf @mansectform@
|
|
file.
|
|
.It pam_login_service
|
|
On systems that use PAM for authentication, this is the service
|
|
name used when the
|
|
.Fl i
|
|
option is specified.
|
|
The default value is
|
|
.Dq Li @pam_login_service@ .
|
|
See the description of
|
|
.Em pam_service
|
|
for more information.
|
|
.Pp
|
|
This setting is only supported by version 1.8.8 or higher.
|
|
.It pam_service
|
|
On systems that use PAM for authentication, the service name
|
|
specifies the PAM policy to apply.
|
|
This usually corresponds to an entry in the
|
|
.Pa pam.conf
|
|
file or a file in the
|
|
.Pa /etc/pam.d
|
|
directory.
|
|
The default value is
|
|
.Dq Li sudo .
|
|
.Pp
|
|
This setting is only supported by version 1.8.8 or higher.
|
|
.It passprompt
|
|
The default prompt to use when asking for a password; can be overridden via the
|
|
.Fl p
|
|
option or the
|
|
.Ev SUDO_PROMPT
|
|
environment variable.
|
|
The following percent
|
|
.Pq Ql %
|
|
escape sequences are supported:
|
|
.Bl -tag -width 4n
|
|
.It Li %H
|
|
expanded to the local host name including the domain name
|
|
(only if the machine's host name is fully qualified or the
|
|
.Em fqdn
|
|
option is set)
|
|
.It Li %h
|
|
expanded to the local host name without the domain name
|
|
.It Li %p
|
|
expanded to the user whose password is being asked for (respects the
|
|
.Em rootpw ,
|
|
.Em targetpw
|
|
and
|
|
.Em runaspw
|
|
flags in
|
|
.Em sudoers )
|
|
.It Li \&%U
|
|
expanded to the login name of the user the command will
|
|
be run as (defaults to root)
|
|
.It Li %u
|
|
expanded to the invoking user's login name
|
|
.It Li %%
|
|
two consecutive
|
|
.Li %
|
|
characters are collapsed into a single
|
|
.Li %
|
|
character
|
|
.El
|
|
.Pp
|
|
On systems that use PAM for authentication,
|
|
.Em passprompt
|
|
will only be used if the prompt provided by the PAM module matches the string
|
|
.Dq "Password: "
|
|
or
|
|
.Dq "username's Password: " .
|
|
This ensures that the
|
|
.Em passprompt
|
|
setting does not interfere with challenge-response style authentication.
|
|
The
|
|
.Em passprompt_override
|
|
flag can be used to change this behavior.
|
|
.Pp
|
|
The default value is
|
|
.Dq Li "@passprompt@" .
|
|
.It privs
|
|
The default Solaris privileges to use when constructing a new
|
|
privilege set for a command.
|
|
This is passed to the executing process via the inherited privilege set,
|
|
but is bounded by the limit privileges.
|
|
If the
|
|
.Em privs
|
|
option is specified but the
|
|
.Em limitprivs
|
|
option is not, the limit privileges of the executing process is set to
|
|
.Em privs .
|
|
The default privileges may be overridden on a per-command basis in
|
|
.Em sudoers .
|
|
This option is only available if
|
|
.Nm
|
|
is built on Solaris 10 or higher.
|
|
.It role
|
|
The default SELinux role to use when constructing a new security
|
|
context to run the command.
|
|
The default role may be overridden on a per-command basis in the
|
|
.Em sudoers
|
|
file or via command line options.
|
|
This option is only available when
|
|
.Nm sudo
|
|
is built with SELinux support.
|
|
.It runas_default
|
|
The default user to run commands as if the
|
|
.Fl u
|
|
option is not specified on the command line.
|
|
This defaults to
|
|
.Li @runas_default@ .
|
|
.It sudoers_locale
|
|
Locale to use when parsing the sudoers file, logging commands, and
|
|
sending email.
|
|
Note that changing the locale may affect how sudoers is interpreted.
|
|
Defaults to
|
|
.Dq Li C .
|
|
.It timestamp_type
|
|
.Nm sudoers
|
|
uses per-user time stamp files for credential caching.
|
|
The
|
|
.Em timestamp_type
|
|
option can be used to specify the type of time stamp record used.
|
|
It has the following possible values:
|
|
.Bl -tag -width 6n
|
|
.It global
|
|
A single time stamp record is used for all of a user's login sessions,
|
|
regardless of the terminal or parent process ID.
|
|
An additional record is used to serialize password prompts when
|
|
.Nm sudo
|
|
is used multiple times in a pipeline, but this does not affect authentication.
|
|
.It ppid
|
|
A single time stamp record is used for all processes with the same parent
|
|
process ID (usually the shell).
|
|
Commands run from the same shell (or other common parent process)
|
|
will not require a password for
|
|
.Em timestamp_timeout
|
|
minutes
|
|
.Po
|
|
.Li @timeout@
|
|
by default
|
|
.Pc .
|
|
Commands run via
|
|
.Nm sudo
|
|
with a different parent process ID, for example from a shell script,
|
|
will be authenticated separately.
|
|
.It tty
|
|
One time stamp record is used for each terminal,
|
|
which means that a user's login sessions are authenticated separately.
|
|
If no terminal is present, the behavior is the same as
|
|
.Em ppid .
|
|
Commands run from the same terminal will not require a password for
|
|
.Em timestamp_timeout
|
|
minutes
|
|
.Po
|
|
.Li @timeout@
|
|
by default
|
|
.Pc .
|
|
.It kernel
|
|
The time stamp is stored in the kernel as an attribute of the terminal
|
|
device.
|
|
If no terminal is present, the behavior is the same as
|
|
.Em ppid .
|
|
Negative
|
|
.Em timestamp_timeout
|
|
values are not supported and positive values are limited to a maximum
|
|
of 60 minutes.
|
|
This is currently only supported on OpenBSD.
|
|
.El
|
|
.Pp
|
|
The default value is
|
|
.Em @timestamp_type@ .
|
|
.Pp
|
|
This setting is only supported by version 1.8.21 or higher.
|
|
.It timestampdir
|
|
The directory in which
|
|
.Nm sudo
|
|
stores its time stamp files.
|
|
This directory should be cleared when the system reboots.
|
|
The default is
|
|
.Pa @rundir@/ts .
|
|
.It timestampowner
|
|
The owner of the lecture status directory, time stamp directory and all
|
|
files stored therein.
|
|
The default is
|
|
.Li root .
|
|
.It type
|
|
The default SELinux type to use when constructing a new security
|
|
context to run the command.
|
|
The default type may be overridden on a per-command basis in the
|
|
.Em sudoers
|
|
file or via command line options.
|
|
This option is only available when
|
|
.Nm sudo
|
|
is built with SELinux support.
|
|
.El
|
|
.Pp
|
|
.Sy Strings that can be used in a boolean context :
|
|
.Bl -tag -width 12n
|
|
.It env_file
|
|
The
|
|
.Em env_file
|
|
option specifies the fully qualified path to a file containing variables
|
|
to be set in the environment of the program being run.
|
|
Entries in this file should either be of the form
|
|
.Dq Li VARIABLE=value
|
|
or
|
|
.Dq Li export VARIABLE=value .
|
|
The value may optionally be surrounded by single or double quotes.
|
|
Variables in this file are only added if the variable does not already
|
|
exist in the environment.
|
|
This file is considered to be part of the security policy,
|
|
its contents are not subject to other
|
|
.Nm sudo
|
|
environment restrictions such as
|
|
.Em env_keep
|
|
and
|
|
.Em env_check .
|
|
.It exempt_group
|
|
Users in this group are exempt from password and PATH requirements.
|
|
The group name specified should not include a
|
|
.Li %
|
|
prefix.
|
|
This is not set by default.
|
|
.It fdexec
|
|
Determines whether
|
|
.Nm sudo
|
|
will execute a command by its path or by an open file descriptor.
|
|
It has the following possible values:
|
|
.Bl -tag -width 6n
|
|
.It always
|
|
Always execute by file descriptor.
|
|
.It never
|
|
Never execute by file descriptor.
|
|
.It digest_only
|
|
Only execute by file descriptor if the command has an associated digest
|
|
in the
|
|
.Em sudoers
|
|
file.
|
|
.El
|
|
.Pp
|
|
The default value is
|
|
.Em digest_only .
|
|
This avoids a time of check versus time of use race condition when
|
|
the command is located in a directory writable by the invoking user.
|
|
.Pp
|
|
Note that
|
|
.Em fdexec
|
|
will change the first element of the argument vector for scripts
|
|
($0 in the shell) due to the way the kernel runs script interpreters.
|
|
Instead of being a normal path, it will refer to a file descriptor.
|
|
For example,
|
|
.Pa /dev/fd/4
|
|
on Solaris and
|
|
.Pa /proc/self/fd/4
|
|
on Linux.
|
|
A workaround is to use the
|
|
.Dv SUDO_COMMAND
|
|
environment variable instead.
|
|
.Pp
|
|
The
|
|
.Em fdexec
|
|
setting is only used when the command is matched by path name.
|
|
It has no effect if the command is matched by the built-in
|
|
.Sy ALL
|
|
alias.
|
|
.Pp
|
|
This setting is only supported by version 1.8.20 or higher.
|
|
If the operating system does not support the
|
|
.Xr fexecve 2
|
|
system call, this setting has no effect.
|
|
.It group_plugin
|
|
A string containing a
|
|
.Nm sudoers
|
|
group plugin with optional arguments.
|
|
The string should consist of the plugin
|
|
path, either fully-qualified or relative to the
|
|
.Pa @PLUGINDIR@
|
|
directory, followed by any configuration arguments the plugin requires.
|
|
These arguments (if any) will be passed to the plugin's initialization function.
|
|
If arguments are present, the string must be enclosed in double quotes
|
|
.Pq \&"" .
|
|
.Pp
|
|
For more information see
|
|
.Sx "GROUP PROVIDER PLUGINS" .
|
|
.It lecture
|
|
This option controls when a short lecture will be printed along with
|
|
the password prompt.
|
|
It has the following possible values:
|
|
.Bl -tag -width 6n
|
|
.It always
|
|
Always lecture the user.
|
|
.It never
|
|
Never lecture the user.
|
|
.It once
|
|
Only lecture the user the first time they run
|
|
.Nm sudo .
|
|
.El
|
|
.Pp
|
|
If no value is specified, a value of
|
|
.Em once
|
|
is implied.
|
|
Negating the option results in a value of
|
|
.Em never
|
|
being used.
|
|
The default value is
|
|
.Em @lecture@ .
|
|
.It lecture_file
|
|
Path to a file containing an alternate
|
|
.Nm sudo
|
|
lecture that will be used in place of the standard lecture if the named
|
|
file exists.
|
|
By default,
|
|
.Nm sudo
|
|
uses a built-in lecture.
|
|
.It listpw
|
|
This option controls when a password will be required when a user runs
|
|
.Nm sudo
|
|
with the
|
|
.Fl l
|
|
option.
|
|
It has the following possible values:
|
|
.Bl -tag -width 8n
|
|
.It all
|
|
All the user's
|
|
.Em sudoers
|
|
file entries for the current host must have
|
|
the
|
|
.Li NOPASSWD
|
|
flag set to avoid entering a password.
|
|
.It always
|
|
The user must always enter a password to use the
|
|
.Fl l
|
|
option.
|
|
.It any
|
|
At least one of the user's
|
|
.Em sudoers
|
|
file entries for the current host
|
|
must have the
|
|
.Li NOPASSWD
|
|
flag set to avoid entering a password.
|
|
.It never
|
|
The user need never enter a password to use the
|
|
.Fl l
|
|
option.
|
|
.El
|
|
.Pp
|
|
If no value is specified, a value of
|
|
.Em any
|
|
is implied.
|
|
Negating the option results in a value of
|
|
.Em never
|
|
being used.
|
|
The default value is
|
|
.Em any .
|
|
.It logfile
|
|
Path to the
|
|
.Nm sudo
|
|
log file (not the syslog log file).
|
|
Setting a path turns on logging to a file;
|
|
negating this option turns it off.
|
|
By default,
|
|
.Nm sudo
|
|
logs via syslog.
|
|
.It mailerflags
|
|
Flags to use when invoking mailer.
|
|
Defaults to
|
|
.Fl t .
|
|
.It mailerpath
|
|
Path to mail program used to send warning mail.
|
|
Defaults to the path to sendmail found at configure time.
|
|
.It mailfrom
|
|
Address to use for the
|
|
.Dq from
|
|
address when sending warning and error mail.
|
|
The address should be enclosed in double quotes
|
|
.Pq \&""
|
|
to protect against
|
|
.Nm sudo
|
|
interpreting the
|
|
.Li @
|
|
sign.
|
|
Defaults to the name of the user running
|
|
.Nm sudo .
|
|
.It mailto
|
|
Address to send warning and error mail to.
|
|
The address should be enclosed in double quotes
|
|
.Pq \&""
|
|
to protect against
|
|
.Nm sudo
|
|
interpreting the
|
|
.Li @
|
|
sign.
|
|
Defaults to
|
|
.Li @mailto@ .
|
|
.It restricted_env_file
|
|
The
|
|
.Em restricted_env_file
|
|
option specifies the fully qualified path to a file containing variables
|
|
to be set in the environment of the program being run.
|
|
Entries in this file should either be of the form
|
|
.Dq Li VARIABLE=value
|
|
or
|
|
.Dq Li export VARIABLE=value .
|
|
The value may optionally be surrounded by single or double quotes.
|
|
Variables in this file are only added if the variable does not already
|
|
exist in the environment.
|
|
Unlike
|
|
.Em env_file ,
|
|
the file's contents are not trusted and are processed in a manner
|
|
similar to that of the invoking user's environment.
|
|
If
|
|
.Em env_reset
|
|
is enabled, variables in the file will only be added if they are
|
|
matched by either the
|
|
.Em env_check
|
|
or
|
|
.Em env_keep
|
|
list.
|
|
If
|
|
.Em env_reset
|
|
is disabled, variables in the file are added as long as they
|
|
are not matched by the
|
|
.Em env_delete
|
|
list.
|
|
In either case, the contents of
|
|
.Em restricted_env_file
|
|
are processed before the contents of
|
|
.Em env_file .
|
|
.It secure_path
|
|
Path used for every command run from
|
|
.Nm sudo .
|
|
If you don't trust the
|
|
people running
|
|
.Nm sudo
|
|
to have a sane
|
|
.Ev PATH
|
|
environment variable you may want to use this.
|
|
Another use is if you want to have the
|
|
.Dq root path
|
|
be separate from the
|
|
.Dq user path .
|
|
Users in the group specified by the
|
|
.Em exempt_group
|
|
option are not affected by
|
|
.Em secure_path .
|
|
This option is @secure_path@ by default.
|
|
.It syslog
|
|
Syslog facility if syslog is being used for logging (negate to
|
|
disable syslog logging).
|
|
Defaults to
|
|
.Li @logfac@ .
|
|
.Pp
|
|
The following syslog facilities are supported:
|
|
.Sy authpriv
|
|
(if your
|
|
OS supports it),
|
|
.Sy auth ,
|
|
.Sy daemon ,
|
|
.Sy user ,
|
|
.Sy local0 ,
|
|
.Sy local1 ,
|
|
.Sy local2 ,
|
|
.Sy local3 ,
|
|
.Sy local4 ,
|
|
.Sy local5 ,
|
|
.Sy local6 ,
|
|
and
|
|
.Sy local7 .
|
|
.It syslog_badpri
|
|
Syslog priority to use when the user is not allowed to run a command or
|
|
when authentication is unsuccessful.
|
|
Defaults to
|
|
.Li @badpri@ .
|
|
.Pp
|
|
The following syslog priorities are supported:
|
|
.Sy alert ,
|
|
.Sy crit ,
|
|
.Sy debug ,
|
|
.Sy emerg ,
|
|
.Sy err ,
|
|
.Sy info ,
|
|
.Sy notice ,
|
|
.Sy warning ,
|
|
and
|
|
.Sy none .
|
|
Negating the option or setting it to a value of
|
|
.Sy none
|
|
will disable logging of unsuccessful commands.
|
|
.It syslog_goodpri
|
|
Syslog priority to use when the user is allowed to run a command and
|
|
authentication is successful.
|
|
Defaults to
|
|
.Li @goodpri@ .
|
|
.Pp
|
|
See
|
|
.Em syslog_badpri
|
|
for the list of supported syslog priorities.
|
|
Negating the option or setting it to a value of
|
|
.Sy none
|
|
will disable logging of successful commands.
|
|
.It verifypw
|
|
This option controls when a password will be required when a user runs
|
|
.Nm sudo
|
|
with the
|
|
.Fl v
|
|
option.
|
|
It has the following possible values:
|
|
.Bl -tag -width 6n
|
|
.It all
|
|
All the user's
|
|
.Em sudoers
|
|
file entries for the current host must have the
|
|
.Li NOPASSWD
|
|
flag set to avoid entering a password.
|
|
.It always
|
|
The user must always enter a password to use the
|
|
.Fl v
|
|
option.
|
|
.It any
|
|
At least one of the user's
|
|
.Em sudoers
|
|
file entries for the current host must have the
|
|
.Li NOPASSWD
|
|
flag set to avoid entering a password.
|
|
.It never
|
|
The user need never enter a password to use the
|
|
.Fl v
|
|
option.
|
|
.El
|
|
.Pp
|
|
If no value is specified, a value of
|
|
.Em all
|
|
is implied.
|
|
Negating the option results in a value of
|
|
.Em never
|
|
being used.
|
|
The default value is
|
|
.Em all .
|
|
.El
|
|
.Pp
|
|
.Sy Lists that can be used in a boolean context :
|
|
.Bl -tag -width 16n
|
|
.It env_check
|
|
Environment variables to be removed from the user's environment
|
|
unless they are considered
|
|
.Dq safe .
|
|
For all variables except
|
|
.Li TZ ,
|
|
.Dq safe
|
|
means that the variable's value does not contain any
|
|
.Ql %
|
|
or
|
|
.Ql /
|
|
characters.
|
|
This can be used to guard against printf-style format vulnerabilities
|
|
in poorly-written programs.
|
|
The
|
|
.Li TZ
|
|
variable is considered unsafe if any of the following are true:
|
|
.Bl -bullet -width 1n
|
|
.It
|
|
It consists of a fully-qualified path name,
|
|
optionally prefixed with a colon
|
|
.Pq Ql :\& ,
|
|
that does not match the location of the
|
|
.Pa zoneinfo
|
|
directory.
|
|
.It
|
|
It contains a
|
|
.Pa ..
|
|
path element.
|
|
.It
|
|
It contains white space or non-printable characters.
|
|
.It
|
|
It is longer than the value of
|
|
.Li PATH_MAX .
|
|
.El
|
|
.Pp
|
|
The argument may be a double-quoted, space-separated list or a
|
|
single value without double-quotes.
|
|
The list can be replaced, added to, deleted from, or disabled by using
|
|
the
|
|
.Li = ,
|
|
.Li += ,
|
|
.Li -= ,
|
|
and
|
|
.Li \&!
|
|
operators respectively.
|
|
Regardless of whether the
|
|
.Li env_reset
|
|
option is enabled or disabled, variables specified by
|
|
.Li env_check
|
|
will be preserved in the environment if they pass the aforementioned check.
|
|
The global list of environment variables to check is displayed when
|
|
.Nm sudo
|
|
is run by root with
|
|
the
|
|
.Fl V
|
|
option.
|
|
.It env_delete
|
|
Environment variables to be removed from the user's environment when the
|
|
.Em env_reset
|
|
option is not in effect.
|
|
The argument may be a double-quoted, space-separated list or a
|
|
single value without double-quotes.
|
|
The list can be replaced, added to, deleted from, or disabled by using the
|
|
.Li = ,
|
|
.Li += ,
|
|
.Li -= ,
|
|
and
|
|
.Li \&!
|
|
operators respectively.
|
|
The global list of environment variables to remove is displayed when
|
|
.Nm sudo
|
|
is run by root with the
|
|
.Fl V
|
|
option.
|
|
Note that many operating systems will remove potentially dangerous
|
|
variables from the environment of any setuid process (such as
|
|
.Nm sudo ) .
|
|
.It env_keep
|
|
Environment variables to be preserved in the user's environment when the
|
|
.Em env_reset
|
|
option is in effect.
|
|
This allows fine-grained control over the environment
|
|
.Nm sudo Ns -spawned
|
|
processes will receive.
|
|
The argument may be a double-quoted, space-separated list or a
|
|
single value without double-quotes.
|
|
The list can be replaced, added to, deleted from, or disabled by using the
|
|
.Li = ,
|
|
.Li += ,
|
|
.Li -= ,
|
|
and
|
|
.Li \&!
|
|
operators respectively.
|
|
The global list of variables to keep
|
|
is displayed when
|
|
.Nm sudo
|
|
is run by root with the
|
|
.Fl V
|
|
option.
|
|
.El
|
|
.Sh GROUP PROVIDER PLUGINS
|
|
The
|
|
.Nm
|
|
plugin supports its own plugin interface to allow non-Unix
|
|
group lookups which can query a group source other
|
|
than the standard Unix group database.
|
|
This can be used to implement support for the
|
|
.Li nonunix_group
|
|
syntax described earlier.
|
|
.Pp
|
|
Group provider plugins are specified via the
|
|
.Em group_plugin
|
|
Defaults setting.
|
|
The argument to
|
|
.Em group_plugin
|
|
should consist of the plugin path, either fully-qualified or relative to the
|
|
.Pa @PLUGINDIR@
|
|
directory, followed by any configuration options the plugin requires.
|
|
These options (if specified) will be passed to the plugin's initialization
|
|
function.
|
|
If options are present, the string must be enclosed in double quotes
|
|
.Pq \&"" .
|
|
.Pp
|
|
The following group provider plugins are installed by default:
|
|
.Bl -tag -width 8n
|
|
.It group_file
|
|
The
|
|
.Em group_file
|
|
plugin supports an alternate group file that uses the same syntax as the
|
|
.Pa /etc/group
|
|
file.
|
|
The path to the group file should be specified as an option
|
|
to the plugin.
|
|
For example, if the group file to be used is
|
|
.Pa /etc/sudo-group :
|
|
.Bd -literal
|
|
Defaults group_plugin="group_file.so /etc/sudo-group"
|
|
.Ed
|
|
.It system_group
|
|
The
|
|
.Em system_group
|
|
plugin supports group lookups via the standard C library functions
|
|
.Fn getgrnam
|
|
and
|
|
.Fn getgrid .
|
|
This plugin can be used in instances where the user belongs to
|
|
groups not present in the user's supplemental group vector.
|
|
This plugin takes no options:
|
|
.Bd -literal
|
|
Defaults group_plugin=system_group.so
|
|
.Ed
|
|
.El
|
|
.Pp
|
|
The group provider plugin API is described in detail in
|
|
.Xr sudo_plugin @mansectform@ .
|
|
.Sh LOG FORMAT
|
|
.Nm
|
|
can log events using either
|
|
.Xr syslog 3
|
|
or a simple log file.
|
|
The log format is almost identical in both cases.
|
|
.Ss Accepted command log entries
|
|
Commands that sudo runs are logged using the following format (split
|
|
into multiple lines for readability):
|
|
.Bd -literal -offset 4n
|
|
date hostname progname: username : TTY=ttyname ; PWD=cwd ; \e
|
|
USER=runasuser ; GROUP=runasgroup ; TSID=logid ; \e
|
|
ENV=env_vars COMMAND=command
|
|
.Ed
|
|
.Pp
|
|
Where the fields are as follows:
|
|
.Bl -tag -width 12n
|
|
.It date
|
|
The date the command was run.
|
|
Typically, this is in the format
|
|
.Dq MMM, DD, HH:MM:SS .
|
|
If logging via
|
|
.Xr syslog 3 ,
|
|
the actual date format is controlled by the syslog daemon.
|
|
If logging to a file and the
|
|
.Em log_year
|
|
option is enabled,
|
|
the date will also include the year.
|
|
.It hostname
|
|
The name of the host
|
|
.Nm sudo
|
|
was run on.
|
|
This field is only present when logging via
|
|
.Xr syslog 3 .
|
|
.It progname
|
|
The name of the program, usually
|
|
.Em sudo
|
|
or
|
|
.Em sudoedit .
|
|
This field is only present when logging via
|
|
.Xr syslog 3 .
|
|
.It username
|
|
The login name of the user who ran
|
|
.Nm sudo .
|
|
.It ttyname
|
|
The short name of the terminal (e.g.\&
|
|
.Dq console ,
|
|
.Dq tty01 ,
|
|
or
|
|
.Dq pts/0 )
|
|
.Nm sudo
|
|
was run on, or
|
|
.Dq unknown
|
|
if there was no terminal present.
|
|
.It cwd
|
|
The current working directory that
|
|
.Nm sudo
|
|
was run in.
|
|
.It runasuser
|
|
The user the command was run as.
|
|
.It runasgroup
|
|
The group the command was run as if one was specified on the command line.
|
|
.It logid
|
|
An I/O log identifier that can be used to replay the command's output.
|
|
This is only present when the
|
|
.Em log_input
|
|
or
|
|
.Em log_output
|
|
option is enabled.
|
|
.It env_vars
|
|
A list of environment variables specified on the command line,
|
|
if specified.
|
|
.It command
|
|
The actual command that was executed.
|
|
.El
|
|
.Pp
|
|
Messages are logged using the locale specified by
|
|
.Em sudoers_locale ,
|
|
which defaults to the
|
|
.Dq Li C
|
|
locale.
|
|
.Ss Denied command log entries
|
|
If the user is not allowed to run the command, the reason for the denial
|
|
will follow the user name.
|
|
Possible reasons include:
|
|
.Bl -tag -width 4
|
|
.It user NOT in sudoers
|
|
The user is not listed in the
|
|
.Em sudoers
|
|
file.
|
|
.It user NOT authorized on host
|
|
The user is listed in the
|
|
.Em sudoers
|
|
file but is not allowed to run commands on the host.
|
|
.It command not allowed
|
|
The user is listed in the
|
|
.Em sudoers
|
|
file for the host but they are not allowed to run the specified command.
|
|
.It 3 incorrect password attempts
|
|
The user failed to enter their password after 3 tries.
|
|
The actual number of tries will vary based on the number of
|
|
failed attempts and the value of the
|
|
.Em passwd_tries
|
|
option.
|
|
.It a password is required
|
|
.Nm sudo Ns 's
|
|
.Fl n
|
|
option was specified but a password was required.
|
|
.It sorry, you are not allowed to set the following environment variables
|
|
The user specified environment variables on the command line that
|
|
were not allowed by
|
|
.Em sudoers .
|
|
.El
|
|
.Ss Error log entries
|
|
If an error occurs,
|
|
.Nm
|
|
will log a message and, in most cases, send a message to the
|
|
administrator via email.
|
|
Possible errors include:
|
|
.Bl -tag -width 4
|
|
.It parse error in @sysconfdir@/sudoers near line N
|
|
.Nm
|
|
encountered an error when parsing the specified file.
|
|
In some cases, the actual error may be one line above or below the
|
|
line number listed, depending on the type of error.
|
|
.It problem with defaults entries
|
|
The
|
|
.Em sudoers
|
|
file contains one or more unknown Defaults settings.
|
|
This does not prevent
|
|
.Nm sudo
|
|
from running, but the
|
|
.Em sudoers
|
|
file should be checked using
|
|
.Nm visudo .
|
|
.It timestamp owner (username): \&No such user
|
|
The time stamp directory owner, as specified by the
|
|
.Em timestampowner
|
|
setting, could not be found in the password database.
|
|
.It unable to open/read @sysconfdir@/sudoers
|
|
The
|
|
.Em sudoers
|
|
file could not be opened for reading.
|
|
This can happen when the
|
|
.Em sudoers
|
|
file is located on a remote file system that maps user ID 0 to
|
|
a different value.
|
|
Normally,
|
|
.Nm
|
|
tries to open the
|
|
.Em sudoers
|
|
file using group permissions to avoid this problem.
|
|
Consider either changing the ownership of
|
|
.Pa @sysconfdir@/sudoers
|
|
or adding an argument like
|
|
.Dq sudoers_uid=N
|
|
(where
|
|
.Sq N
|
|
is the user ID that owns the
|
|
.Em sudoers
|
|
file) to the end of the
|
|
.Nm
|
|
.Li Plugin
|
|
line in the
|
|
.Xr sudo.conf @mansectform@
|
|
file.
|
|
.It unable to stat @sysconfdir@/sudoers
|
|
The
|
|
.Pa @sysconfdir@/sudoers
|
|
file is missing.
|
|
.It @sysconfdir@/sudoers is not a regular file
|
|
The
|
|
.Pa @sysconfdir@/sudoers
|
|
file exists but is not a regular file or symbolic link.
|
|
.It @sysconfdir@/sudoers is owned by uid N, should be 0
|
|
The
|
|
.Em sudoers
|
|
file has the wrong owner.
|
|
If you wish to change the
|
|
.Em sudoers
|
|
file owner, please add
|
|
.Dq sudoers_uid=N
|
|
(where
|
|
.Sq N
|
|
is the user ID that owns the
|
|
.Em sudoers
|
|
file) to the
|
|
.Nm
|
|
.Li Plugin
|
|
line in the
|
|
.Xr sudo.conf @mansectform@
|
|
file.
|
|
.It @sysconfdir@/sudoers is world writable
|
|
The permissions on the
|
|
.Em sudoers
|
|
file allow all users to write to it.
|
|
The
|
|
.Em sudoers
|
|
file must not be world-writable, the default file mode
|
|
is 0440 (readable by owner and group, writable by none).
|
|
The default mode may be changed via the
|
|
.Dq sudoers_mode
|
|
option to the
|
|
.Nm
|
|
.Li Plugin
|
|
line in the
|
|
.Xr sudo.conf @mansectform@
|
|
file.
|
|
.It @sysconfdir@/sudoers is owned by gid N, should be 1
|
|
The
|
|
.Em sudoers
|
|
file has the wrong group ownership.
|
|
If you wish to change the
|
|
.Em sudoers
|
|
file group ownership, please add
|
|
.Dq sudoers_gid=N
|
|
(where
|
|
.Sq N
|
|
is the group ID that owns the
|
|
.Em sudoers
|
|
file) to the
|
|
.Nm
|
|
.Li Plugin
|
|
line in the
|
|
.Xr sudo.conf @mansectform@
|
|
file.
|
|
.It unable to open @rundir@/ts/username
|
|
.Nm sudoers
|
|
was unable to read or create the user's time stamp file.
|
|
This can happen when
|
|
.Em timestampowner
|
|
is set to a user other than root and the mode on
|
|
.Pa @rundir@
|
|
is not searchable by group or other.
|
|
The default mode for
|
|
.Pa @rundir@
|
|
is 0711.
|
|
.It unable to write to @rundir@/ts/username
|
|
.Nm sudoers
|
|
was unable to write to the user's time stamp file.
|
|
.It @rundir@/ts is owned by uid X, should be Y
|
|
The time stamp directory is owned by a user other than
|
|
.Em timestampowner .
|
|
This can occur when the value of
|
|
.Em timestampowner
|
|
has been changed.
|
|
.Nm sudoers
|
|
will ignore the time stamp directory until the owner is corrected.
|
|
.It @rundir@/ts is group writable
|
|
The time stamp directory is group-writable; it should be writable only by
|
|
.Em timestampowner .
|
|
The default mode for the time stamp directory is 0700.
|
|
.Nm sudoers
|
|
will ignore the time stamp directory until the mode is corrected.
|
|
.El
|
|
.Ss Notes on logging via syslog
|
|
By default,
|
|
.Nm sudoers
|
|
logs messages via
|
|
.Xr syslog 3 .
|
|
The
|
|
.Em date ,
|
|
.Em hostname ,
|
|
and
|
|
.Em progname
|
|
fields are added by the system's
|
|
.Fn syslog
|
|
function, not
|
|
.Nm
|
|
itself.
|
|
As such, they may vary in format on different systems.
|
|
.Pp
|
|
The maximum size of syslog messages varies from system to system.
|
|
The
|
|
.Em syslog_maxlen
|
|
setting can be used to change the maximum syslog message size
|
|
from the default value of 980 bytes.
|
|
For more information, see the description of
|
|
.Em syslog_maxlen .
|
|
.Ss Notes on logging to a file
|
|
If the
|
|
.Em logfile
|
|
option is set,
|
|
.Nm sudoers
|
|
will log to a local file, such as
|
|
.Pa /var/log/sudo .
|
|
When logging to a file,
|
|
.Nm sudoers
|
|
uses a format similar to
|
|
.Xr syslog 3 ,
|
|
with a few important differences:
|
|
.Bl -enum
|
|
.It
|
|
The
|
|
.Em progname
|
|
and
|
|
.Em hostname
|
|
fields are not present.
|
|
.It
|
|
If the
|
|
.Em log_year
|
|
option is enabled,
|
|
the date will also include the year.
|
|
.It
|
|
Lines that are longer than
|
|
.Em loglinelen
|
|
characters (80 by default) are word-wrapped and continued on the
|
|
next line with a four character indent.
|
|
This makes entries easier to read for a human being, but makes it
|
|
more difficult to use
|
|
.Xr grep 1
|
|
on the log files.
|
|
If the
|
|
.Em loglinelen
|
|
option is set to 0 (or negated with a
|
|
.Ql \&! ) ,
|
|
word wrap will be disabled.
|
|
.El
|
|
.Sh I/O LOG FILES
|
|
When I/O logging is enabled,
|
|
.Nm sudo
|
|
will run the command in a pseudo-tty and log all user input and/or output,
|
|
depending on which options are enabled.
|
|
I/O is logged to the directory specified by the
|
|
.Em iolog_dir
|
|
option
|
|
.Po
|
|
.Pa @iolog_dir@
|
|
by default
|
|
.Pc
|
|
using a unique session ID that is included in the
|
|
.Nm sudo
|
|
log line, prefixed with
|
|
.Dq Li TSID= .
|
|
The
|
|
.Em iolog_file
|
|
option may be used to control the format of the session ID.
|
|
.Pp
|
|
Each I/O log is stored in a separate directory that contains the
|
|
following files:
|
|
.Bl -tag -width 8n
|
|
.It Pa log
|
|
a text file containing the time the command was run, the name of the user
|
|
who ran
|
|
.Nm sudo ,
|
|
the name of the target user, the name of the target group (optional),
|
|
the terminal that
|
|
.Nm sudo
|
|
was run from, the number of rows and columns of the terminal,
|
|
the working directory the command was run from and the path name of
|
|
the command itself (with arguments if present)
|
|
.It Pa timing
|
|
a log of the amount of time between, and the number of bytes in, each
|
|
I/O log entry (used for session playback)
|
|
.It Pa ttyin
|
|
input from the user's tty (what the user types)
|
|
.It Pa stdin
|
|
input from a pipe or file
|
|
.It Pa ttyout
|
|
output from the pseudo-tty (what the command writes to the screen)
|
|
.It Pa stdout
|
|
standard output to a pipe or redirected to a file
|
|
.It Pa stderr
|
|
standard error to a pipe or redirected to a file
|
|
.El
|
|
.Pp
|
|
All files other than
|
|
.Pa log
|
|
are compressed in gzip format unless the
|
|
.Em compress_io
|
|
flag has been disabled.
|
|
Due to buffering, it is not normally possible to display the I/O logs in
|
|
real-time as the program is executing
|
|
The I/O log data will not be complete until the program run by
|
|
.Nm sudo
|
|
has exited or has been terminated by a signal.
|
|
The
|
|
.Em iolog_flush
|
|
flag can be used to disable buffering, in which case I/O log data
|
|
is written to disk as soon as it is available.
|
|
The output portion of an I/O log file can be viewed with the
|
|
.Xr sudoreplay @mansectsu@
|
|
utility, which can also be used to list or search the available logs.
|
|
.Pp
|
|
Note that user input may contain sensitive information such as
|
|
passwords (even if they are not echoed to the screen), which will
|
|
be stored in the log file unencrypted.
|
|
In most cases, logging the command output via
|
|
.Em log_output
|
|
or
|
|
.Li LOG_OUTPUT
|
|
is all that is required.
|
|
.Pp
|
|
Since each session's I/O logs are stored in a separate directory,
|
|
traditional log rotation utilities cannot be used to limit the
|
|
number of I/O logs.
|
|
The simplest way to limit the number of I/O is by setting the
|
|
.Em maxseq
|
|
option to the maximum number of logs you wish to store.
|
|
Once the I/O log sequence number reaches
|
|
.Em maxseq ,
|
|
it will be reset to zero and
|
|
.Nm
|
|
will truncate and re-use any existing I/O logs.
|
|
.Sh FILES
|
|
.Bl -tag -width 24n
|
|
.It Pa @sysconfdir@/sudo.conf
|
|
Sudo front end configuration
|
|
.It Pa @sysconfdir@/sudoers
|
|
List of who can run what
|
|
.It Pa /etc/group
|
|
Local groups file
|
|
.It Pa /etc/netgroup
|
|
List of network groups
|
|
.It Pa @iolog_dir@
|
|
I/O log files
|
|
.It Pa @rundir@/ts
|
|
Directory containing time stamps for the
|
|
.Nm sudoers
|
|
security policy
|
|
.It Pa @vardir@/lectured
|
|
Directory containing lecture status files for the
|
|
.Nm sudoers
|
|
security policy
|
|
.It Pa /etc/environment
|
|
Initial environment for
|
|
.Fl i
|
|
mode on AIX and Linux systems
|
|
.El
|
|
.Sh EXAMPLES
|
|
Below are example
|
|
.Em sudoers
|
|
file entries.
|
|
Admittedly, some of these are a bit contrived.
|
|
First, we allow a few environment variables to pass and then define our
|
|
.Em aliases :
|
|
.Bd -literal
|
|
# Run X applications through sudo; HOME is used to find the
|
|
# .Xauthority file. Note that other programs use HOME to find
|
|
# configuration files and this may lead to privilege escalation!
|
|
Defaults env_keep += "DISPLAY HOME"
|
|
|
|
# User alias specification
|
|
User_Alias FULLTIMERS = millert, mikef, dowdy
|
|
User_Alias PARTTIMERS = bostley, jwfox, crawl
|
|
User_Alias WEBMASTERS = will, wendy, wim
|
|
|
|
# Runas alias specification
|
|
Runas_Alias OP = root, operator
|
|
Runas_Alias DB = oracle, sybase
|
|
Runas_Alias ADMINGRP = adm, oper
|
|
|
|
# Host alias specification
|
|
Host_Alias SPARC = bigtime, eclipse, moet, anchor :\e
|
|
SGI = grolsch, dandelion, black :\e
|
|
ALPHA = widget, thalamus, foobar :\e
|
|
HPPA = boa, nag, python
|
|
Host_Alias CUNETS = 128.138.0.0/255.255.0.0
|
|
Host_Alias CSNETS = 128.138.243.0, 128.138.204.0/24, 128.138.242.0
|
|
Host_Alias SERVERS = master, mail, www, ns
|
|
Host_Alias CDROM = orion, perseus, hercules
|
|
|
|
# Cmnd alias specification
|
|
Cmnd_Alias DUMPS = /usr/bin/mt, /usr/sbin/dump, /usr/sbin/rdump,\e
|
|
/usr/sbin/restore, /usr/sbin/rrestore,\e
|
|
sha224:0GomF8mNN3wlDt1HD9XldjJ3SNgpFdbjO1+NsQ== \e
|
|
/home/operator/bin/start_backups
|
|
Cmnd_Alias KILL = /usr/bin/kill
|
|
Cmnd_Alias PRINTING = /usr/sbin/lpc, /usr/bin/lprm
|
|
Cmnd_Alias SHUTDOWN = /usr/sbin/shutdown
|
|
Cmnd_Alias HALT = /usr/sbin/halt
|
|
Cmnd_Alias REBOOT = /usr/sbin/reboot
|
|
Cmnd_Alias SHELLS = /usr/bin/sh, /usr/bin/csh, /usr/bin/ksh,\e
|
|
/usr/local/bin/tcsh, /usr/bin/rsh,\e
|
|
/usr/local/bin/zsh
|
|
Cmnd_Alias SU = /usr/bin/su
|
|
Cmnd_Alias PAGERS = /usr/bin/more, /usr/bin/pg, /usr/bin/less
|
|
.Ed
|
|
.Pp
|
|
Here we override some of the compiled in default values.
|
|
We want
|
|
.Nm sudo
|
|
to log via
|
|
.Xr syslog 3
|
|
using the
|
|
.Em auth
|
|
facility in all cases.
|
|
We don't want to subject the full time staff to the
|
|
.Nm sudo
|
|
lecture, user
|
|
.Sy millert
|
|
need not give a password, and we don't want to reset the
|
|
.Ev LOGNAME ,
|
|
.Ev USER
|
|
or
|
|
.Ev USERNAME
|
|
environment variables when running commands as root.
|
|
Additionally, on the machines in the
|
|
.Em SERVERS
|
|
.Li Host_Alias ,
|
|
we keep an additional local log file and make sure we log the year
|
|
in each log line since the log entries will be kept around for several years.
|
|
Lastly, we disable shell escapes for the commands in the PAGERS
|
|
.Li Cmnd_Alias
|
|
.Po
|
|
.Pa /usr/bin/more ,
|
|
.Pa /usr/bin/pg
|
|
and
|
|
.Pa /usr/bin/less
|
|
.Pc .
|
|
Note that this will not effectively constrain users with
|
|
.Nm sudo
|
|
.Sy ALL
|
|
privileges.
|
|
.Bd -literal
|
|
# Override built-in defaults
|
|
Defaults syslog=auth
|
|
Defaults>root !set_logname
|
|
Defaults:FULLTIMERS !lecture
|
|
Defaults:millert !authenticate
|
|
Defaults@SERVERS log_year, logfile=/var/log/sudo.log
|
|
Defaults!PAGERS noexec
|
|
.Ed
|
|
.Pp
|
|
The
|
|
.Em User specification
|
|
is the part that actually determines who may run what.
|
|
.Bd -literal
|
|
root ALL = (ALL) ALL
|
|
%wheel ALL = (ALL) ALL
|
|
.Ed
|
|
.Pp
|
|
We let
|
|
.Sy root
|
|
and any user in group
|
|
.Sy wheel
|
|
run any command on any host as any user.
|
|
.Bd -literal
|
|
FULLTIMERS ALL = NOPASSWD: ALL
|
|
.Ed
|
|
.Pp
|
|
Full time sysadmins
|
|
.Po
|
|
.Sy millert ,
|
|
.Sy mikef ,
|
|
and
|
|
.Sy dowdy
|
|
.Pc
|
|
may run any command on any host without authenticating themselves.
|
|
.Bd -literal
|
|
PARTTIMERS ALL = ALL
|
|
.Ed
|
|
.Pp
|
|
Part time sysadmins
|
|
.Sy bostley ,
|
|
.Sy jwfox ,
|
|
and
|
|
.Sy crawl )
|
|
may run any command on any host but they must authenticate themselves
|
|
first (since the entry lacks the
|
|
.Li NOPASSWD
|
|
tag).
|
|
.Bd -literal
|
|
jack CSNETS = ALL
|
|
.Ed
|
|
.Pp
|
|
The user
|
|
.Sy jack
|
|
may run any command on the machines in the
|
|
.Em CSNETS
|
|
alias (the networks
|
|
.Li 128.138.243.0 ,
|
|
.Li 128.138.204.0 ,
|
|
and
|
|
.Li 128.138.242.0 ) .
|
|
Of those networks, only
|
|
.Li 128.138.204.0
|
|
has an explicit netmask (in CIDR notation) indicating it is a class C network.
|
|
For the other networks in
|
|
.Em CSNETS ,
|
|
the local machine's netmask will be used during matching.
|
|
.Bd -literal
|
|
lisa CUNETS = ALL
|
|
.Ed
|
|
.Pp
|
|
The user
|
|
.Sy lisa
|
|
may run any command on any host in the
|
|
.Em CUNETS
|
|
alias (the class B network
|
|
.Li 128.138.0.0 ) .
|
|
.Bd -literal
|
|
operator ALL = DUMPS, KILL, SHUTDOWN, HALT, REBOOT, PRINTING,\e
|
|
sudoedit /etc/printcap, /usr/oper/bin/
|
|
.Ed
|
|
.Pp
|
|
The
|
|
.Sy operator
|
|
user may run commands limited to simple maintenance.
|
|
Here, those are commands related to backups, killing processes, the
|
|
printing system, shutting down the system, and any commands in the
|
|
directory
|
|
.Pa /usr/oper/bin/ .
|
|
Note that one command in the
|
|
.Li DUMPS
|
|
Cmnd_Alias includes a sha224 digest,
|
|
.Pa /home/operator/bin/start_backups .
|
|
This is because the directory containing the script is writable by the
|
|
operator user.
|
|
If the script is modified (resulting in a digest mismatch) it will no longer
|
|
be possible to run it via
|
|
.Nm sudo .
|
|
.Bd -literal
|
|
joe ALL = /usr/bin/su operator
|
|
.Ed
|
|
.Pp
|
|
The user
|
|
.Sy joe
|
|
may only
|
|
.Xr su 1
|
|
to operator.
|
|
.Bd -literal
|
|
pete HPPA = /usr/bin/passwd [A-Za-z]*, !/usr/bin/passwd *root*
|
|
|
|
%opers ALL = (: ADMINGRP) /usr/sbin/
|
|
.Ed
|
|
.Pp
|
|
Users in the
|
|
.Sy opers
|
|
group may run commands in
|
|
.Pa /usr/sbin/
|
|
as themselves
|
|
with any group in the
|
|
.Em ADMINGRP
|
|
.Li Runas_Alias
|
|
(the
|
|
.Sy adm
|
|
and
|
|
.Sy oper
|
|
groups).
|
|
.Pp
|
|
The user
|
|
.Sy pete
|
|
is allowed to change anyone's password except for
|
|
root on the
|
|
.Em HPPA
|
|
machines.
|
|
Because command line arguments are matched as a single,
|
|
concatenated string, the
|
|
.Ql *
|
|
wildcard will match
|
|
.Em multiple
|
|
words.
|
|
This example assumes that
|
|
.Xr passwd 1
|
|
does not take multiple user names on the command line.
|
|
Note that on GNU systems, options to
|
|
.Xr passwd 1
|
|
may be specified after the user argument.
|
|
As a result, this rule will also allow:
|
|
.Bd -literal -offset 4n
|
|
passwd username --expire
|
|
.Ed
|
|
.Pp
|
|
which may not be desirable.
|
|
.Bd -literal
|
|
bob SPARC = (OP) ALL : SGI = (OP) ALL
|
|
.Ed
|
|
.Pp
|
|
The user
|
|
.Sy bob
|
|
may run anything on the
|
|
.Em SPARC
|
|
and
|
|
.Em SGI
|
|
machines as any user listed in the
|
|
.Em OP
|
|
.Li Runas_Alias
|
|
.Po
|
|
.Sy root
|
|
and
|
|
.Sy operator .
|
|
.Pc
|
|
.Bd -literal
|
|
jim +biglab = ALL
|
|
.Ed
|
|
.Pp
|
|
The user
|
|
.Sy jim
|
|
may run any command on machines in the
|
|
.Em biglab
|
|
netgroup.
|
|
.Nm sudo
|
|
knows that
|
|
.Dq biglab
|
|
is a netgroup due to the
|
|
.Ql +
|
|
prefix.
|
|
.Bd -literal
|
|
+secretaries ALL = PRINTING, /usr/bin/adduser, /usr/bin/rmuser
|
|
.Ed
|
|
.Pp
|
|
Users in the
|
|
.Sy secretaries
|
|
netgroup need to help manage the printers as well as add and remove users,
|
|
so they are allowed to run those commands on all machines.
|
|
.Bd -literal
|
|
fred ALL = (DB) NOPASSWD: ALL
|
|
.Ed
|
|
.Pp
|
|
The user
|
|
.Sy fred
|
|
can run commands as any user in the
|
|
.Em DB
|
|
.Li Runas_Alias
|
|
.Po
|
|
.Sy oracle
|
|
or
|
|
.Sy sybase
|
|
.Pc
|
|
without giving a password.
|
|
.Bd -literal
|
|
john ALPHA = /usr/bin/su [!-]*, !/usr/bin/su *root*
|
|
.Ed
|
|
.Pp
|
|
On the
|
|
.Em ALPHA
|
|
machines, user
|
|
.Sy john
|
|
may su to anyone except root but he is not allowed to specify any options
|
|
to the
|
|
.Xr su 1
|
|
command.
|
|
.Bd -literal
|
|
jen ALL, !SERVERS = ALL
|
|
.Ed
|
|
.Pp
|
|
The user
|
|
.Sy jen
|
|
may run any command on any machine except for those in the
|
|
.Em SERVERS
|
|
.Li Host_Alias
|
|
(master, mail, www and ns).
|
|
.Bd -literal
|
|
jill SERVERS = /usr/bin/, !SU, !SHELLS
|
|
.Ed
|
|
.Pp
|
|
For any machine in the
|
|
.Em SERVERS
|
|
.Li Host_Alias ,
|
|
.Sy jill
|
|
may run
|
|
any commands in the directory
|
|
.Pa /usr/bin/
|
|
except for those commands
|
|
belonging to the
|
|
.Em SU
|
|
and
|
|
.Em SHELLS
|
|
.Li Cmnd_Aliases .
|
|
While not specifically mentioned in the rule, the commands in the
|
|
.Em PAGERS
|
|
.Li Cmnd_Alias
|
|
all reside in
|
|
.Pa /usr/bin
|
|
and have the
|
|
.Em noexec
|
|
option set.
|
|
.Bd -literal
|
|
steve CSNETS = (operator) /usr/local/op_commands/
|
|
.Ed
|
|
.Pp
|
|
The user
|
|
.Sy steve
|
|
may run any command in the directory /usr/local/op_commands/
|
|
but only as user operator.
|
|
.Bd -literal
|
|
matt valkyrie = KILL
|
|
.Ed
|
|
.Pp
|
|
On his personal workstation, valkyrie,
|
|
.Sy matt
|
|
needs to be able to kill hung processes.
|
|
.Bd -literal
|
|
WEBMASTERS www = (www) ALL, (root) /usr/bin/su www
|
|
.Ed
|
|
.Pp
|
|
On the host www, any user in the
|
|
.Em WEBMASTERS
|
|
.Li User_Alias
|
|
(will, wendy, and wim), may run any command as user www (which owns the
|
|
web pages) or simply
|
|
.Xr su 1
|
|
to www.
|
|
.Bd -literal
|
|
ALL CDROM = NOPASSWD: /sbin/umount /CDROM,\e
|
|
/sbin/mount -o nosuid\e,nodev /dev/cd0a /CDROM
|
|
.Ed
|
|
.Pp
|
|
Any user may mount or unmount a CD-ROM on the machines in the CDROM
|
|
.Li Host_Alias
|
|
(orion, perseus, hercules) without entering a password.
|
|
This is a bit tedious for users to type, so it is a prime candidate
|
|
for encapsulating in a shell script.
|
|
.Sh SECURITY NOTES
|
|
.Ss Limitations of the So !\& Sc operator
|
|
It is generally not effective to
|
|
.Dq subtract
|
|
commands from
|
|
.Sy ALL
|
|
using the
|
|
.Ql !\&
|
|
operator.
|
|
A user can trivially circumvent this by copying the desired command
|
|
to a different name and then executing that.
|
|
For example:
|
|
.Bd -literal
|
|
bill ALL = ALL, !SU, !SHELLS
|
|
.Ed
|
|
.Pp
|
|
Doesn't really prevent
|
|
.Sy bill
|
|
from running the commands listed in
|
|
.Em SU
|
|
or
|
|
.Em SHELLS
|
|
since he can simply copy those commands to a different name, or use
|
|
a shell escape from an editor or other program.
|
|
Therefore, these kind of restrictions should be considered
|
|
advisory at best (and reinforced by policy).
|
|
.Pp
|
|
In general, if a user has sudo
|
|
.Sy ALL
|
|
there is nothing to prevent them from creating their own program that gives
|
|
them a root shell (or making their own copy of a shell) regardless of any
|
|
.Ql !\&
|
|
elements in the user specification.
|
|
.Ss Security implications of Em fast_glob
|
|
If the
|
|
.Em fast_glob
|
|
option is in use, it is not possible to reliably negate commands where the
|
|
path name includes globbing (aka wildcard) characters.
|
|
This is because the C library's
|
|
.Xr fnmatch 3
|
|
function cannot resolve relative paths.
|
|
While this is typically only an inconvenience for rules that grant privileges,
|
|
it can result in a security issue for rules that subtract or revoke privileges.
|
|
.Pp
|
|
For example, given the following
|
|
.Em sudoers
|
|
file entry:
|
|
.Bd -literal
|
|
john ALL = /usr/bin/passwd [a-zA-Z0-9]*, /usr/bin/chsh [a-zA-Z0-9]*,\e
|
|
/usr/bin/chfn [a-zA-Z0-9]*, !/usr/bin/* root
|
|
.Ed
|
|
.Pp
|
|
User
|
|
.Sy john
|
|
can still run
|
|
.Li /usr/bin/passwd root
|
|
if
|
|
.Em fast_glob
|
|
is enabled by changing to
|
|
.Pa /usr/bin
|
|
and running
|
|
.Li ./passwd root
|
|
instead.
|
|
.Ss Preventing shell escapes
|
|
Once
|
|
.Nm sudo
|
|
executes a program, that program is free to do whatever
|
|
it pleases, including run other programs.
|
|
This can be a security issue since it is not uncommon for a program to
|
|
allow shell escapes, which lets a user bypass
|
|
.Nm sudo Ns 's
|
|
access control and logging.
|
|
Common programs that permit shell escapes include shells (obviously),
|
|
editors, paginators, mail and terminal programs.
|
|
.Pp
|
|
There are two basic approaches to this problem:
|
|
.Bl -tag -width 8n
|
|
.It restrict
|
|
Avoid giving users access to commands that allow the user to run
|
|
arbitrary commands.
|
|
Many editors have a restricted mode where shell
|
|
escapes are disabled, though
|
|
.Nm sudoedit
|
|
is a better solution to
|
|
running editors via
|
|
.Nm sudo .
|
|
Due to the large number of programs that
|
|
offer shell escapes, restricting users to the set of programs that
|
|
do not is often unworkable.
|
|
.It noexec
|
|
Many systems that support shared libraries have the ability to
|
|
override default library functions by pointing an environment
|
|
variable (usually
|
|
.Ev LD_PRELOAD )
|
|
to an alternate shared library.
|
|
On such systems,
|
|
.Nm sudo Ns 's
|
|
.Em noexec
|
|
functionality can be used to prevent a program run by
|
|
.Nm sudo
|
|
from executing any other programs.
|
|
Note, however, that this applies only to native dynamically-linked
|
|
executables.
|
|
Statically-linked executables and foreign executables
|
|
running under binary emulation are not affected.
|
|
.Pp
|
|
The
|
|
.Em noexec
|
|
feature is known to work on SunOS, Solaris, *BSD,
|
|
Linux, IRIX, Tru64 UNIX, macOS, HP-UX 11.x and AIX 5.3 and above.
|
|
It should be supported on most operating systems that support the
|
|
.Ev LD_PRELOAD
|
|
environment variable.
|
|
Check your operating system's manual pages for the dynamic linker
|
|
(usually ld.so, ld.so.1, dyld, dld.sl, rld, or loader) to see if
|
|
.Ev LD_PRELOAD
|
|
is supported.
|
|
.Pp
|
|
On Solaris 10 and higher,
|
|
.Em noexec
|
|
uses Solaris privileges instead of the
|
|
.Ev LD_PRELOAD
|
|
environment variable.
|
|
.Pp
|
|
To enable
|
|
.Em noexec
|
|
for a command, use the
|
|
.Li NOEXEC
|
|
tag as documented
|
|
in the User Specification section above.
|
|
Here is that example again:
|
|
.Bd -literal
|
|
aaron shanty = NOEXEC: /usr/bin/more, /usr/bin/vi
|
|
.Ed
|
|
.Pp
|
|
This allows user
|
|
.Sy aaron
|
|
to run
|
|
.Pa /usr/bin/more
|
|
and
|
|
.Pa /usr/bin/vi
|
|
with
|
|
.Em noexec
|
|
enabled.
|
|
This will prevent those two commands from
|
|
executing other commands (such as a shell).
|
|
If you are unsure whether or not your system is capable of supporting
|
|
.Em noexec
|
|
you can always just try it out and check whether shell escapes work when
|
|
.Em noexec
|
|
is enabled.
|
|
.El
|
|
.Pp
|
|
Note that restricting shell escapes is not a panacea.
|
|
Programs running as root are still capable of many potentially hazardous
|
|
operations (such as changing or overwriting files) that could lead
|
|
to unintended privilege escalation.
|
|
In the specific case of an editor, a safer approach is to give the
|
|
user permission to run
|
|
.Nm sudoedit
|
|
(see below).
|
|
.Ss Secure editing
|
|
The
|
|
.Nm sudoers
|
|
plugin includes
|
|
.Nm sudoedit
|
|
support which allows users to securely edit files with the editor
|
|
of their choice.
|
|
As
|
|
.Nm sudoedit
|
|
is a built-in command, it must be specified in the
|
|
.Em sudoers
|
|
file without a leading path.
|
|
However, it may take command line arguments just as a normal command does.
|
|
Wildcards used in
|
|
.Em sudoedit
|
|
command line arguments are expected to be path names, so a forward slash
|
|
.Pq Ql /
|
|
will not be matched by a wildcard.
|
|
.Pp
|
|
Unlike other
|
|
.Nm sudo
|
|
commands, the editor is run with the permissions of the invoking
|
|
user and with the environment unmodified.
|
|
More information may be found in the description of the
|
|
.Fl e
|
|
option in
|
|
.Xr sudo @mansectsu@ .
|
|
.Pp
|
|
For example, to allow user operator to edit the
|
|
.Dq message of the day
|
|
file:
|
|
.Bd -literal -offset indent
|
|
operator sudoedit /etc/motd
|
|
.Ed
|
|
.Pp
|
|
The operator user then runs
|
|
.Nm sudoedit
|
|
as follows:
|
|
.Bd -literal -offset indent
|
|
$ sudoedit /etc/motd
|
|
.Ed
|
|
.Pp
|
|
The editor will run as the operator user, not root, on a temporary copy of
|
|
.Pa /etc/motd .
|
|
After the file has been edited,
|
|
.Pa /etc/motd
|
|
will be updated with the contents of the temporary copy.
|
|
.Pp
|
|
Users should
|
|
.Em never
|
|
be granted
|
|
.Nm sudoedit
|
|
permission to edit a file that resides in a directory the user
|
|
has write access to, either directly or via a wildcard.
|
|
If the user has write access to the directory it is possible to
|
|
replace the legitimate file with a link to another file,
|
|
allowing the editing of arbitrary files.
|
|
To prevent this, starting with version 1.8.16, symbolic links will
|
|
not be followed in writable directories and
|
|
.Nm sudoedit
|
|
will refuse to edit a file located in a writable directory
|
|
unless the
|
|
.Em sudoedit_checkdir
|
|
option has been disabled or the invoking user is root.
|
|
Additionally, in version 1.8.15 and higher,
|
|
.Nm sudoedit
|
|
will refuse to open a symbolic link unless either the
|
|
.Em sudoedit_follow
|
|
option is enabled or the
|
|
.Em sudoedit
|
|
command is prefixed with the
|
|
.Li FOLLOW
|
|
tag in the
|
|
.Em sudoers
|
|
file.
|
|
.Ss Time stamp file checks
|
|
.Nm sudoers
|
|
will check the ownership of its time stamp directory
|
|
.Po
|
|
.Pa @rundir@/ts
|
|
by default
|
|
.Pc
|
|
and ignore the directory's contents if it is not owned by root or
|
|
if it is writable by a user other than root.
|
|
Older versions of
|
|
.Nm sudo
|
|
stored time stamp files in
|
|
.Pa /tmp ;
|
|
this is no longer recommended as it may be possible for a user
|
|
to create the time stamp themselves on systems that allow
|
|
unprivileged users to change the ownership of files they create.
|
|
.Pp
|
|
While the time stamp directory
|
|
.Em should
|
|
be cleared at reboot time, not all systems contain a
|
|
.Pa /run
|
|
or
|
|
.Pa /var/run
|
|
directory.
|
|
To avoid potential problems,
|
|
.Nm sudoers
|
|
will ignore time stamp files that date from before the machine booted
|
|
on systems where the boot time is available.
|
|
.Pp
|
|
Some systems with graphical desktop environments allow unprivileged
|
|
users to change the system clock.
|
|
Since
|
|
.Nm sudoers
|
|
relies on the system clock for time stamp validation, it may be
|
|
possible on such systems for a user to run
|
|
.Nm sudo
|
|
for longer than
|
|
.Em timestamp_timeout
|
|
by setting the clock back.
|
|
To combat this,
|
|
.Nm sudoers
|
|
uses a monotonic clock (which never moves backwards) for its time stamps
|
|
if the system supports it.
|
|
.Pp
|
|
.Nm sudoers
|
|
will not honor time stamps set far in the future.
|
|
Time stamps with a date greater than current_time + 2 *
|
|
.Li TIMEOUT
|
|
will be ignored and
|
|
.Nm sudoers
|
|
will log and complain.
|
|
.Pp
|
|
If the
|
|
.Em timestamp_type
|
|
option is set to
|
|
.Dq tty ,
|
|
the time stamp record includes the device number of the terminal
|
|
the user authenticated with.
|
|
This provides per-terminal granularity but time stamp records may still
|
|
outlive the user's session.
|
|
.Pp
|
|
Unless the
|
|
.Em timestamp_type
|
|
option is set to
|
|
.Dq global ,
|
|
the time stamp record also includes the session ID of the process
|
|
that last authenticated.
|
|
This prevents processes in different terminal sessions from using
|
|
the same time stamp record.
|
|
On systems where a process's start time can be queried,
|
|
the start time of the session leader
|
|
is recorded in the time stamp record.
|
|
If no terminal is present or the
|
|
.Em timestamp_type
|
|
option is set to
|
|
.Dq ppid ,
|
|
the start time of the parent process is used instead.
|
|
In most cases this will prevent a time stamp record from being re-used
|
|
without the user entering a password when logging out and back in again.
|
|
.Sh DEBUGGING
|
|
Versions 1.8.4 and higher of the
|
|
.Nm
|
|
plugin support a flexible debugging framework that can help track
|
|
down what the plugin is doing internally if there is a problem.
|
|
This can be configured in the
|
|
.Xr sudo.conf @mansectform@
|
|
file.
|
|
.Pp
|
|
The
|
|
.Nm
|
|
plugin uses the same debug flag format as the
|
|
.Nm sudo
|
|
front-end:
|
|
.Em subsystem Ns @ Ns Em priority .
|
|
.Pp
|
|
The priorities used by
|
|
.Nm ,
|
|
in order of decreasing severity,
|
|
are:
|
|
.Em crit , err , warn , notice , diag , info , trace
|
|
and
|
|
.Em debug .
|
|
Each priority, when specified, also includes all priorities higher
|
|
than it.
|
|
For example, a priority of
|
|
.Em notice
|
|
would include debug messages logged at
|
|
.Em notice
|
|
and higher.
|
|
.Pp
|
|
The following subsystems are used by the
|
|
.Nm
|
|
plugin:
|
|
.Bl -tag -width 8n
|
|
.It Em alias
|
|
.Li User_Alias ,
|
|
.Li Runas_Alias ,
|
|
.Li Host_Alias
|
|
and
|
|
.Li Cmnd_Alias
|
|
processing
|
|
.It Em all
|
|
matches every subsystem
|
|
.It Em audit
|
|
BSM and Linux audit code
|
|
.It Em auth
|
|
user authentication
|
|
.It Em defaults
|
|
.Em sudoers
|
|
file
|
|
.Em Defaults
|
|
settings
|
|
.It Em env
|
|
environment handling
|
|
.It Em ldap
|
|
LDAP-based sudoers
|
|
.It Em logging
|
|
logging support
|
|
.It Em match
|
|
matching of users, groups, hosts and netgroups in the
|
|
.Em sudoers
|
|
file
|
|
.It Em netif
|
|
network interface handling
|
|
.It Em nss
|
|
network service switch handling in
|
|
.Nm sudoers
|
|
.It Em parser
|
|
.Em sudoers
|
|
file parsing
|
|
.It Em perms
|
|
permission setting
|
|
.It Em plugin
|
|
The equivalent of
|
|
.Em main
|
|
for the plugin.
|
|
.It Em pty
|
|
pseudo-tty related code
|
|
.It Em rbtree
|
|
redblack tree internals
|
|
.It Em sssd
|
|
SSSD-based sudoers
|
|
.It Em util
|
|
utility functions
|
|
.El
|
|
For example:
|
|
.Bd -literal
|
|
Debug sudo /var/log/sudo_debug match@info,nss@info
|
|
.Ed
|
|
.Pp
|
|
For more information, see the
|
|
.Xr sudo.conf @mansectform@
|
|
manual.
|
|
.Sh SEE ALSO
|
|
.Xr ssh 1 ,
|
|
.Xr su 1 ,
|
|
.Xr fnmatch 3 ,
|
|
.Xr glob 3 ,
|
|
.Xr mktemp 3 ,
|
|
.Xr strftime 3 ,
|
|
.Xr sudo.conf @mansectform@ ,
|
|
.Xr sudo_plugin @mansectform@ ,
|
|
.Xr sudoers.ldap @mansectform@ ,
|
|
.Xr sudoers_timestamp @mansectform@ ,
|
|
.Xr sudo @mansectsu@ ,
|
|
.Xr visudo @mansectsu@
|
|
.Sh AUTHORS
|
|
Many people have worked on
|
|
.Nm sudo
|
|
over the years; this version consists of code written primarily by:
|
|
.Bd -ragged -offset indent
|
|
.An Todd C. Miller
|
|
.Ed
|
|
.Pp
|
|
See the CONTRIBUTORS file in the
|
|
.Nm sudo
|
|
distribution (https://www.sudo.ws/contributors.html) for an
|
|
exhaustive list of people who have contributed to
|
|
.Nm sudo .
|
|
.Sh CAVEATS
|
|
The
|
|
.Em sudoers
|
|
file should
|
|
.Sy always
|
|
be edited by the
|
|
.Nm visudo
|
|
command which locks the file and does grammatical checking.
|
|
It is
|
|
imperative that the
|
|
.Em sudoers
|
|
file be free of syntax errors since
|
|
.Nm sudo
|
|
will not run with a syntactically incorrect
|
|
.Em sudoers
|
|
file.
|
|
.Pp
|
|
When using netgroups of machines (as opposed to users), if you
|
|
store fully qualified host name in the netgroup (as is usually the
|
|
case), you either need to have the machine's host name be fully qualified
|
|
as returned by the
|
|
.Li hostname
|
|
command or use the
|
|
.Em fqdn
|
|
option in
|
|
.Em sudoers .
|
|
.Sh BUGS
|
|
If you feel you have found a bug in
|
|
.Nm sudo ,
|
|
please submit a bug report at https://bugzilla.sudo.ws/
|
|
.Sh SUPPORT
|
|
Limited free support is available via the sudo-users mailing list,
|
|
see https://www.sudo.ws/mailman/listinfo/sudo-users to subscribe or
|
|
search the archives.
|
|
.Sh DISCLAIMER
|
|
.Nm sudo
|
|
is provided
|
|
.Dq AS IS
|
|
and any express or implied warranties, including, but not limited
|
|
to, the implied warranties of merchantability and fitness for a
|
|
particular purpose are disclaimed.
|
|
See the LICENSE file distributed with
|
|
.Nm sudo
|
|
or https://www.sudo.ws/license.html for complete details.
|