sudo工具能够帮你把一部分系统管理的责任分摊给其他人,还不用给出完全的root访问权限。它是一个setuid程序,只需要输入用户自己的密码,就可以执行sudo后面的命令。
使用root帐号,运行/usr/bin/visudo 来编辑那些用户可以调用sudo命令的用户列表,缺省的sudo列表看上去类似下面这样:
很不幸,很多系统管理直接把这条当作了模板,然后授权给其他用户,就像这样:
work ALL=(ALL) ALL
test ALL=(ALL) ALL
上面这种模式使得work和test帐号具有完全的root权限,还不需要root帐号的密码。如果你授权的这些帐号如果是完全可信赖的,那这是一个不错的方法,可惜,信赖并不是那么说的清楚。
因此我们需要按照最小原则来给特定的帐号授权,我们先看看sudo列表文件的语法,在sudo列表里,每一行应该是下面这个样子:
第一列(user)指定要授权的帐号。第二列(machine)定义在那些机器上,这条执行生效,其好处是在多台机器上使用同一份配置文件。
举个例子,假设有一个开发人员需要在开发服务器上获得root访问权限,在其他服务器上就不行,那么我们这样做
第三列(就是括号里的effective user)指定实际执行该命令的帐号,这就方便一个帐号允许用另外一个帐号来执行特定的命令,而不非得是root帐号:
最后一列(command)指定所以这个帐号看可以在sudo环境下执行的指令:
如果你觉得在指定用户或者机器或者命令时列表太长(比如很多帐号授权相同,一个帐号需要指定的命令和机器列表过长),我们可以使用sudo列表里Alias语法,Alias的语法和shell环境变量中alias类似,你可以看成是一个变量:
User_Alias WEBMASTERS=xplore,glemir,xinhe
Runas_Alias DAEMONS=bind,www,ftp
Host_Alias WEBSERVERS=www.xplore.cn,www.lawburn.com
Cmnd_Alias PROCS=/bin/kill,/bin/killall,/usr/bin/skill,/usr/bin/top
Cmnd_Alias APACHE=/usr/bin/apachectl
WEBMASTERS WEBSERVERS=(www) APACHE
ADMINS ALL=(DAEMONS) ALL
以上都是针对帐号的,其实第一列中也可以指定组帐号,表示允许所有属于这个组的帐号都获得这样的授权,语法上,只需要在组帐号之前加上一个%号,就像这样:
现在,属于mail组的帐号都可以在WEBSERVERS定义的服务器上用mail帐号来执行sendmail指令。
除此之外,还有一个有用的标志,那就是NOPASSWD: 。如果设置了这个标志,表示当前授权的帐号执行后面的帐号不需要输入当前帐号的密码:
这允许帐号xplore可以用任何帐号执行kill,killall,skill和top指令,还不用输入密码。
原创文章,作者:奋斗,如若转载,请注明出处:https://blog.ytso.com/110907.html