在Linux系统中普通用户在使用系统资源时相对于root超级用户会有很多的限制。例如,切换到普通用户身份下挂载光驱,会报如下错误,如下图所示。
这是因为在Linux中,很多系统管理命令普通用户是无权使用的,若想允许特定用户执行某些特定的系统管理命令,就需要对普通用户授权。使其能执行特定的系统管理命令。如上述的普通用户“moon”,若允许其执行挂载光盘的命令,就需要对“moon”用户授予执行挂载光盘命令的权限。为了区分普通用户执行的是普通操作命令还是得到授权的系统管理命令,Linux系统中对普通用户执行的命令进行了划分,执行普通操作命令时,直接输入命令;执行得到授权的系统管理命令时,命令前加sudo。如上述“moon”用户得到挂载光盘的授权,其执行下列命令即可挂载光盘:
[moon@centos7-1 ~]$sudo mount /dev/cdrom /media
因此,通俗的称这种授权为sudo授权。
保存sudo授权的配置文件是/etc/sudoers。对该文件进行更改,即是sudo授权。但Linux不允许直接对该文件进行修改,而是提供了专用于修改该文件的操作命令visudo。root用户使用visudo命令编辑更改/etc/sudoers文件。
(1)配置sudo授权
sudo授权的步骤如下。
①输入su - root,切换到用户root下。
②使用visudo命令打开sudo编辑界面对/etc/sudoers文件进行编辑,如下图所示。
输入visudo后会呈现如下图左侧窗口的内容,可以开始编辑。visudo命令和vim命令使用方式方法相同。移动光标,找到下图左侧所示的内容。
图示中语句root ALL=(ALL) ALL表示允许用户root在任何主机(包括本机)上执行所有命令,在这一行语句的下添加满足以下格式的一行语句即可。
语句格式如下:
用户 主机名=(以哪个用户的身份) 命令的绝对路径
图中红框内的内容是新增加的配置。
zhang centos7-1=(root) /usr/bin/mount,/usr/bin/umount 表示给用户zhang进行sudo授权,允许其在centos7-1主机上以root的身份执行mount和umount命令。
注意,命令必须使用绝对路径,若对命令的绝对路径不清楚可以使用whereis命令查看。
③保存退出即可。
注意,用visudo命令编辑的是/etc/sudoers配置文件,将授权的普通用户写在该配置文件中可以使该用户运行需要root权限的命令。
(2)验证配置结果
切换到普通用户zhang身份下进行验证,步骤如下。
①切换到用户zhang状态下,输入su - zhang。
②输入命令[zhang@Centos7-1 ~]sudo mount /dev/cdrom /media,会提示输入zhang的密码,验证成功后,则命令成功执行。
普通用户zhang默认没有权限使用mount挂载命令,但root用户通过使用visudo命令配置/etc/sudoers配置文件使用户zhang拥有了使用mount命令的权限(mount命令原本只有root用户才能使用)。只是用户zhang在使用mount命令时,需要在mount命令前面加上sudo命令,表示用户zhang先变身成为root,然后再执行mount命令。如下图所示。
(3)设置命令别名
在修改/etc/sudoers文件进行sudo授权时,还可以把多个命令设置成为命令别名,即把多个命令加入到一个命令集合中,以便将命令集合多次授权给不同的用户使用,简化授权的设置。
设置命令别名的步骤如下。
①编辑/etc/sudoers文件,输入命令visudo(相当于vi /etc/sudoers),然后输入“i”,进入插入模式,开始编辑。
②输入Cmnd_Alias GUAZAI=/usr/bin/mount,/usr/bin/umount,设定命令别名,即把多个命令组成一个命令集。注意,别名必须大写。
③输入zhang centos 7-1=GUAZAI,授予用户zhang执行mount和umount命令的权限。
④输入%g1 centos 7-1=(root) GUAZAI,“%”用于给组授权,表示给组g1的成员授予执行sudo的命令。