sudo:    是一个Linux中管理员赋予普通用户能够临时切换至别的用户权限的一个命令,
一般的应用就是用在普通用户切换至root用户能够执行的命令。
其中 visudo 是一个编辑/etc/sudoers文件的命令,在保存后会检查文件中的错误,所以
一般推荐使用它编辑。

1、etc/sudoers文件中定义的主要内容介绍:

A、别名的使用。
主机别名:Host_Alias    大写主机别名=host1,host2……
用户别名:User_Alias    大写用户别名=user1,user2……
命令别名:Cmnd_Alias    大写命令别名=cmnd1,cmnd2……

B、定义规则。

例:允许所有的用户执行root权限的所有命令。

a.允许使用sudo的用户或者用户组    b.主机来源=c.(可以切换的用户)    d.可以执行的命令的绝对路径

ALL        ALL=(root)        ALL

a.可以是单个用户,可以是用户组("%用户组名称"的方式定义系统中存在的用户组),也可以是大写的
别名记录。
b.主机来源可以是ALL、localhost等。
c.可以切换的用户名,或者ALL。
d.命令的绝对路径是为了安全,同时一般用户可能用不上/sbin,/usr/sbin下面的管理员命令,所以在定义
的时候要写入命令的绝对路径。

C、sudo -u 用户名 命令语句:
作用是切换到该用户名的权限下执行该命令。其中值得注意的是,用户名不仅限于root
账户,也可以是其他账户,但是实际应用过程中一般使用的还是临时切换为root执行的
权限,如果要切换至非root账户的话,可以在定义规则的c项上指定要切换的某些用户。

2、使用要点及方法:
a.其实主要的使用还是规则上定义的内容,修改/etc/sudoers文件直接使用visudo就可以了,默认修改的
就是该文件。如user1能够使用root的passwd命令来更改除root以外用户的密码(本来是user1只能更改自
己的密码)。

user1    ALL=(root)    !/usr/bin/passwd,/usr/bin/passwd [A-Za-z]*,!/usr/bin/passwd root

这里要注意的是:如果命令项是直接使用/usr/bin/passwd,那么user1就可以切换到root,甚至可以
修改root的密码。所以

第一个是不允许执行其他用户执行
sudo passwd 空(默认为root)。

第二个如果前面去掉[]部分,那么*也代表空,可以执行第一个命令,尽管第一个指定了不能执行,但是
!/usr/bin/passwd * 却能够实现第一种方式更改root密码,这是很不安全的,这里的一个缺点就是用户
名的第一个字母只能是字母,如果为其他字符开头,那么该授权使用sudo passwd的用户将不能更改除
字母开头以外的用户的密码。

第三个是不允许执行sudo passwd root。

b.扩展的一种用法是结合别名使用,避免单个定义增加管理难度。
如:user1,user2,user3都能使用root的passwd 命令来更改除root以外用户的密码。

User_Alias    USER=user1, user2, user3
Cmnd_Alias    CMND=!/usr/bin/passwd,/usr/bin/passwd [A-Za-z]*,!/usr/bin/passwd root
User_Alias    ALL=(root)    CMND

#########
为自己信任的人授予临时切换至管理员权限:
visudo

User_Alias ADMIN=trust1,trust2
ADMIN ALL=(root) /bin/su

优点:可以让信任的用户切换至root身份,而且切换的时候使用的是他们自己的密码,root密码不会泄露。
#########