CentOS下用好sudo,CentOS用好sudo它是一个setuid


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指令,还不用输入密码。


相关内容

    暂无相关文章