linux系統下的許可權知識梳理

散盡浮華發表於2016-08-30

 

下面對linux系統下的有關許可權操作命令進行了梳理總結,並配合簡單例項進行說明。
linux中除了常見的讀(r)、寫(w)、執行(x)許可權以外,還有其他的一些特殊或隱藏許可權,熟練掌握這些許可權知識的使用,可以大大提高我們運維工作的效率。

(0)umask是許可權碼,預設是022--------------------------------------------------                  
使用命令"umask"就能查詢出來

檔案預設的許可權是666,目錄預設的許可權是777
新建檔案和目錄的許可權分別是各自預設許可權減去umask許可權碼值

即:
新建檔案許可權,666-022=644
新建目錄許可權,777-022=755

(1)chmod,chown,chgrp-------------------------------------------------------------------

chmod 設定數字許可權4,2,1,分別對應的是r,w,x,即可讀,可寫,可執行。 對目錄設定許可權時,可以加-R遞迴引數
[root@localhost src]# chmod 755 test.txt
[root@localhost src]# ll test.txt
-rwxr-xr-x. 1 root root 0 Nov 3 16:33 test.txt
[root@localhost src]# chmod 700 test.txt
[root@localhost src]# ll test.txt
-rwx------. 1 root root 0 Nov 3 16:33 test.txt
[root@localhost src]# chmod 775 -R huanqiu
[root@localhost src]# ll huanqiu
total 4
-rwxrwxr-x. 1 root root 4 Nov 3 17:30 test.txt


chown 設定字元許可權,預設表示所屬者許可權
chgrp 表示所屬組許可權

通常我們可以直接用chown設定所屬者和所屬者

比如給a檔案授權所屬者是wangshibo,所屬組是wutao,做法如下:
[root@localhost src]# ll test.txt
-rwx------. 1 root root 0 Nov 3 16:33 test.txt
[root@localhost src]# chown wangshibo test.txt
[root@localhost src]# ll test.txt
-rwx------. 1 wangshibo root 0 Nov 3 16:33 test.txt
[root@localhost src]# chgrp wangshibo test.txt
[root@localhost src]# ll test.txt
-rwx------. 1 wangshibo wangshibo 0 Nov 3 16:33 test.txt

也可以直接使用chown設定
[root@localhost src]# chown wangshibo.wangshibo test.txt [或者chown wangshibo:wangshibo test.txt]
[root@localhost src]# ll test.txt
-rwx------. 1 wangshibo wangshibo 0 Nov 3 16:33 test.txt

---------------------------------------------------------------------------------------------------
root賬號在普通使用者家目錄下建立的檔案,預設該檔案的所有者和所屬組許可權是root。
1)此普通使用者不能使用echo命令覆蓋和追加檔案。
2)但是該使用者對此檔案有有直接vim編輯的許可權,並且編輯後,檔案的所有者和所屬組許可權就變成普通使用者的了。
如下:
[root@ops-server4 ~]# cd /home/wangshibo/
[root@ops-server4 wangshibo]# vim test
[root@ops-server4 wangshibo]# cat test
123456
[root@ops-server4 wangshibo]# ll
total 4
-rw-r--r--. 1 root root 7 Dec 3 10:47 test

[wangshibo@ops-server4 ~]$ echo "wangshibo" >> test
-bash: test: Permission denied
[wangshibo@ops-server4 ~]$ echo "wangshibo" > test
-bash: test: Permission denied
[wangshibo@ops-server4 ~]$ vim test
[wangshibo@ops-server4 ~]$ ll
total 4
-rw-r--r--. 1 wangshibo wangshibo 15 Dec 3 10:48 test
[wangshibo@ops-server4 ~]$ cat test
123456
wangshibo
---------------------------------------------------------------------------------------------------

(2)chattr隱藏許可權,這個很重要!!!通常用於鎖定檔案----------------------------------------

有時候你發現用root許可權都不能修改某個檔案,大部分原因是這個檔案曾經使用chattr命令鎖定了。
chattr命令的作用很大,其中一些功能是由Linux核心版本來支援的。
通過chattr命令修改屬效能夠提高系統的安全性,但是它並不適合所有的目錄。

chattr命令不能保護/、/dev、/tmp、/var目錄。
lsattr命令是顯示chattr命令設定的檔案屬性。
這兩個命令是用來檢視和改變檔案、目錄屬性的,與chmod這個命令相比,chmod只是改變檔案的讀寫、執行許可權,更底層的屬性控制是由chattr來改變的。

chattr在使用時一般常用到兩個引數:i和a
chattr +i 表示只有檢視檔案許可權,其他諸如刪除,修改,更名等許可權統統沒有!
chattr +a 表示除了檢視檔案許可權外,還可以echo命令(是echo >>,不能echo >覆蓋)追加檔案內容的許可權(不能直接vim進行編輯),其他諸如刪除,修改,更名等許可權統統沒有!

chattr -i或chattr -a 表示刪除這個引數許可權

案例說明1:---針對檔案
如下,給檔案test.txt檔案設定+i許可權後,就等於鎖定了這個檔案。任何使用者(包括root)都不能操作這個檔案了。
[root@localhost src]# touch test.txt
[root@localhost src]# chattr +i test.txt
[root@localhost src]# lsattr test.txt
----i----------- test.txt
[root@localhost src]# cat test.txt
123
[root@localhost src]# echo "asdfs" > test.txt
-bash: test.txt: Permission denied
[root@localhost src]# rm -f test.txt
rm: cannot remove ‘test.txt’: Operation not permitted

設定+a許可權,除了檢視之外,就只能echo追加內容(是追加,而不是覆蓋),其他操作都幹不了!
[root@localhost src]# chattr -i test.txt
[root@localhost src]# chattr +a test.txt
[root@localhost src]# lsattr test.txt
-----a---------- test.txt
[root@localhost src]# cat test.txt
123
[root@localhost src]# echo "asdfs" > test.txt
-bash: test.txt: Operation not permitted
[root@localhost src]# echo "asdfs" >> test.txt
[root@localhost src]# cat test.txt
123
asdfs
[root@localhost src]# rm -f test.txt
rm: cannot remove ‘test.txt’: Operation not permitted
[root@localhost src]#

可以將系統的賬號資訊檔案/etc/passwd和密碼檔案/etc/shadow使用chattr命令鎖定(+ai),這樣後續就不能新增賬號和修改使用者密碼了。

案例說明2:---針對目錄
"chattr -R +i 目錄名" #只能cd切換到該目錄下,對該目錄下的檔案除了檢視許可權,其他的都不能操作
"chattr -R +a 目錄名" #除了cd切換到該目錄下,對於該目錄下的檔案除了檢視許可權,也只能echo追加內容,其他的也都幹不了

注意一點,刪除許可權:
"chattr -ai -R 目錄名" #表示連同目錄下的檔案許可權都刪除了

[root@localhost src]# mkdir huanqiu
[root@localhost src]# echo "123123" > huanqiu/test.txt
[root@localhost src]# chattr -R +i huanqiu
[root@localhost src]# lsattr -R huanqiu
----i----------- huanqiu/test.txt

由於新增許可權的時候加了-R引數,所以這個目錄下的檔案也被鎖定了!
[root@localhost src]# rm -rf huanqiu
rm: cannot remove ‘huanqiu/test.txt’: Permission denied
[root@localhost src]# rm -rf huanqiu/test.txt
rm: cannot remove ‘huanqiu/test.txt’: Permission denied
[root@localhost src]# echo "huhuhu" > huanqiu/test.txt
-bash: huanqiu/test.txt: Permission denied

[root@localhost src]# chattr -R -i huanqiu
[root@localhost src]# chattr -R +a huanqiu
[root@localhost src]# lsattr -R huanqiu
-----a---------- huanqiu/test.txt
[root@localhost src]# rm -rf huanqiu
rm: cannot remove ‘huanqiu/test.txt’: Operation not permitted
[root@localhost src]# rm -rf huanqiu/test.txt
rm: cannot remove ‘huanqiu/test.txt’: Operation not permitted
[root@localhost src]# echo "asdf" > huanqiu/test.txt
-bash: huanqiu/test.txt: Operation not permitted
[root@localhost src]# echo "asdf" >> huanqiu/test.txt
[root@localhost src]#

注意:
如果chattr針對目錄設定+i許可權,不加-R引數時,那麼只針對該目錄有效,目錄下的檔案不受約束!
這種情況下:
目錄不能刪除,不能更名。
目錄下的檔案也不能刪除,不能更名。檔案可以被echo追加、覆蓋內容。vim可以任意修改檔案內容。
[root@localhost src]# chattr -R -ai huanqiu
[root@localhost src]# chattr +i huanqiu
[root@localhost src]# lsattr -R huanqiu
---------------- huanqiu/test.txt                    #可以看出不加-R,目錄下的檔案沒有連帶許可權
[root@localhost src]# rm -rf huanqiu
rm: cannot remove ‘huanqiu/test.txt’: Permission denied
[root@localhost src]# rm -rf huanqiu/test.txt       #由於上一級目錄刪除不了,所以檔案也刪除不了
rm: cannot remove ‘huanqiu/test.txt’: Permission denied
[root@localhost src]# echo "123" > huanqiu/test.txt             #可以修改檔案內容
[root@localhost src]# echo "123sdf" >> huanqiu/test.txt
[root@localhost src]# vim huanqiu/test.txt                    #vim裡可以任意編輯檔案
[root@localhost src]# mv huanqiu huanqiu233
mv: cannot move ‘huanqiu’ to ‘huanqiu233’: Operation not permitted
[root@localhost src]# mv huanqiu/test.txt huanqiu233/haha          #由於上一級目錄被鎖定不能更名,所以目錄下的檔案也不能更名
mv: cannot move ‘huanqiu/test.txt’ to ‘huanqiu233/haha’: No such file or directory

如果chattr針對目錄設定+a許可權,不加-R引數時,那麼只針對該目錄有效,目錄下的檔案不受約束!
這種情況下:
目錄不能刪除,不能更名。
目錄下的檔案也不能刪除,不能更名。檔案可以被echo追加、覆蓋內容。但是!但是不能使用vim編輯內容。

(3)facl許可權,setfacl表示設定許可權,getfacl表示檢視許可權-------------------------------------

ACL許可權:
Access Control List:訪問控制列表,最初好像是unix裡面為了提供更高階的許可權管理而搞出來的,可能是被chmod命令的3個許可權控制無法滿足,而被迫搞出來的吧!
主要目的是提供傳統的owner,group,others的read,write,execute許可權之外的具體許可權設定。
ACL可以針對單一使用者、單一檔案或目錄來進行r,w,x的許可權控制,對於需要特殊許可權的使用狀況有一定幫助。如,某一個檔案不讓單一的某個使用者訪問等。

ACL使用兩個命令來對其進行控制
setfacl:設定某個檔案/目錄的ACL設定專案
getfacl:取得某個檔案/目錄的ACL設定專案

setfacl設定acl控制規則的時候跟的引數:
-m:設定後續acl引數
-x:刪除後續acl引數
-b:刪除全部的acl引數
-k:刪除預設的acl引數
-R:遞迴設定acl,包括子目錄
-d:設定預設acl

setfacl操作acl許可權的主要命令:
"setfacl -m u:使用者名稱:許可權   檔名"          #通過所屬者方式
"setfacl -m g:使用者組:許可權  檔名"                #通過所屬組方式

"setfacl -R -m u:使用者名稱:許可權 目錄名“         #通過所屬者方式  //如果這個目錄被mount掛載或nfs掛載上了,就不支援setfacl許可權操作了
"setfacl -R -m g:使用者組:許可權 目錄名”               #通過所屬組方式

"setfacl -b 檔名”                #刪除檔案上的全部acl許可權
"setfacl -x u:使用者名稱 檔名"             #刪除檔案上的這個使用者的acl許可權
"setfacl -x g:使用者組 檔名"            #刪除檔案上的這個使用者組的acl許可權

"setfacl -R -b 目錄名"             #刪除目錄上的全部acl許可權
"setfacl -R -x u:使用者名稱 目錄名"           #刪除目錄上的這個使用者的acl許可權
"setfacl -R -x g:使用者組 目錄名"           #刪除目錄上的這個使用者的acl許可權

-m  --modify=acl modify the current ACL(s)of file(s) #設定檔案acl規則
-M  --modify-file=file read ACL entries to modify from file #從檔案讀取訪問控制列表條目更改
-x  --remove=acl remove entries from the ACL(s)of file(s) #刪除檔案的acl規則
-X  --remove-file=file readACL entries to remove from file #從檔案讀取訪問控制列表條目並刪除
-b  --remove-all remove all extended ACL entries # 刪除所有擴充套件的acl規則,基本的acl規則(所有者,群組,其他)將被保留.
-k  --remove-default remove the defaultACL #刪除預設的acl規則。如果沒有預設規則,將不提示.
--set=acl  set the ACL of file(s),replacing the current ACL.
--set-file=file  readACL entries toset from file #從檔案中讀設定ACL規則.
--mask  dorecalculate the effective rights mask #重新計算有效許可權,即使ACL mask被明確指定.
-n  --no-mask don'trecalculate the effective rights mask #不要重新計算有效許可權。setfacl預設會重新計算ACL mask,除非mask被明確的制定.
-d  --default operations apply tothe defaultACL #設定預設的acl規則,針對目錄而言.
-R  --recursive recurse into subdirectories #遞迴的對所有檔案及目錄進行操作.
-L  --logical logical walk,follow symbolic links #跟蹤符號連結,預設情況下只跟蹤符號連結檔案,跳過符號連結目錄。
-P  --physical physical walk,donotfollow symbolic links #跳過所有符號連結,包括符號連結檔案。
--restore=file  restore ACLs(inverse of`getfacl-R') #從檔案恢復備份的acl規則(這些檔案可由getfacl -R產生)。通過這種機制可以恢復整個目錄樹的acl規則。此引數不能和除--test以外的任何引數一同執行.
--test  testmode(ACLs are notmodified) #測試模式,不會改變任何檔案的acl規則,操作後的acl規格將被列出.
-v  --version print version andexit #版本.
-h  --help thishelp text #不用說肯定是幫助了.

當使用-M,-X選項從檔案中讀取規則時,setfacl接受getfacl命令輸出的格式。每行至少一條規則,以#開始的行將被視為註釋.

案例說明1:針對檔案操作
/usr/local/src下有一個檔案test.txt,檔案許可權是guohuihui
[root@localhost src]# pwd
/usr/local/src
[root@localhost src]# ll test.txt
-rw-r--r--. 1 guohuihui guohuihui 5 Nov 3 13:19 test.txt
[root@localhost src]# cat test.txt
3457

預設情況下,wangshibo使用者對這個檔案是沒有寫許可權的。
[root@localhost ~]# su - wangshibo
[wangshibo@localhost ~]$ cd /usr/local/src/
[wangshibo@localhost src]$ ll test.txt
-rw-rw--r--. 1 guohuihui guohuihui 14 Nov 3 13:21 test.txt
[wangshibo@localhost src]$ echo "wangshibo123" > test.txt
-bash: test.txt: Permission denied
[wangshibo@localhost src]$

現在使用setfacl命令賦予wangshibo使用者對這個檔案具有rwx的操作許可權
[root@localhost src]# setfacl -m u:wangshibo:rwx test.txt
[root@localhost src]# getfacl test.txt
# file: test.txt #檔名
# owner: guohuihui #檔案所屬者
# group: guohuihui #檔案所屬組
user::rw- #檔案所屬者的許可權
user:wangshibo:rwx #可以看出,新增了wangshibo使用者對這個檔案的rwx許可權
group::rw-- #檔案所屬組的許可權
mask::rwx #檔案當前的umask值
other::r-- #其他使用者對這個檔案的許可權

現在wangshibo使用者可以操作這個檔案了(許可權設定後,退出來重新登入wangshibo使用者)
[wangshibo@localhost src]$ echo "wangshibo123" > test.txt
[wangshibo@localhost src]$ cat test.txt
wangshibo123

刪除檔案test.txt上所有的acl許可權
[root@localhost src]# setfacl -b test.txt
[root@localhost src]# getfacl test.txt
# file: test.txt
# owner: guohuihui
# group: guohuihui
user::rw-
group::rw--
other::r--

刪除test.txt檔案對於wangshibo使用者的acl許可權
[root@localhost src]# setfacl -x u:wangshibo test.txt
[root@localhost src]# getfacl test.txt
# file: test.txt
# owner: guohuihui
# group: guohuihui
user::rw-
group::rw-
mask::rw-
other::r--

[wangshibo@localhost src]$ echo "1234123" > test.txt
-bash: test.txt: Permission denied
[wangshibo@localhost src]$

上面是針對檔案所屬者設定的acl許可權,也可以針對檔案所屬組設定acl許可權:
[root@localhost src]# getfacl test.txt
# file: test.txt
# owner: guohuihui
# group: guohuihui
user::rw-
group::rw-
other::r--

如下設定wangshibo使用者組對這個檔案的特殊許可權是rwx
[root@localhost src]# setfacl -m g:wangshibo:rwx test.txt
[root@localhost src]# getfacl test.txt
# file: test.txt
# owner: guohuihui
# group: guohuihui
user::rw-
group::rw-
group:wangshibo:rwx
mask::rwx
other::r--

那麼wangshibo使用者就可以寫入這個檔案
[wangshibo@localhost src]$ echo "sadfasdf" > test.txt

案例說明2:針對目錄操作
[root@localhost src]# ll -d huanqiu
drwxr-xr-x. 2 root root 21 Nov 3 15:41 huanqiu
[root@localhost src]# getfacl huanqiu
# file: huanqiu
# owner: root
# group: root
user::rwx
group::r-x
other::r-x

讓wangshibo使用者對這個huanqiu目錄及其子目錄下的檔案都無訪問許可權
[root@localhost src]# setfacl -R -m u:wangshibo:r huanqiu
[root@localhost src]# getfacl huanqiu
# file: huanqiu
# owner: root
# group: root
user::rwx
user:wangshibo:r--
group::r-x
mask::r-x
other::r-x

這樣,wangshibo使用者就訪問不了這個huanqiu目錄了
[root@localhost src]# su - wangshibo
Last login: Thu Nov 3 15:42:41 CST 2016 on pts/0
[wangshibo@localhost ~]$ cd /usr/local/src/huanqiu/
-bash: cd: /usr/local/src/huanqiu/: Permission denied

刪除這個huanqiu目錄上所有的acl規則
[root@localhost src]# setfacl -R -b huanqiu
[root@localhost src]# getfacl huanqiu
# file: huanqiu
# owner: root
# group: root
user::rwx
group::r-x
other::r-x

刪除這個huanqiu目錄上的wangshibo這個使用者的acl許可權
[root@localhost src]# setfacl -R -x u:wangshibo huanqiu
[root@localhost src]# getfacl huanqiu
# file: huanqiu
# owner: root
# group: root
user::rwx
group::r-x
mask::r-x
other::r-x

上面使用的是針對目錄所屬者的acl許可權設定,當然也可以使用目錄所屬組設定acl設定
設定wangshibo使用者組對於目錄huanqiu的acl設定
[root@localhost src]# setfacl -R -m g:wangshibo:r huanqiu

刪除huanqiu目錄上針對wangshibo使用者組的acl許可權
[root@localhost src]# setfacl -R -x g:wangshibo: huanqiu

*************************************************************************
除了上面設定setfacl許可權的方法外,要想讓wangshibo使用者對test.txt檔案操作寫,還可以將wangshibo使用者新增到這個檔案的所屬組內即可
[root@localhost src]# ll test.txt
-rw-rw-r--. 1 guohuihui guohuihui 5 Nov 3 13:29 test.txt

預設wangshibo使用者不能寫入這個檔案
[wangshibo@localhost src]$ echo "erere" > test.txt
-bash: test.txt: Permission denied

將wangshibo使用者新增到guohuihui使用者組內
[root@localhost src]# gpasswd -a wangshibo guohuihui
[root@localhost src]# id wangshibo
uid=1001(wangshibo) gid=1001(wangshibo) groups=1001(wangshibo),1002(guohuihui)

這樣,wangshibo使用者就可以寫入這個檔案了
[wangshibo@localhost src]$ echo "erere" > test.txt
[wangshibo@localhost src]$
************************************************************************************

(4)特殊許可權--------------------------------------------------------------------------------

1)suid:只對二進位制程式有效;執行者對於程式需要有x許可權;在程式執行過程中,執行者擁有程式擁有者的許可權;
suid會在所屬使用者許可權本應是x的地方顯示s;
設定suid許可權,只需在檔案當前數字許可權前面加4。這個許可權很危險,一般不要亂給!

注意:
除了直接在數字許可權前加4設定suid許可權外,還可以用下面的方法
chmod u+s filenae                  #設定suid許可權
chmod u-s filename               #取消suid許可權

案例說明:普通使用者執行passwd命令修改自己的密碼。

首先檢視passwd命令的絕對路徑:
[root@localhost ~]# which passwd
/usr/bin/passwd

檢視passwd命令許可權,發現passwd的擁有者是root,且擁有者許可權裡面本應是x的那一列顯示的是s,這說明這個命令具有SUID許可權。
同時發現普通使用者沒有w許可權,所以按理來說普通使用者是不能執行這個命令的,因為這個命令修改了密碼肯定是要寫檔案的。
[root@localhost ~]# ll /usr/bin/passwd
-rwsr-xr-x. 1 root root 27832 Jun 10 2014 /usr/bin/passwd

進一步分析,實際上passwd這個命令會操作/etc/shadow這個檔案,因為密碼都是放在這裡,檢視密碼檔案許可權:發現許可權是000!
注意:root使用者對所有檔案都是有rw許可權的,對所有目錄都是有rwx許可權的,這意味著普通使用者確實不能獨讀或寫這個檔案。
[root@localhost ~]# ll /etc/shadow
----------. 1 root root 1205 Nov 3 10:54 /etc/shadow

不過因為passwd命令具有SUID許可權,所以普通使用者執行這個命令時,當系統生成對應的程式後,這個程式就擁有了/usr/bin/passwd檔案擁有者root的許可權。
[root@localhost ~]# su - wangshibo
Last login: Thu Nov 3 10:53:38 CST 2016 on pts/0
[wangshibo@localhost ~]$ passwd
Changing password for user wangshibo.
Changing password for wangshibo.
(current) UNIX password:
New password:
Retype new password:
passwd: all authentication tokens updated successfully.
[wangshibo@localhost ~]$

如果將/usr/bin/passwd檔案的suid許可權收回,則普通使用者就不能修改自己的密碼了。
[root@localhost ~]# ll /usr/bin/passwd
-rwsr-xr-x. 1 root root 27832 Jun 10 2014 /usr/bin/passwd
[root@localhost ~]# chmod 755 /usr/bin/passwd                 [或者chmod u-s /usr/bin/passwd]
[root@localhost ~]# ll /usr/bin/passwd                  
-rwxr-xr-x. 1 root root 27832 Jun 10 2014 /usr/bin/passwd
[root@localhost ~]# su - wangshibo
Last login: Thu Nov 3 11:03:34 CST 2016 on pts/0
[wangshibo@localhost ~]$ passwd
Changing password for user wangshibo.
Changing password for wangshibo.
(current) UNIX password:
New password:
Retype new password:
passwd: Authentication token manipulation error
[wangshibo@localhost ~]$

[wangshibo@localhost ~]$ passwd
Changing password for user wangshibo.
Changing password for wangshibo.
(current) UNIX password:

在上面要輸入密碼的時候,按ctrl+z掛起。然後接著輸入pstree -u命令,如下,發現passwd的許可權確實是root,而不是wangshibo!

[wangshibo@localhost ~]$ pstree -u
systemd─┬─NetworkManager───2*[{NetworkManager}]
        ├─agetty
        ├─auditd───{auditd}
        ├─crond
        ├─dbus-daemon(dbus)───{dbus-daemon}
        ├─dnsmasq(nobody)───dnsmasq(root)
        ├─epmd(epmd)
        ├─gssproxy───5*[{gssproxy}]
        ├─ipmievd
        ├─irqbalance
        ├─ksmtuned───sleep
        ├─lvmetad
        ├─master─┬─pickup(postfix)
        │        └─qmgr(postfix)
        ├─polkitd(polkitd)───5*[{polkitd}]
        ├─rsyslogd───2*[{rsyslogd}]
        ├─sshd─┬─sshd───bash───su───bash(wangshibo)
        │      └─sshd───bash───su───bash(wangshibo)─┬─passwd(root)
        │                                           └─pstree
        ├─systemd-journal
        ├─systemd-logind
        ├─systemd-udevd
        ├─tuned───4*[{tuned}]
        └─wpa_supplicant

再看一例:
由於/etc/shadow檔案許可權是000,也就是說只有root使用者能對它有檢視許可權。普通使用者都無法檢視它的內容。
[root@localhost ~]# ll /etc/shadow
----------. 1 root root 1205 Nov 3 11:11 /etc/shadow
[root@localhost ~]# su - wangshibo
Last login: Thu Nov 3 11:11:10 CST 2016 on pts/1
[wangshibo@localhost ~]$ cat /etc/shadow
cat: /etc/shadow: Permission denied

現在只需要給/usr/bin/cat檔案賦予suid許可權,普通使用者即可有檢視/etc/shadow的許可權
[root@localhost ~]# which cat
/usr/bin/cat
[root@localhost ~]# ll /usr/bin/cat
-rwxr-xr-x. 1 root root 54048 Nov 20 2015 /usr/bin/cat
[root@localhost ~]# chmod 4755 /usr/bin/cat        [或者chmod u+s /us/bin/cat]
[root@localhost ~]# ll /usr/bin/cat
-rwsr-xr-x. 1 root root 54048 Nov 20 2015 /usr/bin/cat

[root@localhost ~]# su - wangshibo
Last login: Thu Nov 3 11:11:10 CST 2016 on pts/1
[wangshibo@localhost ~]$ cat /etc/shadow
root:$6$MeFkhhGG$4XBmni8ZudmW.Im1ZMRYOAV209Z0iTFH4Xxmonew/qL8x3K/iA1p86LUyFdHmeV5.2fOhU3KsXMPajE5GmGjx1:17093:0:99999:7:::
bin:*:16659:0:99999:7:::
daemon:*:16659:0:99999:7:::
adm:*:16659:0:99999:7:::
.......

2)sgid許可權:針對檔案的話,sgid只對二進位制程式有用;程式執行著要有x許可權;執行者在執行過程中會獲得改程式使用者組的許可權(相當於臨時加入了程式的使用者組)
sgid會在所屬使用者組許可權本應是x的地方顯示s;
設定sgid許可權,只需在檔案當前數字許可權前面加2。

注意:
除了直接在數字許可權前加2設定sgid許可權外,還可以用下面的方法
chmod g+s filenae             #設定suid許可權
chmod g-s filename           #取消suid許可權

案例說明:普通使用者使用locate命令(yum install mlocate,之後就會有locate命令)
[root@localhost src]# which locate
/usr/bin/locate
[root@localhost src]# ll /usr/bin/locate
-rwx--s--x. 1 root slocate 40496 Jun 10 2014 /usr/bin/locate

發現/usr/bin/locate檔案中使用者組許可權中應該出現x的位置顯示的s,表示這個locate命令具有sgid許可權,而普通使用者只有x許可權而沒有rw許可權。

locate這個命令,實際上會去訪問/var/lib/mlocate/mlocate.db這個檔案。如下可知:
這個mlocate.db檔案對於普通使用者沒有任何許可權,所以理論上普通使用者執行locate命令是不行的。
不過因為locate命令有sgid許可權,所以執行locate生成程式時,這個程式會得到locate命令的使用者組許可權,相當於wangshibo這個使用者被臨時加入了使用者組slocate。
於是就對mlocate.db這個檔案有了r許可權,可以訪問了!
[root@localhost ~]# ll /var/lib/mlocate/mlocate.db
-rw-r-----. 1 root slocate 4238642 Nov 3 11:51 /var/lib/mlocate/mlocate.db

sgid針對目錄的話:使用者對此目錄有rx許可權可以進入目錄,使用者進入此目錄後,有效使用者組會變成該目錄的使用者組;若使用者在此目錄有w許可權,則使用者建立的檔案使用者組與該目錄使用者組相同。

案例說明:
如果我們團隊想在linux某個目錄(比如/home/project)下協同工作來做一個專案,那麼每個團隊成員都得對這個project目錄下的所有檔案具有rwx許可權。

做法:
首先新建一個使用者組(比如work),再新建幾個賬號(比如wangshibo、guohuihui),每個賬號的使用者組都加入剛才新建的那個使用者組。
然後再把/home/project許可權設為770,把這個目錄的使用者組改為work使用者組,接著給這個目錄加入sgid許可權。
也就是說在這個目錄下,work組內的任意一個使用者建立的檔案,檔案使用者組都會是這個目錄的使用者組(即work)。
這樣的話,所有work組內的使用者在/home/project目錄下建立的檔案,其他同組使用者都有許可權操作。

[root@localhost home]# groupadd work
[root@localhost home]# gpasswd -a guohuihui work
Adding user guohuihui to group work
[root@localhost home]# usermod -G work wangshibo
[root@localhost home]# id guohuihui
uid=1002(guohuihui) gid=1002(guohuihui) groups=1002(guohuihui),1003(work)
[root@localhost home]# id wangshibo
uid=1001(wangshibo) gid=1001(wangshibo) groups=1001(wangshibo),1003(work)

[root@localhost home]# mkdir project
[root@localhost home]# ll -d project
drwxr-xr-x. 2 root root 6 Nov 3 12:03 project
[root@localhost home]# chmod 770 project
[root@localhost home]# ll -d project
drwxrwx---. 2 root root 6 Nov 3 12:03 project
[root@localhost home]# chgrp work project/
[root@localhost home]# ll -d project/
drwxrwx---. 2 root work 6 Nov 3 12:03 project/
[root@localhost home]# chmod g+s /home/project
[root@localhost home]# ll -d project/
drwxrws---. 2 root work 18 Nov 3 13:07 project/

接著來看下效果:現在在wangshibo賬號下操作
[root@localhost ~]# su - wangshibo
[wangshibo@localhost ~]$ ll -d /home/project/
drwxrws---. 2 root work 6 Nov 3 13:10 /home/project/
[wangshibo@localhost ~]$ cd /home/project/
[wangshibo@localhost project]$ echo "123" > wangshibo.txt
[wangshibo@localhost project]$ ll wangshibo.txt                        #發現建立的檔案的許可權的所有者是work
-rw-rw-r--. 1 wangshibo work 4 Nov 3 13:11 wangshibo.txt

然後登陸guohuihui賬號驗證下,發現可以正常操作上面的wangshibo.txt檔案。
[root@localhost ~]# su - guohuihui
[guohuihui@localhost ~]$ cd /home/project/
[guohuihui@localhost project]$ ll wangshibo.txt
-rw-rw-r--. 1 wangshibo work 4 Nov 3 13:11 wangshibo.txt
[guohuihui@localhost project]$ echo "guohuihui123123" > wangshibo.txt
[guohuihui@localhost project]$ cat wangshibo.txt
guohuihui123123
[guohuihui@localhost project]$ touch guohuihui.txt
[guohuihui@localhost project]$ ll
-rw-rw-r--. 1 guohuihui work 0 Nov 3 13:12 guohuihui.txt
-rw-rw-r--. 1 wangshibo work 16 Nov 3 13:12 wangshibo.txt

**************************************************************************************************
小知識點:
將一個使用者新增到一個組內的兩種方法:
“gpasswd -a 使用者名稱 組名”
“usermod -G 組名 使用者名稱”

將一個使用者從組內刪除
“gpasswd -d 使用者名稱 組名 ”
*************************************************************************************************

3)t許可權:只能針對目錄而言,對檔案來說無效!當使用者對目錄擁有wx許可權時,使用者在該目錄建立的檔案或目錄,只有自己與root才可以刪除。
案例說明:
[root@localhost src]#cd /usr/local/src
[root@localhost src]# touch aa
[root@localhost src]# ll
總用量 0
-rw-rw-r--. 1 root root 0 8月 28 05:21 aa 【注意,設定sgid許可權,要保證檔案的所屬組有操作許可權】
[root@localhost src]# chown wutao.wutao aa
[root@localhost src]# ll
總用量 0
-rw-r--r--. 1 wutao wutao 0 8月 28 05:15 aa
[root@localhost src]# su - wangshibo
[wangshibo@localhost ~]$ cd /usr/local/src/
[wangshibo@localhost src]$ ls
aa
[wangshibo@localhost src]$ echo 123 > aa 由於a檔案是wutao帳號下的檔案,wangshibo使用者沒有操作許可權
-bash: aa: 許可權不夠
[wangshibo@localhost src]$

現在給a檔案設定sgid許可權,那麼wangshibo使用者只要在wutao組內,就能對a檔案有操作許可權

*******************************************************************************************
小知識點:
將一個使用者拉到一個組內的兩種方法:
“gpasswd -a 使用者名稱 組名”
“usermod -G 組名 使用者名稱”

將一個使用者從組內刪除
“gpasswd -d 使用者名稱 組名 ”
******************************************************************************************

[root@localhost src]# chmod 2664 aa 【設定sgid許可權】
[root@localhost src]# ll
總用量 0
-rw-rwSr--. 1 wutao wutao 0 8月 28 05:21 aa
[root@localhost src]# gpasswd -a wangshibo wutao 【將wangshibo使用者拉到wutao組內】
Adding user wangshibo to group wutao
[root@localhost src]# id wangshibo
uid=501(wangshibo) gid=501(wangshibo) 組=501(wangshibo),500(wutao)

[root@localhost src]# su - wangshibo
[wangshibo@localhost ~]$ cd /usr/local/src/
[wangshibo@localhost src]$ echo 123 > aa 這樣,wangshibo使用者就能草組aa檔案了
[wangshibo@localhost src]$

針對t許可權的例子:
注意:t許可權只對目錄設定有效!
/tmp目錄是linux下的一個臨時目錄,一般會設定777許可權,為了方面其他使用者都能在這個目錄下操作,其實就是一個共用目錄,大家都可以用!
但有時有些目錄在tmp下存放自己的比較重要的檔案,不想讓其他使用者操作,安全起見,會給tmp目錄設定t許可權!

[root@localhost ~]# ll -d /tmp
drwxrwxrwx. 20 root root 4096 8月 28 05:32 /tmp 【tmp臨時目錄是777許可權】
[root@localhost ~]# su - wutao
[wutao@localhost ~]$ cd /tmp/
[wutao@localhost tmp]$ vim sss
[wutao@localhost tmp]$ ll sss
-rw-rw-r--. 1 wutao wutao 7 8月 28 05:33 sss 【這個檔案所有者是wutao】
[wutao@localhost tmp]$ logout
[root@localhost ~]# su - wangshibo
[wangshibo@localhost ~]$ ll /tmp/sss 【其他使用者對tmp臨時目錄下非自己所建立的檔案也開可以操作】
-rw-rw-r--. 1 wutao wutao 7 8月 28 05:33 /tmp/sss
[wangshibo@localhost ~]$ echo 123123 > /tmp/s

現在為了安全起見,在tmp臨時目錄下建立的檔案,除了自己和root外,其他使用者都不能操作。也就是非共用了!!
那麼這個時候就要給tmp設定t許可權了!
[root@localhost ~]# ll -d /tmp
drwxrwxrwx. 20 root root 4096 8月 28 05:33 /tmp
[root@localhost ~]# chmod 1777 /tmp 【設定t許可權】
[root@localhost ~]# ll -d /tmp
drwxrwxrwt. 20 root root 4096 8月 28 05:33 /tmp
[root@localhost ~]# su - wangshibo
[wangshibo@localhost ~]$ ll -d /tmp
drwxrwxrwt. 20 root root 4096 8月 28 05:37 /tmp
[wangshibo@localhost ~]$ ll /tmp/sss
-rw-rw-r--. 1 wutao wutao 4 8月 28 05:36 /tmp/sss
[wangshibo@localhost ~]$ echo 555 > /tmp/sss
-bash: /tmp/sss: 許可權不夠
[wangshibo@localhost ~]$

這個時候,wangshibo使用者就不能操作sss檔案了。如果要想再擁有操作許可權,可以把wangshibo使用者加到wutao組內,因為sss檔案所在組有w寫許可權。

(5)sudo許可權-----------------------------------------------------------------------
一般情況下,使用su命令在使用者之間切換,需要知道對方密碼。比如su切換到root下,需要知道root密碼。
但使用sudo命令,就不需要知道root密碼,只需要輸入自己賬號密碼即可!前提是需要將相關賬號設定sudo許可權

sudo許可權: 是為了讓普通使用者執行只有root使用者才能執行的操作命令(這種方式無需知道root密碼)
sudo所在檔案:/etc/sudoers,編輯該檔案的命令是visudo,不過只能在root賬號下可以使用該命令,且如果上一次visudo編譯未退出狀態下,不能重新visudo進行編輯(也可以直接vi編輯/etc/sudoers檔案)

強烈推薦使用visudo命令修改sudoers,因為它會幫你校驗檔案配置是否正確,如果不正確,在儲存退出時就會提示你哪段配置出錯的。

sudo的工作過程如下:
1)當使用者執行sudo時,系統會主動尋找/etc/sudoers檔案,判斷該使用者是否有執行sudo的許可權
2)確認使用者具有可執行sudo的許可權後,讓使用者輸入使用者自己的密碼確認
3)若密碼輸入成功,則開始執行sudo後續的命令
4)root執行sudo時不需要輸入密碼(eudoers檔案中有配置root ALL=(ALL) ALL這樣一條規則)
5)若欲切換的身份與執行者的身份相同,也不需要輸入密碼

Sudo的特性:
sudo能夠限制使用者只在某臺主機上執行某些命令。
sudo提供了豐富的日誌,詳細地記錄了每個使用者幹了什麼。它能夠將日誌傳到中心主機或者日誌伺服器。
sudo使用時間戳檔案來執行類似的“檢票”系統。當使用者呼叫sudo並且輸入它的密碼時,使用者獲得了一張存活期為5分鐘的票(這個值可以在編譯的時候改變)。也就是說,我剛剛輸入了sudocat /etc/issue 然後可以再次只需要輸入cat/etc/issue即可,不需要再次輸入sudo。
sudo的配置檔案是sudoers檔案,它允許系統管理員集中的管理使用者的使用許可權和使用的主機。它所存放的位置預設是在/etc/sudoers,屬性必須為0411。

-----------------------------------------------------------------------------------------------------------
su和sudo切換命令的時候,注意有個-
加-,表示不僅切換到使用者下,連同使用者的系統環境變數也切換進來了 【切換前後執行env看下環境變數】
不加-,表示僅僅切換到使用者狀態下,使用者的系統環境變數沒有切換進來

su root 僅僅切換到root使用者狀態下,root的系統環境變數沒有切換過來 【比如說有些只能在root下操作的命令,不加-雖然切換到root下了,但是還不能操作】
su - root 不僅切換到root下了,root的系統環境變數也切換過來了
---------------------------------------------------------------------------------------------------------

常用sudo許可權的安全設定一般可以滿足下面4個條件:
1.禁止普通使用者使用sudo 命令切換到root模式下
2.使用者使用sudo命令,必須每次都輸入密碼
3.使用者組管理(組內新增和刪除使用者)以及組許可權管理設定
4.使用別名(使用者名稱以及命令的別名)進行設定

1.禁止普通使用者使用sudo su切換到root使用者模式下
總所周知,只要給普通使用者設定了sudo許可權,那麼它就可以使用“sudo su root”命令切換到root使用者下(只要知道自己的密碼即可,sudo許可權只要輸入自己的密碼),這是很不安全的。必須禁止這種做法。
只需要在sudo的配置檔案裡新增下面內容即可。

sudo切換到root模式下有以下幾種方式:
1)sudo su -
2)sudo -s
3)sudo su root
4)sudo su - root
5)sudo -u root su

在root賬號下輸入visudo(或/etc/sudoers)命令,設定如下:

如上設定,表示wangshibo使用者在使用sudo許可權後,禁止使用bash和su命令。也就是說:禁止了該使用者使用sudo切換到root模式下了
其中:
!/bin/bash 是禁止了sudo -s的切換
!/bin/su 是禁止了sudo中帶su的切換

=============ubuntu下設定普通使用者的sudo無密碼登入===========

# User privilege specification
root	ALL=(ALL:ALL) ALL
kevin   ALL=(ALL) NOPASSWD: ALL 

# Allow members of group sudo to execute any command
%sudo	ALL=(ALL:ALL) NOPASSWD:ALL                                     #這一行也要新增"NOPASSWD",否則前面的普通使用者設定的sudo無密碼切換無效!

********************************禁止賬號間使用su命令切換*******************

su的缺點
1)不安全su工具在多人蔘與的系統管理中,並不是最好的選擇,su只適用於一兩個人蔘與管理的系統,畢竟su並不能讓普通使用者受限的使用;超級使用者root密碼應該掌握在少數使用者手中。
2)麻煩:需要把root密碼告知每個需要root許可權的人。

可以在/etc/pam.d/su檔案裡設定禁止使用者使用su命令
#vim /etc/pam.d/su
auth sufficient pam_rootok.so
# Uncomment the following line to implicitly trust users in the "wheel" group.
#auth sufficient pam_wheel.so trust use_uid
# Uncomment the following line to require a user to be in the "wheel" group.
#auth required pam_wheel.so use_uid

以上標紅的兩行是預設狀態,這種狀態下是允許所有使用者間使用su命令進行切換的!
如果開啟第二行,表示只有root使用者和wheel組內的使用者才可以使用su命令。
如果註釋第一行,開啟第二行,表示只有wheel組內的使用者才能使用su命令,root使用者也被禁用su命令。
*********************************************************************

以上設定表示:wangshibo賬號在使用sudo時不享有root使用者狀態下的許可權,即sudo狀態下享有除root之外的其他使用者狀態下的許可權。
預設是(ALL),即sudo享有所有使用者狀態下的許可權。

---------------------------------------------------------------------------------------
root ALL=(ALL) ALL
以上是/etc/sudoers配置檔案中預設定義的使用者sudo設定,其中解釋如下:
1)第一個欄位root指定的是使用者:可以是使用者名稱,也可以是別名。每個使用者設定一行,多個使用者設定多行,也可以將多個使用者設定成一個別名後再進行設定。
2)第二個欄位ALL指定的是使用者所在的主機:可以是ip,也可以是主機名,表示這個sudo設定後的檔案(/etc/sudoers)只在這個主機上生效,ALL表示在所有主機上都生效!限制的一般都是本機,也就是限制使用這個檔案的主機,如果指定為:192.168.1.88= 表示這個檔案只有在這臺主機上生效,如果拷貝到別的機子上是不起作用的!一般都指定為:ALL 表示所有的主機,不管檔案拷到那裡都可以用。
3)第三個欄位(ALL)括號裡指定的也是使用者:指定以什麼使用者身份執行sudo,即使用sudo後可以享有所有賬號下的許可權。如果要排除個別使用者,可以在括號內設定,比如ALL=(ALL,!root,!ops)。也可以設定別名
4)第四個欄位ALL指定的是執行的命令:即使用sudo後可以執行所有的命令。也可以設定別名
---------------------------------------------------------------------------------------

2.使用者使用sudo命令,必須每次都輸入密碼
在/etc/sudoers檔案裡新增內容“Defaults timestamp_timeout=0”
即表示每次使用sudo命令時都要輸入密碼。

-----------------------------------------------------------------------------------------
還可以通過設定命令的別名進行許可權設定。
即將一系列命令放在一起設定一個別名,然後對別名進行許可權設定。注意:別名一定要是大寫字母
Delegating permissions 代理許可權相關命令別名

以上設定說明:
wnagshibo使用者在sudo許可權下只能使用ls,rm,tail命令
----------------------------------------------------------------------------------------

3.使用者組管理(組內新增和刪除使用者)以及組許可權管理設定

進行使用者許可權管理,設定sudo許可權時,可以設定組的許可權,不同的組有不同的許可權,然後將使用者拉到相應許可權的組內。
將一個使用者拉入到一個組內,有下面兩種方法:
1)usermod -G 組名 使用者名稱
2)gpasswd -a 使用者名稱 組名     #新增到組內
    gpasswd -d 使用者名稱 組名     #從組內刪除

以上設定表示wheel組內的使用者在使用sudo許可權後,禁止使用bash和su命令,也就是禁止了該組內使用者使用sudo切換到root模式下了

4.使用別名進行sudo許可權設定。
Alise設定別名有以下四種情況:
Host_Alias
Cmnd_Alias
User_Alias
Runas_Alias

1)配置Host_Alias:就是主機的列表,可以使用主機名,也可以使用ip,不過在同一個別名內不能同時混用主機名和ip地址!
Host_Alias HOST_FLAG = hostname1, hostname2, hostname3
Host_Alias HOST_FLAG1 = 192.168.1.12, 192.1681.13, 192.168.1.14
Host_Alias HOST_FLAG2 = hostname1, 192.1681.13, 192.168.1.14                 #這種設定是錯誤的!不能在同一個別名內混用主機名和ip
2)配置Cmnd_Alias:就是允許執行的命令的列表,命令前加上!表示不能執行此命令.
命令一定要使用絕對路徑,避免其他目錄的同名命令被執行,造成安全隱患,因此使用的時候也是使用絕對路徑!
Cmnd_Alias COMMAND_FLAG = command1, command2, command3 ,!command4
3)配置User_Alias:就是具有sudo許可權的使用者的列表
User_Alias USER_FLAG = user1, user2, user3
4)配置Runas_Alias:就是使用者以什麼身份執行(例如root)的列表
Runas_Alias RUNAS_FLAG = operator1, operator2, operator3

使用別名配置許可權的格式如下:
USER_FLAG HOST_FLAG=(RUNAS_FLAG) COMMAND_FLAG
如果不需要密碼驗證的話,則按照這樣的格式來配置
USER_FLAG HOST_FLAG=(RUNAS_FLAG) NOPASSWD:COMMAND_FLAG

案例說明:
例如1:把wangsb,wangbz,songj使用者設定成別名ADMINS,都擁有duso許可權
#visudo
User_Alias ADMINS = wangsb, songj,wangbz
......
ADMINS ALL=(ALL) ALL

例如2:把visudo、chown、chmod等命令設定成別名DELEGATING,別名ADMINS裡面的使用者都禁用DELEGATING裡面的命令
#visudo
Cmnd_Alias DELEGATING = /usr/sbin/visudo, /bin/chown, /bin/chmod, /bin/chgrp
......
ADMINS ALL=(ALL) ALL,!DELEGATING
.......

綜合使用
[root@test-huanqiu ~]# visudo
........
User_Alias ADMINS = wangbz,zhoulw,songj,wangsb
.......
Cmnd_Alias DELEGATING = /usr/sbin/visudo, /bin/chown, /bin/chmod, /bin/chgrp
.......
root ALL=(ALL) ALL
ADMINS ALL=(ALL) ALL,!DELEGATING,!/bin/bash,!/bin/su
.......
Defaults timestamp_timeout = 0

其他的可以參考:sudo命令使用的幾個場景

-----------------------------------------------------------------------
下面是線上上伺服器上用過的一個小設定:

[root@hqsb_web1 ~]# visudo
.......
Defaults timestamp_timeout=0       //表示每次sudo時都要強行輸入密碼
.......
kevin  ALL=(ALL)       /usr/bin/tail,/bin/gzip,/usr/bin/vim,/bin/chown,/bin/chmod,/Data/app/nginx/sbin/nginx    //kevin使用者在使用sudo時只能使用這幾個命令,其他sudo命令全部禁止!

grace  ALL=(ALL)       ALL,!/bin/bash,!/bin/su,!/bin/chown,!/bin/chmod,!/sbin/init,!/sbin/reboot,!/sbin/poweroff    //grace使用者使用sudo時,禁止後面設定的命令,其他的都可以使用。

-------------------------------------------------------------------------------------------------------------------
最後解釋下sudo許可權配置檔案:
使用visudo命令開啟sudo配置檔案,如下:
## Sudoers allows particular users to run various commands as
## the root user, without needing the root password.
## 該檔案允許特定使用者像root使用者一樣使用各種各樣的命令,而不需要root使用者的密碼
##
## Examples are provided at the bottom of the file for collections
## of related commands, which can then be delegated out to particular
## users or groups.
## 在檔案的底部提供了很多相關命令的示例以供選擇,這些示例都可以被特定使用者或
## 使用者組所使用
##
## This file must be edited with the 'visudo' command.
## 該檔案必須使用"visudo"命令編輯

## Host Aliases
## Groups of machines. You may prefer to use hostnames (perhaps using
## wildcards for entire domains) or IP addresses instead.
## 對於一組伺服器,你可能會更喜歡使用主機名(可能是全域名的萬用字元)
## 、或IP地址,這時可以配置主機別名
# Host_Alias FILESERVERS = fs1, fs2
# Host_Alias MAILSERVERS = smtp, smtp2

## User Aliases
## These aren't often necessary, as you can use regular groups
## (ie, from files, LDAP, NIS, etc) in this file - just use %groupname
## rather than USERALIAS
## 這並不很常用,因為你可以通過使用組來代替一組使用者的別名
# User_Alias ADMINS = jsmith, mikem

## Command Aliases
## These are groups of related commands...
## 指定一系列相互關聯的命令(當然可以是一個)的別名,通過賦予該別名sudo許可權,
## 可以通過sudo呼叫所有別名包含的命令,下面是一些示例

## Networking 網路操作相關命令別名
# Cmnd_Alias NETWORKING = /sbin/route, /sbin/ifconfig, /bin/ping, /sbin/dhclient
, /usr/bin/net, /sbin/iptables, /usr/bin/rfcomm, /usr/bin/wvdial, /sbin/iwconfig
, /sbin/mii-tool

## Installation and management of software 軟體安裝管理相關命令別名
# Cmnd_Alias SOFTWARE = /bin/rpm, /usr/bin/up2date, /usr/bin/yum

## Services 服務相關命令別名
# Cmnd_Alias SERVICES = /sbin/service, /sbin/chkconfig

## Updating the locate database 本地資料庫升級命令別名
# Cmnd_Alias LOCATE = /usr/bin/updatedb

## Storage 磁碟操作相關命令別名
# Cmnd_Alias STORAGE = /sbin/fdisk, /sbin/sfdisk, /sbin/parted, /sbin/partprobe
, /bin/mount, /bin/umount

## Delegating permissions 代理許可權相關命令別名
# Cmnd_Alias DELEGATING = /usr/sbin/visudo, /bin/chown, /bin/chmod, /bin/chgrp

## Processes 程式相關命令別名
# Cmnd_Alias PROCESSES = /bin/nice, /bin/kill, /usr/bin/kill, /usr/bin/killall

## Drivers 驅動命令別名
# Cmnd_Alias DRIVERS = /sbin/modprobe

# Defaults specification

#
# Disable "ssh hostname sudo <cmd>", because it will show the password in clear.
# You have to run "ssh -t hostname sudo <cmd>".
# 一些環境變數的相關配置,具體情況可見man soduers
Defaults requiretty

Defaults env_reset
Defaults env_keep = "COLORS DISPLAY HOSTNAME HISTSIZE INPUTRC KDEDIR LS_COLORS"
Defaults env_keep += "MAIL PS1 PS2 QTDIR USERNAME LANG LC_ADDRESS LC_CTYPE"
Defaults env_keep += "LC_COLLATE LC_IDENTIFICATION LC_MEASUREMENT LC_MESSAGES"
Defaults env_keep += "LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER LC_TELEPHONE"
Defaults env_keep += "LC_TIME LC_ALL LANGUAGE LINGUAS _XKB_CHARSET XAUTHORITY"

Defaults secure_path = /sbin:/bin:/usr/sbin:/usr/bin

## Next comes the main part: which users can run what software on
## which machines (the sudoers file can be shared between multiple
## systems).
## 下面是規則配置:什麼使用者在哪臺伺服器上可以執行哪些命令(sudoers檔案可以在多個系統上共享)
## Syntax(語法):
##
## user MACHINE=COMMANDS 使用者 登入的主機=(可以變換的身份) 可以執行的命令
##
## The COMMANDS section may have other options added to it.
## 命令部分可以附帶一些其它的選項
##
## Allow root to run any commands anywhere
## 允許root使用者執行任意路徑下的任意命令
root ALL=(ALL) ALL

## Allows members of the 'sys' group to run networking, software,
## service management apps and more.
## 允許sys中戶組中的使用者使用NETWORKING等所有別名中配置的命令
# %sys ALL = NETWORKING, SOFTWARE, SERVICES, STORAGE, DELEGATING, PROCESSES, LOCATE
, DRIVERS

## Allows people in group wheel to run all commands
## 允許wheel使用者組中的使用者執行所有命令
%wheel ALL=(ALL) ALL

## Same thing without a password
## 允許wheel使用者組中的使用者在不輸入該使用者的密碼的情況下使用所有命令
# %wheel ALL=(ALL) NOPASSWD: ALL

## Allows members of the users group to mount and unmount the
## cdrom as root
## 允許users使用者組中的使用者像root使用者一樣使用mount、unmount、chrom命令
# %users ALL=/sbin/mount /mnt/cdrom, /sbin/umount /mnt/cdrom

## Allows members of the users group to shutdown this system
## 允許users使用者組中的使用者關閉localhost這臺伺服器
# %users localhost=/sbin/shutdown -h now

## Read drop-in files from /etc/sudoers.d (the # here does not mean a comment)
## 讀取放置在/etc/sudoers.d/資料夾中的檔案(此處的#不意味著這是一個宣告)
#includedir /etc/sudoers.d

相關文章