linux系統下的權限知識梳理

 

下面對linux系統下的有關權限操做命令進行了梳理總結,並配合簡單實例進行說明。
linux中除了常見的讀(r)、寫(w)、執行(x)權限之外,還有其餘的一些特殊或隱藏權限,熟練掌握這些權限知識的使用,能夠大大提升咱們運維工做的效率。html

(0)umask是權限碼,默認是022--------------------------------------------------                  
使用命令"umask"就能查詢出來linux

文件默認的權限是666,目錄默認的權限是777
新建文件和目錄的權限分別是各自默認權限減去umask權限碼值nginx

即:
新建文件權限,666-022=644
新建目錄權限,777-022=755web

(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.txtubuntu


chown 設置字符權限,默認表示所屬者權限
chgrp 表示所屬組權限vim

一般咱們能夠直接用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.txtbash

也能夠直接使用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

相關文章
相關標籤/搜索