sudoers中文man文档.docx
《sudoers中文man文档.docx》由会员分享,可在线阅读,更多相关《sudoers中文man文档.docx(17页珍藏版)》请在冰豆网上搜索。
sudoers中文man文档
sudoers中文man文档
sudoers配置文件由两种内容组成:
别名(基本变量)和用户说明(userspecification)(定义了谁能运行什么).sudoers的语法将在下面用扩展的巴科斯-诺尔范式(ExtendedBackus-NaurForm,EBNF)描述.如果您不知道什么是EBNF是什么的话也请不要放弃,事实上它很简单,并且下面用它作的定义都是经过注释的.
EBNF的快速指导
EBNF是用来描述某种语言的语法的一种简洁且精确的方法.每一个EBNF定义都是由"productionrules"这种形式组成的.例如:
symbol:
:
=definition|alternate1|alternate2...........
每一个"productionrule"都和其它的"productionrule"有关联,这样就构成了这种语言的语法.EBNF也包含了下面的操作符,许多读者都能够认出这是正则表达式(regularexpression)的符号.但是,不要把它们和通配符(wildcard0搞混淆了.它们有着不同的含义.
?
意味着前面的一个记号(symbol)或者一组记号(groupofsymbol)是可选的,也就是说,可以出现一次或根本就不出现
*在前面的一个或者一组记号出现零次或多次
+在前面的一个或者一组记号出现一次或多次
括号可以用来把记号组合在一起(togroupsymbolstogether),单引号可以把一个字符串按照他的字面意思来解释(这与记号的名字相反).
别名
有四种别名:
User_Alias,Runas_Alias,Host_Alias和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]_)*
每一个别名都是按这种形式定义的:
Alias_TypeNAME=item1,item2,....................
这里Alias_Type是User_Alias,Runas_Alias,Host_Alias,Cmnd_Alias中的一个,NAMEW是一个由大写字母,数字和下划线组成的字符串,并且它必需以一个大写字母开头.可以把同一类型的多个别名定义放在同一行里,中间以一个冒号隔开.例如:
Alias_TypeNAME=item1,item2,item3:
NAME=item4,item5
一个组成合法别名成员的定义紧随其后.(Thedefinitionsofwhatconstitutesavalidaliasmemberfollow.)
User_List:
:
=User|
User','User_List
User:
:
='!
'*username|
'!
'*'%'group|
'!
'*'+'netgroup|
'!
'*User_Alias
(译注:
这里应该是
User_List:
:
=User|
User','User_List
User:
:
='!
'*username|
'!
'*'#'uids|
'!
'*'%'group|
'!
'*'+'netgroup|
'!
'*User_Alias
才对)
一个User_List是由一个或多个用户名,用户ID(要加上"#"前缀),系统用户组(要加上"%"前缀),网络组(要加上"+"前缀)或者其它User_Alias组成.每一个列表项都可以加上一个或多个"!
"前缀.奇数个"!
"使这个列表项取反,偶数个"!
"没有任何作用.(译注:
这里的"!
"也就是取反啦)
Runas_List:
:
=Runas_User|
Runas_User','Runas_List
Runas_User:
:
='!
'*username|
'!
'*'#'uid|
'!
'*'%'group|
'!
'*+netgroup|
'!
'*Runas_Alias
Runas_List和User_List是很相象的,仅仅是用Runas_Aliases替代了User_Aliases
Host_List:
:
=Host|
Host','Host_List
Host:
:
='!
'*hostname|
'!
'*ip_addr|
'!
'*network(/netmask)?
|
'!
'*'+'netgroup|
'!
'*Host_Alias
Host_List是由一个或者多个主机名,IP地址,网络号,网络组(要加上"+"前缀)或者其他的Host_Alias组成的.同样的,一个列表项的值也可以用"!
"来取消.如果您使用了一个网络号但是没有随之指定子网掩码,那么主机的以太网接口的子网掩码将被使用-----如果它能够相配的话.子网掩码可以用点分十进制表示法来指定(如:
255.255.255.0),也可以用CIDR(无类型域间选路)表示法指定(采用掩码中1的为数,如:
24.这和前面的255.255.255.0是等价的).主机名可以包含shell风格的通配符(请查看下面的"通配符"一节),但是除非您机器上的hostname命令能返回完整的主机名,为了使通配符有效您需要使用fqdn选项(见下面的"标志"小节)
Cmnd_List:
:
=Cmnd|
Cmnd','Cmnd_List
commandname:
:
=filename|
filenameargs|
filename'""'
Cmnd:
:
='!
'*commandname|
'!
'*directory|
'!
'*Cmnd_Alias
Cmnd_List是由一个或多个命令名,目录或者其他Cmnd_Alias组成的列表.命令名是一个可以包含shell风格通配符(请查看下面的"通配符"一节)的完整文件名.一个简单的文件名永许用户以任何他们想使用的参数来执行命令.但是您也可以指定命令行参数(可以包含通配符).您还可以通过交替的使用""来说明这个命令执行时不能带任何命令行参数.当您在Cmnd_List中指定了一个目录时,用户将可以执行这个目录中的任何文件(不包括子目录中的文件).
如果Cmnd关联上了命令行参数,那么用户在命令行上所给的参数必需精确的匹配Cmnd中的参数(或者要和通配符匹配).注意,如果下面的字符在命令参数中出现的话,必须使用"\"来将其转义:
',',':
','=','\'.
默认项
通过一个或多个Default_Entry行,一些特定的配置选项在运行时可以从它们的默认值改变.(译注:
好拗口哦:
p)这些选项可以对在任何主机上的所有用户或者在某个特定主机上的所有用户或者仅仅是一个特定的用户产生作用.如果多个条目都匹配,那么它们会按顺序执行.如果有冲突的值,那么最后一个匹配行上的值将会产生作用.
Default_Type:
:
='Defaults'||
'Defaults'':
'User||
'Defaults''@'Host
Default_Entry:
:
=Default_TypeParameter_List
Parameter:
:
=Parameter'='Value||
Parameter'+='Value||
Parameter'-='Value||
'!
'*Parameter||
Parameters可以是标志(flags),整数值(integervalues),字符串(strings)或者列表(lists).标志是一个布尔值,可以通过使用"!
"操作符来取反.一些整数,字符串和列表参数也可以在布尔上下文中使用以使其取反.由多个单词组成的值必须用双引号引起来.一些特殊字符必须用"\"转义.
列表还有两个附加的操作符,+=和-=.这两个操作符被分别用来从一个列表中增加或删除条目.用"-="操作符从列表中删除不存在的项目并不算是错误.
注意,由于sudoers文件是按顺序解析的,所以放置Default段的最佳位置是在Host,User和Cmnd别名段之后,用户定义段之前.
标志
long_otp_prompt
WhenvalidatingwithaOneTimePasswordscheme(S/KeyorOPIE),atwo-linepromptisusedtomakeiteasiertocutandpastethechallengetoalocalwindow.It'snotasprettyasthedefaultbutsomepeoplefinditmoreconvenient.Thisflagisoffbydefault.
(译注:
这一段我还没读懂,贴原文上来吧)
ignore_dot
如果设置(为on)的话,sudo将会忽略PATH环境变量中的'.'或者''(就是当前目录).PATH本身不会被修改.这个标志默认是on.
mail_always
每当有用户使用sudo时就给mailtouser发送一封邮件.此标志默认是off.
mail_badpass
当用户使用sudo但是却输入了错误的口令时将给mailtouser发送一封邮件.此标志默认是off.
mail_no_user
如果使用sudo的用户在sudoers中没有记录的话将给mailtouser发送一封邮件.此标志默认为on.
mail_no_host
如果使用sudo的用户在sudoers中有记录,但是他不被永许在正在使用的主机上使用sudo,将给mailtouser(请查看"可以用在布尔上下文中的字符串"一节)发送一封邮件.此标志默认为off.
mail_no_perms
如果用户有使用sudo的权限,但是他试图用sudo使用的命令在sudoers中没有列出来,那么给mailtouser发送一封邮件.此标志默认为off.
tty_tickets
如果设置(为on)的话,用户必须使用基于终端(tty)的的验证方法.一般的,sudo在ticketdir里使用一个与执行sudo的用户同名的目录.这个标志设置后,sudo将在那个目录中使用一个与执行sudo的用户登录tty同名的文件.此标志默认为on.
lecture
如果设置(为on)的话,初次使用sudo的用户将收到一个简短的lecture.此标志默认为on.
authenticate
如果设置(为on)的话,用户在用sudo执行命令之前必须通过口令(或者通过其他的方式)来验证身分.这个默认选项可以通过设置PASSWD和NOPASSWD标签(tags)来覆盖.此标志默认为on.
root_sudo
如果设置(为on)的话,root也将被永许使用sudo.将此标志设置为off来阻值用户通过使用类似于"sudosudo/bin/sh"这样的连锁sudo命令来获得一个root权限的shell.此标志默认为on.
log_host
如果设置(为on)的话,主机名将被记录在sudo的日志文件(不是系统日志)中.此标志默认为off.
log_year
如果设置(为on)的话,四位的年份将被记录在sudo的日志文件(不是系统日志)中).此标志默认为off.
shell_noargs
如果设置(为on)并且sudo并未带任何参数执行的话,sudo的表现就象是带-s选项一样.也就是说,将会以root身分运行一个shell(如果SHELL环境变量被设置的话,这个shell就是SHELL定义的shell,否则,将运行用户/etc/passwd中项的shell字段定义的shell).此标志默认为off.
set_home
如果设置(为on)并且sudo是带-s选项执行的话,HOME环境变量将被设置为目标用户(targetuser)(除非sudo使用了-u选项,目标用户就是root)的主目录.这实际上使-s选项包含了-H选项.此标志默认为off.
always_set_home
如果设置(为on)的话,sudo将把HOME环境变量设置为目标用户(targetuser)(除非sudo使用了-u选项,目标用户就是root)的主目录.这实际上意味着-H选项总是被包含.此标志默认是off.
path_info
一般来说,如果一个命令不能在PATH环境变量中找到的话,sudo将会告诉用户.但是某些站点可能会希望禁止这个特性.因为这可以用来收集一些关于普通用户没有权限执行的命令的位置的信息.不利之处在于,如果命令只是不在用户的PATH中的话,sudo将告诉用户他们不被永许执行这些命令,这可能会把人高糊涂.此标志默认是off.
preserve_groups
默认地,sudo会初始化目标用户(targetuser)所在组列表的组向量(译注:
原文是Bydefaultsudowillinitializethegroupvectortothelistofgroupsthetargetuserisin.)preserve_groups设置后,用户已存在的组向量将被保存不变.真实组ID和有效组ID仍然会被设置与目标用户相匹配.此标志默认是off,
fqdn
如果您想在sudoers中使用完整主机名的话,请设置此项.例如:
使用myhost.mydomain.edu来替代myhost.设置后如果原意的话您也可以使用短格式(甚至把两种格式混合起来使用).注意,打开fqdn标志需要让sudo进行DNS解析,而如果DNS停止工作(例如机器没有连入网络)的话会导致sudo无法使用.同时需要注意的是,您必须使用DNS知道的主机正式名称,也就是说您不能使用主机的别名(CNAMEentry),因为您无法从DNS处得到所有的别名.如果您机器的主机名(就是hostname命令的输出)已经是完整格式,您就不需要设置fqdn.此标志默认是off.
insults
如果设置(为on)的话,sudo将会侮辱(insult)输入错误口令的用户(译注:
这也可以?
:
p).此标志默认为off.
requiretty
如果设置(为on)的话,sudo仅仅在用户从一个真正的tty上登录时才会执行.这将不永许像"rshsomehostsudols"这样的命令,因为rsh并不分配一个tty.因为当没有tty存在时无法关闭echo,所以一些站点可能会希望设置这个标志来阻止用户输入可见(回显)的口令.此标志默认为off.
env_editor
如果设置(为on)的话,visudo将使用在EDITOR或者VISUAL环境变量中定义的编辑器,如果EDITOR和VISUAL都没有定义的话将使用默认的编辑器列表.注意,这可能造成一个安全漏洞,因为这永许用户以root身份运行任意的命令而不被日志记录.一个安全的变通方法是在editor(见下面的"字符串"小节)中保存一个用冒号分隔的编辑器列表.这样visudo将仅仅使用EDITOR或者VISUAL中定义的编辑器-----如果它们和editor列表中的某个项目匹配的话.
rootpw
如果设置(为on)的话,sudo将提示输入root的口令而不是执行sudo命令的用户的口令.此标志默认为off.
runaspw
如果设置(为on)的话,sudo将提示输入由runsa_default选项定义的用户(默认为root)的口令而不是执行sudo命令的用户的口令.此标志默认为off.
targetpw
如果设置(为on)的话,sudo将提示输入由sudo的-u选项指定的用户(默认为root)的口令而不是执行sudo的用户的口令.此标志默认为off.
set_logname
一般地,sudo将把LOGNAME和USER环境变量设置为目标用户(除非使用了-u选项的话,就是root)的名字.但是,因为一些程序(包括RCS版本控制系统)使用LOGNAME来确认用户的真实身份,它可能想要改变这种行为,这可以通过取消set_logname选项来实现.
stay_setuid
一般地,当sudo执行一个命令时,真实UID和有效UID都被设置为目标用户(默认是root)的UID.这个选项改变了这种行为,它把真实UID保留为执行sudo的用户的UID.换句话说,这使sudo成为了一个setuid程序.这在那些当setuid程序运行时禁用一些有潜在危险的功能的系统上会很有用.尽管如此,请注意这意味着sudo运行时的真实UID将是执行sudo命令的用户的UID,这可能会允许用户在能够在日志中记录下一个failure之前杀死sudo,这倚赖于您的操作系统如何定义信号和setuid进程之间的相互作用.
env_reset
如果设置(为on)的话,sudo将把环境重置为只包含下列变量:
HOME,LOGNAME,PATH,SHELL,TERM和USER(此外还有SUDO_*).在这些变量中,只有TERM保留原环境中的值不变,其他的变量都被设置为默认值(值可能被set_logname选项修改).如果sudo编译时加入了SECURE_PATH选项,它的值将被作为PATH环境变量的值.其他的变量可以由设置env_keep选项来保存.
use_loginclass
设置(为on)的话,sudo将执行对目标用户的登录类指定的默认动作----如果存在的话.此选项仅仅在sudo配置时带有--with-logincap选项时才存在.此标志默认是off.
整数
passwd_tries
sudo向日志中写入一个failure并退出之前允许用户输入口令的次数,默认为3.
可以用在布尔上下文中的整数(integersthatcanbeusedinabooleancontext)
loglinelen
日志文件每行中的字母数.这个值用来决定日志文件中什么时候折行.这个选项仅影响sudo的日志,而对系统日志文件没有影响.默认值为80(使用0或者取消此选项来禁止折行).
timestamp_timeout
sudo再次询问口令之前逝去的时间(以分钟记).默认值为5.如果想要总是询问口令的话请把此值设置为0.如果设置为负数的话,用户的时间戳永远不会过期.这可以用来允许用户分别使用sudo-v和sudo-k来建立或者删除他们自己的时间戳.
passwd_timeout
sudo的口令询问超时时间(分钟记).默认为5.设置为0可以取消口令超时.
umask
执行命令时使用的umask值.要保留用户的umask值的话请取消此选项或者设置为0777.此选项的默认值为0022.
字符串
mailsub
发送给mailtouser的邮件使用的主题.转义字符%h将被扩展为机器的主机名.默认值为"***SECURITYinformationfor%h***".
badpass_message
当用户输入了错误的口令时显示的信息.除非设置了insults的话,默认值将为"Sorry,tryagain."
timestampdir
sudo存储时间戳文件的目录.默认值为/var/run/sudo
passprompt
询问口令时的提示.可以被sudo的-p选项或者SUDO_PROMPT环境变量所覆盖.这里提供了两个转义字符:
%u将被扩展为用户的登录名,而%h将被扩展为本地主机名.此选项的默认值为"Password:
".
runas_default
使用sudo但没有指定-u标志时使用的默认用户.默认为root
syslog_goodpri
用户身份验证成功时使用的系统日志优先级.默认为notice
syslog_badpri
用户身份验证成功时使用的系统日志优先级.默认为alert
editor
用冒号分隔开的一个允许visudo使用的编辑器列表.可能的话visudo将选择使用和用户的USER环境变量相匹配的那个编辑器,或者是列表中的第一个存在且可执行的编辑器.默认值为您系统中vi编辑器的路径.
可以用在布尔上下文中的字符串(stringsthatcanusedinabooleancontext)
logfile
sudo日志(不是系统日志)的存放位置.设置一个路径来打开日志功能,取消设置将关闭日志功能.(Setingapathturnsonloggingtoafile;negatingthisoptionturnsitoff.)
syslog
如果起用了syslog的话将使用的系统日志设施(取消此选项来禁用系统日志记录)(译注:
原文为:
Syslogfacilityifsyslogisbeingusedforlogging(negatetodisablesysloglogging)).默认为arthpriv.
mailerpath
用来发送报警邮件的邮件程序的路径.默认值是sendmail的路径.
mailerflags
使用邮件程序时的标记,默认为-t.
mailto
发送报警邮件和错误邮件的目的地址.这个地址必须用双引号引起来,以免sudo解释"@"符号.默认值为root.
exempt_group
在此组中的用户将不要求口令和PATH.此选项默认没有设置.
verifypw
此选项控制当用户使用带有-v选项的sudo时,何时要求口令.它可以有下面可能的值:
all:
当前主机上sudoers中所有的用户条目都必须设置NOPASSWD标志来避免输入口令.
any:
当前主机上sudoers中至少有一个用户条目必须设置NOPASSWD标志来避免输入口令.
never:
用户使用-v标志但从不需要输入口令.
always:
用户使用-v标志但总是需要输入口令.
默认的值是"all".
listpw
此选项控制当用户使用带有-l选项的sudo时,何时要求口令.它可以有下面可能的值:
[size=2]all:
[/size当前主机上sudoers中所有的用户条目都必须设置NOPASSWD标志来避免输入口令.
any:
当前主机上sudoers中至少有一个用户条目必须设置NOPASSWD标志来避免输入口令.
never:
用户使用-l标志但从不需要输入口令.
always:
用户使用-l标志但总是需要输入口令.
默认值为"any".
可以在布尔上下文中使用的列表(liststhatcanbeusedinabooleancontext)
env_check
如果含有"%"或者"/"字符的话将从用户的环境中删除的环境变量.这将预防拙劣的程序中printf风格的格式所带来的伤害.这个参数可以是一个用双引号引起,由空格分隔的列表,或者是一个不带引号的单值.这