Mar 29

[转]用好sudo 晴

sudo工具能够帮你把一部分系统管理的责任分摊给其他人,还不用给出完全的root访问权限。它是一个setuid程序,只需要输入用户自己的密码,就可以执行sudo后面的命令。

使用root帐号,运行/usr/bin/visudo 来编辑那些用户可以调用sudo命令的用户列表,缺省的sudo列表看上去类似下面这样:
引用
root ALL=(ALL) ALL

很不幸,很多系统管理直接把这条当作了模板,然后授权给其他用户,就像这样:
引用
root ALL=(ALL) ALL
work ALL=(ALL) ALL
test ALL=(ALL) ALL

上面这种模式使得work和test帐号具有完全的root权限,还不需要root帐号的密码。如果你授权的这些帐号如果是完全可信赖的,那这是一个不错的方法,可惜,信赖并不是那么说的清楚。
因此我们需要按照最小原则来给特定的帐号授权,我们先看看sudo列表文件的语法,在sudo列表里,每一行应该是下面这个样子:
引用
user machine=(effective user) command

第一列(user)指定要授权的帐号。第二列(machine)定义在那些机器上,这条执行生效,其好处是在多台机器上使用同一份配置文件。
举个例子,假设有一个开发人员需要在开发服务器上获得root访问权限,在其他服务器上就不行,那么我们这样做
引用
steven beta.xplore.cn=(ALL) ALL

第三列(就是括号里的effective user)指定实际执行该命令的帐号,这就方便一个帐号允许用另外一个帐号来执行特定的命令,而不非得是root帐号:
引用
steven mail.xplore.cn=(mailman) ALL

最后一列(command)指定所以这个帐号看可以在sudo环境下执行的指令:
引用
kevin ns.xplore.cn =(bind) /usr/sbin/rndc,/usr/sbin/named

如果你觉得在指定用户或者机器或者命令时列表太长(比如很多帐号授权相同,一个帐号需要指定的命令和机器列表过长),我们可以使用sudo列表里Alias语法,Alias的语法和shell环境变量中alias类似,你可以看成是一个变量:
引用
user_Alias ADMINS=wgzhao,kevin,steven
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

现在,属于mail组的帐号都可以在WEBSERVERS定义的服务器上用mail帐号来执行sendmail指令。

除此之外,还有一个有用的标志,那就是NOPASSWD: 。如果设置了这个标志,表示当前授权的帐号执行后面的帐号不需要输入当前帐号的密码:
引用
xplore ALL=(ALL) NOPASSWD: PROCS

这允许帐号xplore可以用任何帐号执行kill,killall,skill和top指令,还不用输入密码。
Tags: ,
afeng
2009/05/28 16:09
这个很好,很实用。谢谢了
分页: 1/1 第一页 1 最后页
发表评论
表情
emotemotemotemotemot
emotemotemotemotemot
emotemotemotemotemot
emotemotemotemotemot
emotemotemotemotemot
打开HTML
打开UBB
打开表情
隐藏
记住我
昵称   密码   游客无需密码
网址   电邮   [注册]