Skip site navigation (1)Skip section navigation (2)

FreeBSD Manual Pages

  
 
  

home | help
SUDOERS(5)		     MAINTENANCE COMMANDS		    SUDOERS(5)

NAME
       sudoers - list of which users may execute what

DESCRIPTION
       The  sudoers  file  is composed of two types of entries:	aliases	(basi-
       cally variables)	and user specifications	(which	specify	 who  may  run
       what).

       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).

       The  sudoers  grammar  will  be described below in Extended Backus-Naur
       Form (EBNF).  Don't despair if you don't	 know  what  EBNF  is;	it  is
       fairly simple, and the definitions below	are annotated.

       Quick guide to EBNF

       EBNF  is	 a  concise  and exact way of describing the grammar of	a lan-
       guage.  Each EBNF definition is made up of production rules.  E.g.,

	symbol ::= definition |	alternate1 | alternate2	...

       Each 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, con-
       fuse them with "wildcard" characters, which have	different meanings.

       ?   Means that the preceding symbol (or group of	symbols) is  optional.
	   That	is, it may appear once or not at all.

       *   Means  that	the  preceding symbol (or group	of symbols) may	appear
	   zero	or more	times.

       +   Means that the preceding symbol (or group of	 symbols)  may	appear
	   one or more times.

       Parentheses  may	 be  used  to group symbols together.  For clarity, we
       will use	single quotes ('') to designate	what is	a  verbatim  character
       string (as opposed to a symbol name).

       Aliases

       There  are  four	 kinds of aliases: User_Alias, Runas_Alias, Host_Alias
       and Cmnd_Alias.

	Alias ::= 'User_Alias'	User_Alias (':'	User_Alias)* |
		  'Runas_Alias'	Runas_Alias (':' Runas_Alias)* |
		  'Host_Alias'	Host_Alias (':'	Host_Alias)* |
		  'Cmnd_Alias'	Cmnd_Alias (':'	Cmnd_Alias)*

	User_Alias ::= NAME '='	User_List

	Runas_Alias ::=	NAME '=' Runas_List

	Host_Alias ::= NAME '='	Host_List

	Cmnd_Alias ::= NAME '='	Cmnd_List

	NAME ::= [A-Z]([A-Z][0-9]_)*

       Each alias definition is	of the form

	Alias_Type NAME	= item1, item2,	...

       where Alias_Type	is one	of  User_Alias,	 Runas_Alias,  Host_Alias,  or
       Cmnd_Alias.   A NAME is a string	of uppercase letters, numbers, and un-
       derscore	characters ('_').  A NAME 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 (':').  E.g.,

	Alias_Type NAME	= item1, item2,	item3 :	NAME = item4, item5

       The definitions of what constitutes a valid alias member	follow.

	User_List ::= User |
		      User ',' User_List

	User ::= '!'* username |
		 '!'* '%'group |
		 '!'* '+'netgroup |
		 '!'* User_Alias

       A  User_List  is	 made up of one	or more	usernames, system groups (pre-
       fixed with '%'),	netgroups (prefixed with '+') and other	aliases.  Each
       list item may be	prefixed with one or more '!' operators.  An odd  num-
       ber  of '!' operators negate the	value of the item; an even number just
       cancel each other out.

	Runas_List ::= Runas_User |
		       Runas_User ',' Runas_List

	Runas_User ::= '!'* username |
		       '!'* '#'uid |
		       '!'* '%'group |
		       '!'* +netgroup |
		       '!'* Runas_Alias

       A Runas_List is similar to a User_List except that it can also  contain
       uids  (prefixed	with  '#')  and	instead	of User_Aliases	it can contain
       Runas_Aliases.  Note that usernames and groups are matched as  strings.
       In  other words,	two users (groups) with	the same uid (gid) are consid-
       ered to be distinct.  If	you wish to match all usernames	with the  same
       uid  (e.g. root and toor), you can use a	uid instead (#0	in the example
       given).

	Host_List ::= Host |
		      Host ',' Host_List

	Host ::= '!'* hostname |
		 '!'* ip_addr |
		 '!'* network(/netmask)? |
		 '!'* '+'netgroup |
		 '!'* Host_Alias

       A Host_List is made up of one or	more hostnames,	IP addresses,  network
       numbers,	 netgroups  (prefixed with '+')	and other aliases.  Again, the
       value of	an item	may be negated with the	'!' operator.  If you  do  not
       specify	a  netmask along with the network number, sudo will query each
       of the local host's network interfaces and, if the network number  cor-
       responds	 to  one  of the hosts's network interfaces, the corresponding
       netmask will be used.  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 hostname may  include
       shell-style wildcards (see the Wildcards	section	below),	but unless the
       hostname	 command on your machine returns the fully qualified hostname,
       you'll need to use the fqdn option for wildcards	to be useful.

	Cmnd_List ::= Cmnd |
		      Cmnd ',' Cmnd_List

	commandname ::=	filename |
			filename args |
			filename '""'

	Cmnd ::= '!'* commandname |
		 '!'* directory	|
		 '!'* "sudoedit" |
		 '!'* Cmnd_Alias

       A Cmnd_List is a	list of	one or	more  commandnames,  directories,  and
       other  aliases.	 A commandname is a fully qualified filename which may
       include shell-style wildcards (see the  Wildcards  section  below).   A
       simple  filename	 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	"" to indicate
       that the	command	may only be run	without	command	line arguments.	 A di-
       rectory is a fully qualified pathname ending in a '/'.  When you	 spec-
       ify  a  directory in a Cmnd_List, the user will be able to run any file
       within that directory (but not in any subdirectories therein).

       If a Cmnd has associated	command	line arguments,	then the arguments  in
       the 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 '\' if	they are used in command argu-
       ments: ',', ':',	'=', '\'.  The special command "sudoedit" is  used  to
       permit  a  user	to run sudo with the -e	flag (or as sudoedit).	It may
       take command line arguments just	as a normal command does.

       Defaults

       Certain configuration options may be changed from their default	values
       at  runtime  via	one or more Default_Entry lines.  These	may affect all
       users on	any host, all users on a specific host,	a  specific  user,  or
       commands	being run as a specific	user.

	Default_Type ::= 'Defaults' |
			 'Defaults' '@'	Host_List |
			 'Defaults' ':'	User_List |
			 'Defaults' '>'	Runas_List

	Default_Entry ::= Default_Type Parameter_List

	Parameter_List ::= Parameter |
			   Parameter ',' Parameter_List

	Parameter ::= Parameter	'=' Value |
		      Parameter	'+=' Value |
		      Parameter	'-=' Value |
		      '!'* Parameter

       Parameters  may be flags, integer values, strings, or lists.  Flags are
       implicitly boolean and can be turned off	via the	'!'   operator.	  Some
       integer,	 string	and list parameters may	also be	used in	a boolean con-
       text to disable them.  Values may be enclosed in	double quotes (") when
       they contain multiple words.  Special characters	may be escaped with  a
       backslash (\).

       Lists have two additional assignment operators, += and -=.  These oper-
       ators  are  used	 to add	to and delete from a list respectively.	 It is
       not an error to use the -= operator to remove an	element	that does  not
       exist in	a list.

       See "SUDOERS OPTIONS" for a list	of supported Defaults parameters.

       User Specification

	User_Spec ::= User_List	Host_List '=' Cmnd_Spec_List \
		      (':' Host_List '=' Cmnd_Spec_List)*

	Cmnd_Spec_List ::= Cmnd_Spec |
			   Cmnd_Spec ',' Cmnd_Spec_List

	Cmnd_Spec ::= Runas_Spec? Tag_Spec* Cmnd

	Runas_Spec ::= '(' Runas_List ')'

	Tag_Spec ::= ('NOPASSWD:' | 'PASSWD:' |	'NOEXEC:' | 'EXEC:' |
		      'SETENV:'	| 'NOSETENV:')

       A  user	specification determines which commands	a user may run (and as
       what user) on specified hosts.  By default, commands are	run  as	 root,
       but this	can be changed on a per-command	basis.

       Let's break that	down into its constituent parts:

       Runas_Spec

       A  Runas_Spec  is  simply a Runas_List (as defined above) enclosed in a
       set of parentheses.  If you do not specify a  Runas_Spec	 in  the  user
       specification, a	default	Runas_Spec of root will	be used.  A Runas_Spec
       sets  the default for commands that follow it.  What this means is that
       for the entry:

	dgb    boulder = (operator) /bin/ls, /bin/kill,	/usr/bin/lprm

       The user	dgb may	run /bin/ls, /bin/kill,	and /usr/bin/lprm -- but  only
       as operator.  E.g.,

	$ sudo -u operator /bin/ls.

       It  is also possible to override	a Runas_Spec later on in an entry.  If
       we modify the entry like	so:

	dgb    boulder = (operator) /bin/ls, (root) /bin/kill, /usr/bin/lprm

       Then user dgb is	now allowed to run /bin/ls as operator,	but  /bin/kill
       and /usr/bin/lprm as root.

       Tag_Spec

       A command may have zero or more tags associated with it.	 There are six
       possible	 tag  values,  NOPASSWD,  PASSWD,  NOEXEC,  EXEC,  SETENV  and
       NOSETENV.   Once	 a  tag	 is  set  on  a	 Cmnd, subsequent Cmnds	in the
       Cmnd_Spec_List, inherit the tag unless it is overridden by the opposite
       tag (i.e.: PASSWD overrides NOPASSWD and	NOEXEC overrides EXEC).

       NOPASSWD	and PASSWD

       By default, sudo	requires that a	user authenticate him or  herself  be-
       fore running a command.	This behavior can be modified via the NOPASSWD
       tag.   Like  a Runas_Spec, the NOPASSWD tag sets	a default for the com-
       mands that follow it in the Cmnd_Spec_List.  Conversely,	the PASSWD tag
       can be used to reverse things.  For example:

	ray    rushmore	= NOPASSWD: /bin/kill, /bin/ls,	/usr/bin/lprm

       would allow the user ray	to run /bin/kill, /bin/ls,  and	 /usr/bin/lprm
       as root on the machine rushmore as root without authenticating himself.
       If  we only want	ray to be able to run /bin/kill	without	a password the
       entry would be:

	ray    rushmore	= NOPASSWD: /bin/kill, PASSWD: /bin/ls,	/usr/bin/lprm

       Note, however, that the PASSWD tag has no effect	on users  who  are  in
       the group specified by the exempt_group option.

       By  default, if the NOPASSWD tag	is applied to any of the entries for a
       user on the current host, he or she will	be able	to run sudo -l without
       a password.  Additionally, a user may only run sudo -v without a	 pass-
       word  if	the NOPASSWD tag is present for	all a user's entries that per-
       tain to the current host.  This behavior	may be overridden via the ver-
       ifypw and listpw	options.

       NOEXEC and EXEC

       If sudo has been	compiled with noexec support and the underlying	 oper-
       ating  system  supports it, the NOEXEC tag can be used to prevent a dy-
       namically-linked	executable from	running	further	commands itself.

       In  the	following  example,  user  aaron  may  run  /usr/bin/more  and
       /usr/bin/vi but shell escapes will be disabled.

	aaron  shanty =	NOEXEC:	/usr/bin/more, /usr/bin/vi

       See  the	 "PREVENTING  SHELL ESCAPES" section below for more details on
       how NOEXEC works	and whether or not it will work	on your	system.

       SETENV and NOSETENV

       These tags override the value of	the setenv option on a per-command ba-
       sis.  Note that if SETENV has been set for a command,  any  environment
       variables  set  on the command line way are not subject to the restric-
       tions imposed by	env_check, env_delete, or  env_keep.   As  such,  only
       trusted	users  should  be allowed to set variables in this manner.  If
       the command matched is ALL, the SETENV tag is implied for that command;
       this default may	be overridden by use of	the UNSETENV tag.

       Wildcards

       sudo allows shell-style wildcards (aka meta or glob characters)	to  be
       used  in	 pathnames  as	well  as command line arguments	in the sudoers
       file.  Wildcard matching	is done	 via  the  POSIX  fnmatch(3)  routine.
       Note that these are not regular expressions.

       *       Matches any set of zero or more characters.

       ?       Matches any single character.

       [...]   Matches any character in	the specified range.

       [!...]  Matches any character not in the	specified range.

       \x      For  any	 character "x",	evaluates to "x".  This	is used	to es-
	       cape special characters such as:	"*", "?", "[", and "}".

       Note that a forward slash ('/') will not	be matched by  wildcards  used
       in  the pathname.  When matching	the command line arguments, however, a
       slash does get matched by wildcards.  This is to	make a path like:

	   /usr/bin/*

       match /usr/bin/who but not /usr/bin/X11/xterm.

       Exceptions to wildcard rules

       The following exceptions	apply to the above rules:

       ""      If the empty string "" is the only command line argument	in the
	       sudoers entry it	means that command is not allowed  to  be  run
	       with any	arguments.

       Other special characters	and reserved words

       The  pound  sign	('#') 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.

       The reserved word ALL is	a built-in alias that always causes a match to
       succeed.	 It can	be used	wherever one might otherwise use a Cmnd_Alias,
       User_Alias,  Runas_Alias,  or Host_Alias.  You should not try to	define
       your own	alias called ALL as the	built-in alias will be used in prefer-
       ence to your own.  Please note that using ALL can be dangerous since in
       a command context, it allows the	user to	run any	command	on the system.

       An exclamation point ('!') can be used as a logical not	operator  both
       in an alias and in front	of a Cmnd.  This allows	one to exclude certain
       values.	Note, however, that using a ! in conjunction with the built-in
       ALL  alias to allow a user to run "all but a few" commands rarely works
       as intended (see	SECURITY NOTES below).

       Long lines can be continued with	a backslash ('\') as the last  charac-
       ter on the line.

       Whitespace  between  elements  in  a  list as well as special syntactic
       characters in a User Specification ('=',	':', '(', ')') is optional.

       The following characters	must be	escaped	with a	backslash  ('\')  when
       used  as	 part  of a word (e.g. a username or hostname):	'@', '!', '=',
       ':', ',', '(', ')', '\'.

SUDOERS	OPTIONS
       sudo's behavior can be modified by Default_Entry	 lines,	 as  explained
       earlier.	 A list	of all supported Defaults parameters, grouped by type,
       are listed below.

       Flags:

       always_set_home If  set,	sudo will set the HOME environment variable to
		       the home	directory of the target	user  (which  is  root
		       unless  the -u option is	used).	This effectively means
		       that the	-H flag	is always implied.  This flag  is  off
		       by default.

       authenticate    If  set,	users must authenticate	themselves via a pass-
		       word (or	other means of authentication) before they may
		       run commands.  This default may be overridden  via  the
		       PASSWD and NOPASSWD tags.  This flag is on by default.

       env_editor      If  set,	visudo will use	the value of the EDITOR	or VI-
		       SUAL environment	variables before falling back  on  the
		       default editor list.  Note that this may	create a secu-
		       rity  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
		       editor variable.	 visudo	will then only use the	EDITOR
		       or  VISUAL  if  they match a value specified in editor.
		       This flag is on by default.

       env_reset       If set, sudo will reset the environment to only contain
		       the LOGNAME, SHELL, USER, USERNAME and the SUDO_* vari-
		       ables.  Any variables in	the caller's environment  that
		       match  the env_keep and env_check lists are then	added.
		       The default contents  of	 the  env_keep	and  env_check
		       lists  are  displayed when sudo is run by root with the
		       -V option.  If sudo was compiled	with  the  SECURE_PATH
		       option, its value will be used for the PATH environment
		       variable.  This flag is on by default.

       fqdn	       Set  this flag if you want to put fully qualified host-
		       names in	the sudoers file.  I.e., instead of myhost you
		       would use myhost.mydomain.edu.  You may still  use  the
		       short  form if you wish (and even mix the two).	Beware
		       that turning on fqdn requires sudo to make DNS  lookups
		       which  may make sudo unusable if	DNS stops working (for
		       example if the machine is not  plugged  into  the  net-
		       work).  Also note that you must use the host's official
		       name  as	DNS knows it.  That is,	you may	not use	a host
		       alias (CNAME entry) due to performance issues  and  the
		       fact  that there	is no way to get all aliases from DNS.
		       If your machine's hostname (as returned by the hostname
		       command)	is already fully qualified you shouldn't  need
		       to set fqdn.  This flag is off by default.

       ignore_dot      If set, sudo will ignore	'.' or '' (current dir)	in the
		       PATH environment	variable; the PATH itself is not modi-
		       fied.  This flag	is on by default.  Currently, while it
		       is  possible to set ignore_dot in sudoers, its value is
		       not used.  This option should be	 considered  read-only
		       (it will	be fixed in a future version of	sudo).

       ignore_local_sudoers
		       If set via LDAP,	parsing	of /usr/local/etc/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 /usr/lo-
		       cal/etc/sudoers.	 When this option is present, /usr/lo-
		       cal/etc/sudoers does not	even need to exist. Since this
		       option tells sudo how to	behave when no	specific  LDAP
		       entries	have  been  matched,  this  sudoOption is only
		       meaningful for the cn=defaults section.	This  flag  is
		       off by default.

       insults	       If  set,	 sudo will insult users	when they enter	an in-
		       correct password.  This flag is off by default.

       log_host	       If set, the hostname will be logged in the (non-syslog)
		       sudo log	file.  This flag is off	by default.

       log_year	       If set, the four-digit  year  will  be  logged  in  the
		       (non-syslog)  sudo  log	file.  This flag is off	by de-
		       fault.

       long_otp_prompt When validating with a One Time Password	 (OPT)	scheme
		       such  as	 S/Key	or  OPIE, a two-line prompt is used to
		       make it easier to cut and paste the challenge to	a  lo-
		       cal window.  It's not as	pretty as the default but some
		       people find it more convenient.	This flag is on	by de-
		       fault.

       mail_always     Send  mail  to  the mailto user every time a users runs
		       sudo.  This flag	is off by default.

       mail_badpass    Send mail to the	mailto user if the user	 running  sudo
		       does  not enter the correct password.  This flag	is off
		       by default.

       mail_no_host    If set, mail will be sent to the	mailto user if the in-
		       voking user exists in the sudoers file, but is not  al-
		       lowed  to  run commands on the current host.  This flag
		       is off by default.

       mail_no_perms   If set, mail will be sent to the	mailto user if the in-
		       voking user is allowed to use sudo but the command they
		       are trying is not listed	in their sudoers file entry or
		       is explicitly denied.  This flag	is off by default.

       mail_no_user    If set, mail will be sent to the	mailto user if the in-
		       voking user is not in the sudoers file.	This  flag  is
		       on by default.

       noexec	       If set, all commands run	via sudo will behave as	if the
		       NOEXEC  tag  has	 been set, unless overridden by	a EXEC
		       tag.  See the description of NOEXEC and EXEC  below  as
		       well  as	 the "PREVENTING SHELL ESCAPES"	section	at the
		       end of this manual.  This flag is off by	default.

       path_info       Normally, sudo will tell	the user when a	command	 could
		       not  be found in	their 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 disadvan-
		       tage is that if the executable is  simply  not  in  the
		       user's  PATH, sudo will tell the	user that they are not
		       allowed to run it, which	can be confusing.   This  flag
		       is on by	default.

       passprompt_override
		       The  password  prompt specified by passprompt will nor-
		       mally only be used if the passwod  prompt  provided  by
		       systems such as PAM matches the string "Password:".  If
		       passprompt_override  is	set, passprompt	will always be
		       used.  This flag	is off by default.

       preserve_groups By default sudo will initialize the group vector	to the
		       list of groups  the  target  user  is  in.   When  pre-
		       serve_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 off by default.

       requiretty      If set, sudo will only run when the user	is  logged  in
		       to  a  real  tty.   This	will disallow things like "rsh
		       somehost	sudo ls" since rsh(1) does not allocate	a tty.
		       Because it is not possible to turn off echo when	 there
		       is no tty present, some sites may wish to set this flag
		       to  prevent  a  user  from entering a visible password.
		       This flag is off	by default.

       root_sudo       If set, root is allowed to  run	sudo  too.   Disabling
		       this  prevents  users  from "chaining" sudo commands to
		       get a root shell	by doing  something  like  "sudo  sudo
		       /bin/sh".   Note,  however,  that turning off root_sudo
		       will also prevent root and from running sudoedit.  Dis-
		       abling root_sudo	provides no real additional  security;
		       it  exists purely for historical	reasons.  This flag is
		       on by default.

       rootpw	       If set, sudo will prompt	for the	root password  instead
		       of the password of the invoking user.  This flag	is off
		       by default.

       runaspw	       If  set,	 sudo will prompt for the password of the user
		       defined by the runas_default option (defaults to	 root)
		       instead	of  the	 password  of the invoking user.  This
		       flag is off by default.

       set_home	       If set and sudo is invoked with the -s  flag  the  HOME
		       environment  variable will be set to the	home directory
		       of the target user (which is root unless	the -u	option
		       is used).  This effectively makes the -s	flag imply -H.
		       This flag is off	by default.

       set_logname     Normally,  sudo will set	the LOGNAME, USER and USERNAME
		       environment variables to	the name of  the  target  user
		       (usually	 root  unless the -u flag is given).  However,
		       since some programs (including the RCS revision control
		       system) use 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  if  the  env_reset option has not been dis-
		       abled, entries in the env_keep list will	 override  the
		       value of	set_logname.  This flag	is off by default.

       setenv	       Allow the user to disable the env_reset option from the
		       command	line.  Additionally, environment variables set
		       via the command line are	not subject  to	 the  restric-
		       tions  imposed  by  env_check, env_delete, or env_keep.
		       As such,	only trusted users should be  allowed  to  set
		       variables in this manner.  This flag is off by default.

       shell_noargs    If set and sudo is invoked with no arguments it acts as
		       if  the	-s  flag  had  been given.  That is, it	runs a
		       shell as	root (the shell	is determined by the SHELL en-
		       vironment variable if it	is set,	falling	 back  on  the
		       shell  listed  in the invoking user's /etc/passwd entry
		       if not).	 This flag is off by default.

       stay_setuid     Normally, when sudo executes a command the real and ef-
		       fective UIDs are	set to the target user	(root  by  de-
		       fault).	 This  option  changes that behavior such that
		       the real	UID is left as the invoking  user's  UID.   In
		       other  words,  this makes sudo act as a setuid wrapper.
		       This can	be useful on systems that disable some	poten-
		       tially  dangerous  functionality	 when a	program	is run
		       setuid.	This option is only effective on systems  with
		       either  the  setreuid()	or setresuid() function.  This
		       flag is off by default.

       targetpw	       If set, sudo will prompt	for the	password of  the  user
		       specified  by the -u flag (defaults to root) instead of
		       the password of the invoking user.  Note	that this pre-
		       cludes the use of a uid not listed in the passwd	 data-
		       base  as	 an argument to	the -u flag.  This flag	is off
		       by default.

       tty_tickets     If set, users must authenticate	on  a  per-tty	basis.
		       Normally,  sudo uses a directory	in the ticket dir with
		       the same	name as	the user running it.  With  this  flag
		       enabled,	 sudo  will  use  a file named for the tty the
		       user is logged in on in that directory.	This  flag  is
		       on by default.

       use_loginclass  If  set,	sudo will apply	the defaults specified for the
		       target user's login class if one	exists.	  Only	avail-
		       able if sudo is configured with the --with-logincap op-
		       tion.  This flag	is off by default.

       Integers:

       passwd_tries    The  number of tries a user gets	to enter his/her pass-
		       word before sudo	logs the failure and exits.   The  de-
		       fault is	3.

       Integers	that can be used in a boolean context:

       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 80 (use 0 or	negate
		       the option to disable word wrap).

       passwd_timeout  Number of minutes before	the sudo password prompt times
		       out.   The  default is 5; set this to 0 for no password
		       timeout.

       timestamp_timeout
		       Number of minutes that can elapse before	sudo will  ask
		       for  a  passwd again.  The default is 5.	 Set this to 0
		       to always prompt	for a password.	 If  set  to  a	 value
		       less  than  0  the  user's timestamp will never expire.
		       This can	be used	to allow users	to  create  or	delete
		       their  own  timestamps  via sudo	-v and sudo -k respec-
		       tively.

       umask	       Umask to	use when running the command.  Negate this op-
		       tion or set it to 0777 to preserve  the	user's	umask.
		       The default is 0022.

       Strings:

       badpass_message Message that is displayed if a user enters an incorrect
		       password.   The default is Sorry, try again. unless in-
		       sults are enabled.

       editor	       A colon (':') separated list of editors allowed	to  be
		       used  with  visudo.  visudo will	choose the editor that
		       matches the user's EDITOR environment variable if  pos-
		       sible,  or the first editor in the list that exists and
		       is executable.  The default is the path to vi  on  your
		       system.

       mailsub	       Subject of the mail sent	to the mailto user. The	escape
		       %h will expand to the hostname of the machine.  Default
		       is *** SECURITY information for %h ***.

       noexec_file     Path  to	 a shared library containing dummy versions of
		       the execv(), execve() and fexecve()  library  functions
		       that  just  return an error.  This is used to implement
		       the  noexec  functionality  on  systems	that   support
		       LD_PRELOAD  or  its  equivalent.	  Defaults to /usr/lo-
		       cal/libexec/sudo_noexec.so.

       passprompt      The default prompt to use when asking for  a  password;
		       can  be overridden via the -p option or the SUDO_PROMPT
		       environment variable.  The following percent (`%')  es-
		       capes are supported:

		       %H  expanded to the local hostname including the	domain
			   name	 (on if	the machine's hostname is fully	quali-
			   fied	or the fqdn option is set)

		       %h  expanded to the local hostname without  the	domain
			   name

		       %p  expanded  to	the user whose password	is being asked
			   for (respects  the  rootpw,	targetpw  and  runaspw
			   flags in sudoers)

		       %U  expanded  to	the login name of the user the command
			   will	be run as (defaults to root)

		       %u  expanded to the invoking user's login name

		       %%  two consecutive % characters	are collapsed  into  a
			   single % character

		       The default value is Password:.

       runas_default   The  default  user to run commands as if	the -u flag is
		       not specified on	the command line.   This  defaults  to
		       root.   Note that if runas_default is set it must occur
		       before any Runas_Alias specifications.

       syslog_badpri   Syslog priority to use when user	 authenticates	unsuc-
		       cessfully.  Defaults to alert.

       syslog_goodpri  Syslog priority to use when user	authenticates success-
		       fully.  Defaults	to notice.

       timestampdir    The directory in	which sudo stores its timestamp	files.
		       The default is /var/run/sudo.

       timestampowner  The owner of the	timestamp directory and	the timestamps
		       stored therein.	The default is root.

       Strings that can	be used	in a boolean context:

       exempt_group
		   Users  in  this group are exempt from password and PATH re-
		   quirements.	This is	not set	by default.

       lecture	   This	option controls	when a short lecture will  be  printed
		   along  with the password prompt.  It	has the	following pos-
		   sible values:

		   always  Always lecture the user.

		   never   Never lecture the user.

		   once	   Only	lecture	the user the first time	they run sudo.

		   If no value is specified,  a	 value	of  once  is  implied.
		   Negating the	option results in a value of never being used.
		   The default value is	once.

       lecture_file
		   Path	 to  a	file containing	an alternate sudo lecture that
		   will	be used	in place of the	standard lecture if the	 named
		   file	exists.	 By default, sudo uses a built-in lecture.

       listpw	   This	 option	controls when a	password will be required when
		   a user runs sudo with the -l	flag.  It  has	the  following
		   possible values:

		   all	   All the user's sudoers entries for the current host
			   must	have the NOPASSWD flag set to avoid entering a
			   password.

		   always  The user must always	enter a	password to use	the -l
			   flag.

		   any	   At  least one of the	user's sudoers entries for the
			   current host	must have the  NOPASSWD	 flag  set  to
			   avoid entering a password.

		   never   The	user need never	enter a	password to use	the -l
			   flag.

		   If no value is  specified,  a  value	 of  any  is  implied.
		   Negating the	option results in a value of never being used.
		   The default value is	any.

       logfile	   Path	 to the	sudo log file (not the syslog log file).  Set-
		   ting	a path turns on	logging	to a file; negating  this  op-
		   tion	turns it off.  By default, sudo	logs via syslog.

       mailerflags Flags to use	when invoking mailer. Defaults to -t.

       mailerpath  Path	 to  mail program used to send warning mail.  Defaults
		   to the path to sendmail found at configure time.

       mailto	   Address to send warning and error  mail  to.	  The  address
		   should  be enclosed in double quotes	(") to protect against
		   sudo	interpreting the @ sign.  Defaults to root.

       syslog	   Syslog facility if syslog is	being used for logging (negate
		   to disable syslog logging).	Defaults to local2.

       verifypw	   This	option controls	when a password	will be	required  when
		   a  user  runs  sudo with the	-v flag.  It has the following
		   possible values:

		   all	   All the user's sudoers entries for the current host
			   must	have the NOPASSWD flag set to avoid entering a
			   password.

		   always  The user must always	enter a	password to use	the -v
			   flag.

		   any	   At least one	of the user's sudoers entries for  the
			   current  host  must	have  the NOPASSWD flag	set to
			   avoid entering a password.

		   never   The user need never enter a password	to use the  -v
			   flag.

		   If  no  value  is  specified,  a  value  of all is implied.
		   Negating the	option results in a value of never being used.
		   The default value is	all.

       Lists that can be used in a boolean context:

       env_check       Environment variables to	be removed from	the user's en-
		       vironment if the	variable's value contains % or / char-
		       acters.	This can be used to guard against printf-style
		       format vulnerabilities in poorly-written	programs.  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 us-
		       ing the =, +=, -=, and !	operators  respectively.   Re-
		       gardless	 of whether the	env_reset option is enabled or
		       disabled, variables specified by	env_check will be pre-
		       served in the environment if they  pass	the  aforemen-
		       tioned  check.	The  default list of environment vari-
		       ables to	check is displayed when	sudo is	 run  by  root
		       with the	-V option.

       env_delete      Environment variables to	be removed from	the user's en-
		       vironment.  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 =,	+=, -=,	and  !	operators  re-
		       spectively.   The default list of environment variables
		       to remove is displayed when sudo	is run	by  root  with
		       the  -V	option.	 Note that many	operating systems will
		       remove potentially dangerous variables from  the	 envi-
		       ronment of any setuid process (such as sudo).

       env_keep	       Environment variables to	be preserved in	the user's en-
		       vironment when the env_reset option is in effect.  This
		       allows	fine-grained   control	over  the  environment
		       sudo-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	=, +=,
		       -=, and ! operators respectively.  The default list  of
		       variables to keep is displayed when sudo	is run by root
		       with the	-V option.

       When  logging  via syslog(3), sudo accepts the following	values for the
       syslog facility (the value of the syslog	Parameter): authpriv (if  your
       OS  supports  it),  auth, daemon, user, local0, local1, local2, local3,
       local4, local5, local6, and local7.  The	 following  syslog  priorities
       are  supported: alert, crit, debug, emerg, err, info, notice, and warn-
       ing.

FILES
       /usr/local/etc/sudoers  List of who can run what

       /etc/group	       Local groups file

       /etc/netgroup	       List of network groups

EXAMPLES
       Since the sudoers file is parsed	in a single pass, order	is  important.
       In  general,  you  should  structure  sudoers such that the Host_Alias,
       User_Alias, and Cmnd_Alias specifications come first, followed  by  any
       Default_Entry  lines,  and  finally the Runas_Alias and user specifica-
       tions.  The basic rule of thumb is you cannot reference an  Alias  that
       has not already been defined.

       Below are example sudoers entries.  Admittedly, some of these are a bit
       contrived.  First, we define our	aliases:

	# 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

	# Host alias specification
	Host_Alias     SPARC = bigtime,	eclipse, moet, anchor :\
		       SGI = grolsch, dandelion, black :\
		       ALPHA = widget, thalamus, foobar	:\
		       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,\
			       /usr/sbin/restore, /usr/sbin/rrestore
	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, \
				/usr/local/bin/tcsh, /usr/bin/rsh, \
				/usr/local/bin/zsh
	Cmnd_Alias     SU = /usr/bin/su
	Cmnd_Alias     PAGERS =	/usr/bin/more, /usr/bin/pg, /usr/bin/less

       Here  we	override some of the compiled in default values.  We want sudo
       to log via syslog(3) using the auth facility in all  cases.   We	 don't
       want  to	 subject the full time staff to	the sudo lecture, user millert
       need not	give a password, and we	don't want to reset the	LOGNAME,  USER
       or USERNAME environment variables when running commands as root.	 Addi-
       tionally,  on  the machines in the SERVERS Host_Alias, we keep an addi-
       tional 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  Cmnd_Alias
       (/usr/bin/more, /usr/bin/pg and /usr/bin/less).

	# 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

       The User	specification is the part that actually	determines who may run
       what.

	root	       ALL = (ALL) ALL
	%wheel	       ALL = (ALL) ALL

       We  let root and	any user in group wheel	run any	command	on any host as
       any user.

	FULLTIMERS     ALL = NOPASSWD: ALL

       Full time sysadmins (millert, mikef, and	dowdy) may run any command  on
       any host	without	authenticating themselves.

	PARTTIMERS     ALL = ALL

       Part  time sysadmins (bostley, jwfox, and crawl)	may run	any command on
       any host	but they must authenticate themselves first (since  the	 entry
       lacks the NOPASSWD tag).

	jack	       CSNETS =	ALL

       The  user  jack may run any command on the machines in the CSNETS alias
       (the networks 128.138.243.0,  128.138.204.0,  and  128.138.242.0).   Of
       those networks, only 128.138.204.0 has an explicit netmask (in CIDR no-
       tation)	indicating it is a class C network.  For the other networks in
       CSNETS, the local machine's netmask will	be used	during matching.

	lisa	       CUNETS =	ALL

       The user	lisa may run any command on any	host in	the CUNETS alias  (the
       class B network 128.138.0.0).

	operator       ALL = DUMPS, KILL, SHUTDOWN, HALT, REBOOT, PRINTING,\
		       sudoedit	/etc/printcap, /usr/oper/bin/

       The  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 di-
       rectory /usr/oper/bin/.

	joe	       ALL = /usr/bin/su operator

       The user	joe may	only su(1) to operator.

	pete	       HPPA = /usr/bin/passwd [A-z]*, !/usr/bin/passwd root

       The user	pete is	allowed	to change anyone's password except for root on
       the HPPA	machines.  Note	that this assumes passwd(1) does not take mul-
       tiple usernames on the command line.

	bob	       SPARC = (OP) ALL	: SGI =	(OP) ALL

       The user	bob may	run anything on	the SPARC and SGI machines as any user
       listed in the OP	Runas_Alias (root and operator).

	jim	       +biglab = ALL

       The user	jim may	run any	command	on machines in	the  biglab  netgroup.
       sudo knows that "biglab"	is a netgroup due to the '+' prefix.

	+secretaries   ALL = PRINTING, /usr/bin/adduser, /usr/bin/rmuser

       Users  in  the 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.

	fred	       ALL = (DB) NOPASSWD: ALL

       The user	fred can run commands as any user in the DB Runas_Alias	 (ora-
       cle or sybase) without giving a password.

	john	       ALPHA = /usr/bin/su [!-]*, !/usr/bin/su *root*

       On the ALPHA machines, user john	may su to anyone except	root but he is
       not allowed to give su(1) any flags.

	jen	       ALL, !SERVERS = ALL

       The user	jen may	run any	command	on any machine except for those	in the
       SERVERS Host_Alias (master, mail, www and ns).

	jill	       SERVERS = /usr/bin/, !SU, !SHELLS

       For any machine in the SERVERS Host_Alias, jill may run any commands in
       the  directory  /usr/bin/ except	for those commands belonging to	the SU
       and SHELLS Cmnd_Aliases.

	steve	       CSNETS =	(operator) /usr/local/op_commands/

       The user	steve may run any command in the directory  /usr/local/op_com-
       mands/ but only as user operator.

	matt	       valkyrie	= KILL

       On  his	personal  workstation, valkyrie, matt needs to be able to kill
       hung processes.

	WEBMASTERS     www = (www) ALL,	(root) /usr/bin/su www

       On the host www,	any user in the	WEBMASTERS  User_Alias	(will,	wendy,
       and wim), may run any command as	user www (which	owns the web pages) or
       simply su(1) to www.

	ALL	       CDROM = NOPASSWD: /sbin/umount /CDROM,\
		       /sbin/mount -o nosuid\,nodev /dev/cd0a /CDROM

       Any  user  may  mount  or unmount a CD-ROM on the machines in the CDROM
       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.

SECURITY NOTES
       It is generally not effective to	"subtract" commands from ALL using the
       '!'  operator.  A user can trivially circumvent this by copying the de-
       sired command to	a different name and then executing that.   For	 exam-
       ple:

	   bill	       ALL = ALL, !SU, !SHELLS

       Doesn't	really	prevent	bill from running the commands listed in SU or
       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	 rein-
       forced by policy).

PREVENTING SHELL ESCAPES
       Once  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 sudo's access	control	and logging.  Common  programs
       that  permit shell escapes include shells (obviously), editors, pagina-
       tors, mail and terminal programs.

       There are two basic approaches to this problem:

       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 sudoedit is a	better
		 solution to running editors via sudo.	Due to the large  num-
		 ber  of  programs that	offer shell escapes, restricting users
		 to the	set of programs	that do	not if often unworkable.

       noexec	 Many systems that support shared libraries have  the  ability
		 to override default library functions by pointing an environ-
		 ment variable (usually	LD_PRELOAD) to an alternate shared li-
		 brary.	  On  such systems, sudo's noexec functionality	can be
		 used to prevent a program run	by  sudo  from	executing  any
		 other programs.  Note,	however, that this applies only	to na-
		 tive  dynamically-linked executables.	Statically-linked exe-
		 cutables and foreign executables running under	binary	emula-
		 tion are not affected.

		 To  tell whether or not sudo supports noexec, you can run the
		 following as root:

		     sudo -V | grep "dummy exec"

		 If the	resulting output contains a line that begins with:

		     File containing dummy exec	functions:

		 then sudo may be able to replace the exec family of functions
		 in the	standard library with its own that  simply  return  an
		 error.	  Unfortunately,  there	 is  no	 foolproof way to know
		 whether or not	noexec	will  work  at	compile-time.	noexec
		 should	work on	SunOS, Solaris,	*BSD, Linux, IRIX, Tru64 UNIX,
		 MacOS	X, and HP-UX 11.x.  It is known	not to work on AIX and
		 UnixWare.  noexec is expected to work on most operating  sys-
		 tems that support the 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 LD_PRELOAD is supported.

		 To enable noexec for a	command, use the NOEXEC	tag  as	 docu-
		 mented	in the User Specification section above.  Here is that
		 example again:

		  aaron	 shanty	= NOEXEC: /usr/bin/more, /usr/bin/vi

		 This  allows  user aaron to run /usr/bin/more and /usr/bin/vi
		 with 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
		 noexec	you can	always just try	it out and see if it works.

       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 ap-
       proach is to give the user permission to	run sudoedit.

SEE ALSO
       rsh(1), su(1), fnmatch(3), sudo(8), visudo(8)

CAVEATS
       The sudoers file	should always be edited	by the	visudo	command	 which
       locks the file and does grammatical checking. It	is imperative that su-
       doers be	free of	syntax errors since sudo will not run with a syntacti-
       cally incorrect sudoers file.

       When  using  netgroups  of machines (as opposed to users), if you store
       fully qualified hostnames in the	netgroup (as is	usually	the case), you
       either need to have the machine's hostname be fully  qualified  as  re-
       turned by the hostname command or use the fqdn option in	sudoers.

BUGS
       If you feel you have found a bug	in sudo, please	submit a bug report at
       http://www.sudo.ws/sudo/bugs/

SUPPORT
       Limited	free support is	available via the sudo-users mailing list, see
       http://www.sudo.ws/mailman/listinfo/sudo-users to subscribe  or	search
       the archives.

DISCLAIMER
       sudo  is	 provided ``AS IS'' and	any express or implied warranties, in-
       cluding,	but not	limited	to, the	implied	warranties of  merchantability
       and  fitness  for a particular purpose are disclaimed.  See the LICENSE
       file distributed	with sudo or http://www.sudo.ws/sudo/license.html  for
       complete	details.

1.6.9p17			 Jun 21, 2008			    SUDOERS(5)

Want to link to this manual page? Use this URL:
<https://man.freebsd.org/cgi/man.cgi?query=sudoers&sektion=5&manpath=FreeBSD+7.1-RELEASE+and+Ports>

home | help