Linux基础——sudoers文件的写法

<

div id=”content” contentScore=”603″>

概述

sudoers文件的作用是控制用户可以执行哪些指令。它是Linux系统管理员的重要一课喔。 

文件的组成

sudoers文件由三部分组成: 

  • sudoers的默认配置,主要设置sudo的一些缺省值(本文不会对这些默认配置进行介绍,若有兴趣可以自己man 5 sudoers然后搜defaults)
  • alias(别名),可以看作是变量的定义啦,本文也会全面的说说别名的定义。
  • 规则定义,sudoers文件的重点啦,本文会着重说明规则的定义。 

Alias(别名)

一共有四种类型的别名,这些类型可以看作它们是数据类型啦哈。
  • User_Alias
  • Runas_Alias
  • Host_Alias
  • Cmnd_Alias
那么要如何定义这些Alias呢?语法如下:
User_Alias NAME=User_List
Runas_Alias NAME=Runas_List
Host_Alias NAME=Host_List
Cmnd_Alias NAME=Cmnd_List
 
这里的NAME就可以看作是变量名咯。注意,NAME必须是要以大写字母开头,而且只能包含有大写字母,数字,下划线呢。那么User_List,Runas_List,Host_List,Cmnd_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:[!][commandname| directory| “sudoedit” | Cmnd_Alias]
 
看看上面的元素名就可以知道大概什么意思了吧?这里着重拿些可能有疑问的出来说说。
叹号’!’表示取反的意思啦。
每个元素都可以是之前定义过的别名变量啦,所以会有User_List,Runas_List,Host_List,Cmnd_List这些元素啦。
directory表示有可以进入该目录并执行命令的权限啦
“sudoedit”表示允许用户使用sudo -e选项。
 
如果还没搞懂的话,可以看下面的别名定义的例子:
User_Alias USER_TEST=tim,#501,%svn,+webgroup,%:nonunix,!nouser
Runas_Alias RUNAS_TEST=tim,#501,%svn,!+webgroup
Host_Alias HOST_TEST=!www.baidu.com,localhost,127.0.0.1
Cmnd_Alias CMND_TEST=Cmnd_Alias CMDS=/bin/passwd,/bin/ls,/home/svn 
 

User Specification(用户规则)

用户规则定义的语法如下:
User_List Host_List=(Runas_List1:Runas_List2) SELinux_Spec Tag_Spec Cmnd_List,…
下面对上面的语法进行说明一下:
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都没填缯div>