sudo配置文件/etc/sudoers深入介绍

简介

sudo命令对应的用户权限授权配置文件为/etc/sudoers,我们可以使用专用工具visudo来完成有关sudo的授权管理配置,使用visudo工具的好处是在添加规则之后,保存退出时会检查授权配置的语法(这一点很重要,曾经有人直接用vi编辑/etc/sudoers,最后配置发生了错误,造成所有普通用户都无法通过sudo执行命令以及切换到超级root上了)。

/etc/sudoers配置语法注意事项

❏命令别名下的成员必须是文件或目录的绝对路径。
❏别名名称包含大写字母、数字、下划线等,如果是字母则都要大写。
❏一个别名下包含多个成员,成员与成员之间,通过半角“,”号进行分隔;成员必须是有效且实际存在的。
❏别名成员受别名类型Host_Alias、User_Alias、Runas_Alias、Cmnd_Alias的制约,定义什么类型的别名,就要有什么类型的成员与之相配。
❏别名规则是每行算一个规则,如果一行容不下,则可以通过“\”来续行。
❏指定切换的用户要用“()”(括号)括起来。如果省略括号,则默认为root用户;如果括号里是ALL,则代表能够切换到所有用户。
❏如果希望不需要密码就直接运行命令,则应该加上“NOPASSWD:”参数。
❏若想禁止某类程序或命令执行,则要在命令动作前面加上“!”号,并且放在允许执行命令的后面。
❏用户组前面必须加“%”号。

/etc/sudoers配置文件别名知识

sudoers文件中的别名类型(Alias_Type)包括如下四种。

1)Host_Alias,表示定义主机别名,实际配置语法如下:
sudo配置文件/etc/sudoers深入介绍_第1张图片
关于Host_Alias的说明具体如下。
❏在生产场景中,一般不需要设置主机别名,在定义授权规则时可以通过ALL来匹配所有的主机。
❏请注意上面定义的规范,有些规范虽然不是必需的,但最好能够按照系统的标准来进行配置,这样可以避免意外问题的发生。
❏其实,主机名就是一个逻辑上的主机组,当多台服务器共享一个/etc/sudoers的时候就会用到这个主机别名。不过,在实际企业运维中,这个需求几乎是不存在的。

在sudo实际授权语法规则配置时,第一个ALL的位置就是主机别名的配置位置,示例代码如下:
在这里插入图片描述
2)User_Alias,表示定义用户别名,别名成员可以是用户、用户组(用户组前面要加“%”号),实际配置语法如下:
sudo配置文件/etc/sudoers深入介绍_第2张图片
3)Runas_Alias,表示定义runas别名,这个别名指定的是授权的“用户身份”,即sudo允许切换到的用户身份。

Runas_Alias定义的是可以执行sudo命令身份的用户,实际配置语法如下:
在这里插入图片描述
实际工作中都是普通用户需要转换到root身份,普通用户之间权限相同,极少有授权其他普通用户身份的需求。

4)Cmnd_Alias,表示定义命令别名,命令别名就是定义一个别名,然后别名里面包含一堆命令,即一组相关命令的集合,实际配置语法如下:
sudo配置文件/etc/sudoers深入介绍_第3张图片

别名和授权规则配置语法对应关系说明

在/etc/sudoers配置文件中,别名和配置语法的对应关系见下表。

/etc/sudoers配置文件中别名和配置语法的对应关系
sudo配置文件/etc/sudoers深入介绍_第4张图片
在企业运维工作中,什么情况下会使用到别名知识?解答:当工作中有很多台服务器,每台服务器又包含多个系统用户,需要对用户权限进行严格管理(关键命令的使用)、分层授权管理用户的时候。

利用别名配置授权实践案例

1.根据管理员管理功能,定义多个用户别名

1)定义系统管理用户别名为ADMINS,包含成员oldboy、ett及sa组的成员,命令如下:
在这里插入图片描述
2)定义用户别名NETADMINS来管理网络,包含成员leo和maya,命令如下:
在这里插入图片描述
3)定义用户别名USERADMINS来管理系统用户,包含成员zuma,命令如下:在这里插入图片描述
说明:为了方便管理,应尽可能使用有意义的名称作为别名,定义时使用大写字符串。另外,所有定义的用户及用户组内包含的用户成员都必须是系统中存在的用户或存在的组。

4)检查并创建上述用户及用户组(用户和用户组都必须存在),自行创建查询。

2.根据命令的功能分类定义命令别名

1)定义命令别名USERCMD,包含管理系统用户的相关命令,命令如下:
sudo配置文件/etc/sudoers深入介绍_第5张图片
2)定义命令别名DISKCMD,包含管理系统磁盘的相关命令,命令如下:
在这里插入图片描述
3)定义命令别名NETMAGCMD,包含管理系统网络的相关命令,命令如下:
在这里插入图片描述
说明:
1)所有命令别名下的命令都必须使用绝对路径。
2)命令别名超过一行时,可以通过“\”号换行续写。
3)在定义时,可以使用通配符及正则表达式,例如,/usr/bin/passwd[A-Za-z]*。

3.定义授权用户的别名

runas别名定义的示例代码如下:
在这里插入图片描述
说明:runas别名的定义并不多见,且不常用,因为多数都是需要root身份就够了,默认ALL也可以。

4.根据别名配置对应的sudo授权规则

1)管理员别名(ADMINS)可以授权所有命令通过sudo进行管理,示例代码如下:
在这里插入图片描述
2)用户管理员别名(USERADMINS)可以授权与用户命令别名对应的命令通过sudo进行管理,示例代码如下:
在这里插入图片描述
3)网络管理员别名(NETADMINS)可以授权与网络命令别名对应的命令通过sudo进行管理,示例代码如下:
在这里插入图片描述

你可能感兴趣的:(linux,运维,linux,centos)