linux /etc/sudoers文件使用

时间:2021-05-15 02:41:40

一、命令sudo

当用户执行sudo时,系统会主动找/etc/sudoers文件,判断该用户是否有执行sudo权限,确认有权限则让用户输入自己的密码确认,接着就执行sudo后的命令。

在/etc/sudoers文件里可以看到 root ALL=(ALL) ALL,root用户可以不输入密码执行sudo后的命令;/etc/sudoers文件可以为用户授予权力。

二、/etc/sudoers文件的编辑

使用visudo命令对文件进行编辑,它会帮你校验文件配置是否正确,如果不正确,在保存退出时就会提示你哪段配置出错。

visudo -c 检查语法错误

-q 不打印语法等错误

-f 指定sudoers文件

三、四中类型别名

User_Alias

Runas_Alias

Host_Alias

Cmd_Alias

可以将这些类型看成数据类型,用来定义变量,如:

User_Alias NAME=User_List   

Runas_Alias NAME=Runas_List

HOST_Alias NAME=Host_List

Cmnd_Alias NAME=Cmnd_List

NAME为变量名,必须以大写字母开头,而且只能包含大写字母,数字,下划线;User_List是一个以“,”分开的数组。

现在分别看看User_List,Runas_List,Host_List,Cmnd_List的每个数组元素可以是些什么值吧!
User:[ !][ username | #uid | %groupname | +netgroup | %:nonunix_group | User_Alias]
Runas:[ !][ username| #uid | %groupname |  +netgroup | Runas_Alias]
Host:[ !][ hostname ip_addr |  network(/netmask)? |  netgroup |  Host_Alias]
Cmnd:[ !][ commandnamedirectory"sudoedit" |  Cmnd_Alias]
四、用户规则(User Specification)

用户规则定义的语法如下:
User_List Host_List=(Runas_List1:Runas_List2) SELinux_Spec Tag_Spec Cmnd_List,...
同样有
user MACHINE=COMMANDS
用户 登录的主机=(可变换的身份)(控制命令的选项)可执行的命令
下面对上面的语法进行说明一下:
User_List(必填项):指的是该规则是针对哪些用户的。
Host_List(必填项):指的是该规则针对来自哪些主机的用户。
Runas_List1(可选项):表示可以用sudo -u来切换的用户
Runas_List2(可选项):表示可以用sudo -g来切换的用户组
SELinux_Spec(可选项):表示SELinux相关的选项,可选值为ROLE=role 或 TYPE=type。本人对SELinux不太熟,以后再补充这里吧。
Tag_Spec(可选项):用于控制后面Cmnd_List的一些选项啦,可选值有下面这些,具体自己man一下吧,这里就不啰嗦了。

'NOPASSWD:' | 'PASSWD:' | 'NOEXEC:' | 'EXEC:' | 'SETENV:' | 'NOSETENV:' | 'LOG_INPUT:' | 'NOLOG_INPUT:' | 'LOG_OUTPUT:' | 'NOLOG_OUTPUT:'

...(可选项):表示可以有多个(Runas_List1:Runas_List2) SELinux_Spec Tag_Spec Cmnd_List段的意思了。

Notice:如果Runas_List1和Runas_List2都没填的话,默认是以root用户执行。