系统中不少命令及软件都要求通过root账号权限来执行,root账号权限过大,因此频繁通过root进行系统操作会大大增大误操作的几率。建议为系统管理人员及使用人员建立各自的用户账号,有需要时再通过su命令切换到root账号来进行操作。但是这样做也有一些问题,在实际的管理中,并不是每个用户都需要操作所有与root权限相关的操作。通过su命令切换成root账户意味着要给予用户root账户的密码信息,因此用户完全可以直接使用root账户登录系统,因而也就无法对用户进行独立的管理。

 
1. sudo特性
 
sudo通过更严谨的管理,为用户分配可通过root权限运行的某些特定的命令或软件,同时又避免直接将root用户账号的密码公开给普通用户。
 
主要特点如下:
 
sudo限制指定用户在指定主机上运行某些命令。
 
sudo提供日志,记录每个用户通过sudo进行了哪些操作,并且在服务器中保存记录以便管理审核。
 
sudo允许系统管理员集中地管理用户的权限及使用这些权限时的服务器位置。
 
sudo对root权限的使用时间有严格控制,通过sudo得到root权限后,用户可以在5分钟内使用此权限,时间超出后必须重新进行密码验证。
 
2. sudo基本配置
 
修改文件/etc/sudoers:
 
……  
## Networking  
Cmnd_Alias NETWORKING = /sbin/route, /sbin/ifconfig,
/bin/ping, /sbin/dhclient, /usr/bin/net, /sbin/
iptables, /usr/bin/rfcomm, /usr/bin/wvdial, /
sbin/iwconfig, /sbin/mii-tool  
设定一个名为NETWORKING的命令集以便于权限定义的分类  
 
## Installation and management of software  
Cmnd_Alias SOFTWARE = /bin/rpm, /usr/bin/up2date, /usr/bin/yum  
……  
## Allow root to run any commands anywhere   
root    ALL=(ALL)   ALL  
此处指定root用户可以通过sudo得到所有命令的使用权限  
 
ken localhost=(ALL)     ALL  
指定用户ken可以在主机localhost上通过任何用户权限运行所有命令  
 
%sale ALL=(ALL)     NETWORKING  
指定组sale中的用户可以在任何主机上通过任何用户权限
运行NETWORKING命令集中所有的命令 
3. sudo基本操作
 
[ken@server1 ~]$ /usr/bin/passwd root  
passwd: Only root can specify a user name.  
由于用户ken的权限不够,因此无法通过passwd修改root用户账号的密码  
[ken@server1 ~]$ sudo /usr/bin/passwd root  
 
We trust you have received the usual lecture from the local System  
Administrator. It usually boils down to these three things:  
 
    #1) Respect the privacy of others.  
    #2) Think before you type.  
    #3) With great power comes great responsibility.  
 
Password:在此处输入用户ken的登录密码  
Changing password for user root.   
New UNIX password:   
通过sudo得到root执行权限后,可以对root的密码进行修改 
从以上实例可以看出,一旦passwd命令的sudo运行权限授予了某个用户,此用户就有权通过passwd来对root管理员账号的密码进行修改,从而得到root账号的所有操作权限。在实际生产环境中请注意避免此类情况的发生,严格控制sudo可运行的命令。