關於Linux下s、t、i、a權限


 

    文件權限除了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設置追加權限。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM