概述
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都沒填的話,默認是以root用戶執行
如果不是很理解的話,可以對比著文章後面舉的例子來看下,應該難不倒聰明的我們!