文件權限除了r、w、x外還有s、t、i、a權限:
首先我們利用umask查看系統的權限為四位,首位就是特殊權限位,SetUID為4,SetGID為2,t為1
[root@iz2ze46xi6pjjj69ailg9lz ~]# umask 0022
一、 s權限解讀: (SetUID和SetGID)
1.SetUID權限解讀(針對所屬主設置s權限,數字表示為4)
SetUID:當一個可執行程序具有SetUID權限,用戶執行這個程序時,將以這個程序所有者的身份執行。前提是這個文件是可執行文件,可就是具有x權限(屬組必須先設置相應的x權限)。chmod命令不進行必要的完整性檢查,即使不設置x權限就設置s權限,chmod也不會報錯,當我們ls -l時看到rwS,大寫S說明s權限未生效)
- (1)設置權限的方法:
chmod u+s xxx
chmod 4777 xxx
解釋:我們利用umask知道權限的設置是四位數,后三位是ugo對應的屬性,首位就是特殊位權限的表示,SetUID的權限位是4,因此可以用chmod 4777 xxx設置s權限。
例1: linux的passwd命令就具有s權限,因此普通用戶可以修改自己的密碼:
[qlq@iz2ze46xi6pjjj69ailg9lz ~]$ ls -la `which passwd` -rwsr-xr-x. 1 root root 27832 Jun 10 2014 /usr/bin/passwd
解釋:passwd的所屬這是root,所屬組也是root,具有s權限,因此其他用戶執行passwd的時候是以passwd的所屬組root執行。
例2:將touch賦予s權限,查看其創建的文件的所屬組
(1)qlq用戶touch沒有被賦予s權限的時候創建一個文件(所屬主是當前用戶,所屬組是當前用戶的組:)
[qlq@iz2ze46xi6pjjj69ailg9lz test]$ ls [qlq@iz2ze46xi6pjjj69ailg9lz test]$ touch test1file [qlq@iz2ze46xi6pjjj69ailg9lz test]$ ll total 0 -rw-rw-r-- 1 qlq qlq 0 Mar 30 12:54 test1file
(2)root用戶將touch賦予s權限:
[root@iz2ze46xi6pjjj69ailg9lz ~]# chmod u+s `which touch` #賦予所屬主s權限 [root@iz2ze46xi6pjjj69ailg9lz ~]# ll `which touch` #查看touch權限 -rwsr-xr-x. 1 root root 62488 Nov 6 2016 /usr/bin/touch
(3)qlq用戶再次創建一個文件查看所屬主(所屬主是root,所屬組是當前用戶所屬組)
[qlq@iz2ze46xi6pjjj69ailg9lz test]$ touch test1file2 [qlq@iz2ze46xi6pjjj69ailg9lz test]$ ll ./test1file2 -rw-rw-r-- 1 root qlq 0 Mar 30 12:59 ./test1file2
- (2)收回s權限
chmod u-s xxx
chmod 0777 xxx
例如:收回上面的touch的s權限之后再次創建文件:
(1)root用戶收回權限
[root@iz2ze46xi6pjjj69ailg9lz ~]# chmod 0755 `which touch` #收回權限 [root@iz2ze46xi6pjjj69ailg9lz ~]# ll `which touch` #查看權限 -rwxr-xr-x. 1 root root 62488 Nov 6 2016 /usr/bin/touch
第一位為特殊權限位。因此用0就表示沒有特殊權限。
(2)qlq用戶再次創建一個文件查看信息:(所屬主變成當前用戶)
[qlq@iz2ze46xi6pjjj69ailg9lz test]$ ll ./test1file3 -rw-rw-r-- 1 qlq qlq 0 Mar 30 13:06 ./test1file3
- (3)查看系統具有SetUID或者GID的文件
[root@iz2ze46xi6pjjj69ailg9lz ~]# find / -perm 4755 -o -perm 2755 #跟據權限查看,-o表示or,4代表SetUID,2代表SetGID /usr/lib/polkit-1/polkit-agent-helper-1 /usr/sbin/netreport /usr/sbin/postqueue /usr/sbin/pam_timestamp_check /usr/sbin/unix_chkpwd /usr/sbin/postdrop /usr/sbin/usernetctl /usr/bin/at /usr/bin/gpasswd /usr/bin/passwd /usr/bin/write /usr/bin/su
注意:
vim和vi不能被授予s權限,否則好多只讀文件都可以被以root身份保存。
- (4)當我們針對一個不具備x權限的文件設置s權限時無效,權限變為大寫S,大寫S說明s權限未生效
[qlq@iz2ze46xi6pjjj69ailg9lz test]$ chmod u+s ./test1file [qlq@iz2ze46xi6pjjj69ailg9lz test]$ ll total 0 -rwSrw-r-- 1 qlq qlq 0 Mar 30 12:54 test1file
2.SetGID解讀(針對所屬組設置權限,數字表示為2)
一個可執行文件具有SetGID權限表示運行這個程序的時候是以這個程序的所屬組的身份運行,同樣這個文件需要具有x權限(必須可以運行)
設置權限方法
chmod g+s xxx
chmod 2777 xxx
收回權限方法:
chmod g-s xxx
chmod 0777 xxx
例1:針對上面的touch同時設置SetUID和SetGID權限之后創建文件
(1)root用戶設置權限
[root@iz2ze46xi6pjjj69ailg9lz ~]# chmod 6755 `which touch` [root@iz2ze46xi6pjjj69ailg9lz ~]# ll `which touch` -rwsr-sr-x. 1 root root 62488 Nov 6 2016 /usr/bin/touch
(2)qlq用戶創建一個文件:(所屬主為root,所屬組是root所在的組)
[qlq@iz2ze46xi6pjjj69ailg9lz test]$ touch test1file4 [qlq@iz2ze46xi6pjjj69ailg9lz test]$ ll | grep test1file4 -rw-rw-r-- 1 root root 0 Mar 30 13:19 test1file4
例2:將touch的權限只設置SetGID並創建文件:
(1)root用戶設置權限
[root@iz2ze46xi6pjjj69ailg9lz ~]# chmod 2755 `which touch` [root@iz2ze46xi6pjjj69ailg9lz ~]# ll `which touch` -rwxr-sr-x. 1 root root 62488 Nov 6 2016 /usr/bin/touch
(2)qlq用戶創建一個文件:(所屬主為qlq,所屬組是root所在的組)
[qlq@iz2ze46xi6pjjj69ailg9lz test]$ touch test1file5 [qlq@iz2ze46xi6pjjj69ailg9lz test]$ ll | grep test1file5 -rw-rw-r-- 1 qlq root 0 Mar 30 13:21 test1file5
例三:收回touch的SetGID權限:
[root@iz2ze46xi6pjjj69ailg9lz ~]# chmod g-s `which touch` [root@iz2ze46xi6pjjj69ailg9lz ~]# ll `which touch` -rwxr-xr-x. 1 root root 62488 Nov 6 2016 /usr/bin/touch
注意:上面的SID和GID要求用戶必須有執行文件的權利,如果有執行權限執行的時候s位才會生效:
例如:
(1)root將o的x權限去掉
[root@iz2ze46xi6pjjj69ailg9lz ~]# chmod 4750 `which touch` [root@iz2ze46xi6pjjj69ailg9lz ~]# ll `which touch` -rwsr-x---. 1 root root 62488 Nov 6 2016 /usr/bin/touch
(2)qlq執行touch命令權限不允許:
[qlq@iz2ze46xi6pjjj69ailg9lz ~]$ touch www
-bash: /usr/bin/touch: Permission denied
二、黏着位 t 解讀(針對others設置,可以實現文件夾共享)
t :設置粘着位,一般針對權限是777的文件夾設置權限。如果文件設置了t權限則只有屬主和root有刪除文件的權限(沒有意義)
如果權限為777的目錄設置t權限,索引用戶可以在這個目錄下面創建文件和刪除自己創建的文件,刪除其他人創建的文件權限不被允許(當然root可以刪除所有人創建的權限)。(為了共享目錄,例如臨時文件夾)
設置權限
chmod o+t xxx
chmod 1777 xxx
收回權限
chmod o-t xxx
chmod 0777 xxx
例1:linux的存放臨時文件夾的tmp目錄就有t權限:
[root@iz2ze46xi6pjjj69ailg9lz /]# ll / | grep tmp drwxrwxrwt. 11 root root 4096 Mar 30 13:13 tmp
例2:創建一目錄並設置t權限:
(1)root用戶創建目錄並設置權限為777+t權限
[root@iz2ze46xi6pjjj69ailg9lz test]# chmod 777 /mydir/ [root@iz2ze46xi6pjjj69ailg9lz test]# ll /|grep mydir drwxrwxrwx 2 root root 4096 Mar 30 13:32 mydir [root@iz2ze46xi6pjjj69ailg9lz test]# chmod o+t /mydir/ [root@iz2ze46xi6pjjj69ailg9lz test]# ll /|grep mydir drwxrwxrwt 2 root root 4096 Mar 30 13:32 mydir
(2)root用戶在此目錄下創建幾個文件
[root@iz2ze46xi6pjjj69ailg9lz mydir]# touch rootfle1 [root@iz2ze46xi6pjjj69ailg9lz mydir]# touch rootfle2 [root@iz2ze46xi6pjjj69ailg9lz mydir]# ll total 0 -rw-r--r-- 1 root root 0 Mar 30 13:35 rootfle1 -rw-r--r-- 1 root root 0 Mar 30 13:35 rootfle2
(3)qlq在此目錄下創建文件並刪除文件(可以創建文件與刪除自己創建的文件,刪除root創建的文件被提示不允許)
[qlq@iz2ze46xi6pjjj69ailg9lz /]$ cd /mydir/ [qlq@iz2ze46xi6pjjj69ailg9lz mydir]$ touch qlqfile1 [qlq@iz2ze46xi6pjjj69ailg9lz mydir]$ touch qlqfile2 [qlq@iz2ze46xi6pjjj69ailg9lz mydir]$ rm rootfle1 rm: remove write-protected regular empty file ‘rootfle1’? y rm: cannot remove ‘rootfle1’: Operation not permitted [qlq@iz2ze46xi6pjjj69ailg9lz mydir]$ rm -f qlqfile1 [qlq@iz2ze46xi6pjjj69ailg9lz mydir]$ ll total 0 -rw-rw-r-- 1 qlq qlq 0 Mar 30 13:35 qlqfile2 -rw-r--r-- 1 root root 0 Mar 30 13:35 rootfle1 -rw-r--r-- 1 root root 0 Mar 30 13:35 rootfle2
三、i與a權限解讀
參考:http://www.cnblogs.com/qlqwjy/p/8358917.html
i:不可修改權限 例:chattr u+i filename 則filename文件就不可修改,無論任何人,如果需要修改需要先刪除i權限,用chattr -i filename就可以了。查看文件是否設置了i權限用lsattr filename。
a:只追加權限, 對於日志系統很好用,這個權限讓目標文件只能追加,不能刪除,而且不能通過編輯器追加。可以使用chattr +a設置追加權限。