Linux粘滯位使用 - 運維筆記 (t權限)


 

在介紹Linux粘滯位之前,先來簡單介紹一下文件權限和目錄權限的區別。在linux系統中文件(文件和目錄)的權限有三種(r,w,x),而這三種權限對文件和目錄的意義有所不同。

權限對文件
r (read) :可讀取該文件的實際內容;
w(write):可以編輯,新增或者修改該文件的內容(但不含刪除該文件);
x(execute):代表該文件可以被系統執行

對於文件的r ,w, x來說,主要針對的"文件的內容"而言,與文件名的存在與否沒有關系;

權限對目錄
r (read):表示具有讀取目錄結構列表的權限,不如可以用ls查看一下目錄有什么
w(write):而寫的權限對目錄來說就顯得很強大了,代表具有更改該目錄結構列表的權限。目錄可寫操作包括:新建文件或目錄、刪除文件或目錄(不論文件的權限是什 么)、對文件或目錄重命名、移動文件或目錄等。
x(execute):目錄的X權限代表的是用戶能否進入該目錄稱為工作目錄。擁有此權限,就可以cd進去,否則,將不能進入目錄內部。

一、粘滯位介紹
粘滯位(Stickybit),或粘着位。最常見的用法在目錄上設置粘滯位,如此以來,只有目錄內文件的所有者或者root才可以刪除或移動該文件。如果不為目錄設置粘滯位,任何具有該目錄寫和執行權限的用戶都可以刪除和移動其中的文件。在linux系統的實際應用中,粘滯位一般用於/tmp目錄,以防止普通用戶刪除或移動其他用戶的文件一個目錄具有粘滯位,則在other的X位會表現為 t,或者TT和t的區別在於,原來x位上有x權限,有了粘滯位則表現為t,否則,則表現為T

在Linux系統中比較典型的例子就是"/tmp"、 "/var/tmp"目錄。這兩個目錄作為Linux系統的臨時文件夾,權限為"rwxrwxrwx",即允許任意用戶、任意程序在該目錄中進行創建、刪除、移動文件或目錄等操作。試想一下:若任意一個普通用戶都能夠刪除系統服務運行中使用的臨時文件,將造成什么結果?

粘滯位權限便是針對此種情況設置,當目錄被設置了粘滯位的t權限以后,即便用戶對該目錄有寫入權限,也不能刪除該目錄中其他用戶的文件數據,而是只有該文件的所有者和root用戶才有權將其刪除。設置了粘滯位的t權限之后,正好可以保持這種動態的平衡:允許各用戶在目錄中任意寫入、刪除數據,但是禁止隨意刪除其他用戶的數據。需要注意: 粘滯位權限只能針對⽬錄設置,對於⽂件⽆效。

正常情況下,在Linux系統中,如果對一個目錄具有寫權限,那么就可以在這個目錄下創建刪除文件。現在有這么個需求:如果現在需要創建這樣一個目錄,可以在這個目錄里創建文件,但是其他用戶不能刪除這個文件。這里就要用到Linux這個特殊的權限:粘滯位,也就是t特殊權限!需要注意:粘滯位t權限給其它用戶帶來的安全限制 僅僅在於不能刪除和移動/更名文件 (粘滯位保護的是文件不被其他用戶rm或mv,即使文件對其他用戶有寫權限,777都不行!),因為它針對的是目錄。

在Linux中有三種特殊權限,分別為:
SetUID  =  4:在所有者設置的權限     
SetGID  =  2:在所屬組設置的權限
粘着位  =  1:在其他人的位置設置的(使用t來表示)

SetUID 、SetGID、t權限的設置,之前已在另一篇文檔中簡單介紹:https://www.cnblogs.com/kevingrace/p/5823003.html,這里重點說下粘滯位的設置,對於授予了粘滯位權限的目錄(目錄權限777)來說:每個用戶都能在這個目錄里面創建文件,但是只能刪除或移動自己創建的文件

二、粘滯位應用
設置了粘滯位t權限的目錄,使用ls命令查看其屬性時,其他用戶權限位置的"x"將變為"t"。

查看/tmp、 /var/tmp目錄本身的權限,確認存在"t"標記。
[root@ss-server ~]# ll -d /tmp/
drwxrwxrwt. 8 root root 4096 Dec  6 03:46 /tmp/
[root@ss-server ~]# ll -d /var/tmp/
drwxrwxrwt. 3 root root 4096 Dec  3 20:18 /var/tmp/

粘滯位t權限都是針對其他用戶(other)設置,使用chmod命令設置目錄權限時,"o+t"、"o-t"權限模式可分別用於添加、移除粘滯位權限。

設置粘滯位權限方法
# chomd o+t
# chomd 1777

刪除粘滯位權限方法
# chomd o-t

設置粘滯位t權限示例:

1)創建粘滯位t權限之前
用root身份創建/opt/kevin目錄,並用參數-m 為它指定權限為777(可讀,可寫,可執行),並且所屬者和所屬組都是root。
[root@ss-server ~]# mkdir -m 777 /opt/kevin/          #-m參數表示mkdir創建時指定目錄權限,省略了創建后再chmod授權("相當於chmod 777 /opt/kevin")
[root@ss-server ~]# ll -d /opt/kevin/
drwxrwxrwx 2 root root 4096 Dec  6 16:17 /opt/kevin/

接着在該目錄下新建兩個文件,權限為默認。因為其他用戶other對/opt/kevin目錄具有w權限,所以可以刪除目錄內容。
[root@ss-server kevin]# touch test1 test2
[root@ss-server kevin]# ll
total 0
-rw-r--r-- 1 root root 0 Dec  6 16:19 test1
-rw-r--r-- 1 root root 0 Dec  6 16:19 test2

切換到名為linan的普通用戶,嘗試去刪除剛剛在root下新建的兩個文件test1 和 test2。經過實踐,發現可以刪除。
[root@ss-server ~]# su - linan
Last login: Fri Dec  6 16:21:48 CST 2019 on pts/21
[linan@ss-server ~]$ cd /opt/kevin/
[linan@ss-server kevin]$ ll
total 0
-rw-r--r-- 1 root root 0 Dec  6 16:33 test1
-rw-r--r-- 1 root root 0 Dec  6 16:33 test2
[linan@ss-server kevin]$ 
[linan@ss-server kevin]$ ll
total 0
-rw-r--r-- 1 root root 0 Dec  6 16:33 test1
-rw-r--r-- 1 root root 0 Dec  6 16:33 test2
[linan@ss-server kevin]$ echo "123" > test1
-bash: test1: Permission denied
[linan@ss-server kevin]$ echo "123" >> test1
-bash: test1: Permission denied
[linan@ss-server kevin]$ mv test1 test11
[linan@ss-server kevin]$ ll
total 0
-rw-r--r-- 1 root root 0 Dec  6 16:33 test11
-rw-r--r-- 1 root root 0 Dec  6 16:33 test2
[linan@ss-server kevin]$ rm -rf test11
[linan@ss-server kevin]$ rm -rf test2
[linan@ss-server kevin]$ ll
total 0
[linan@ss-server kevin]$ 

需要注意:
1. 這時候其他普通用戶對/opt/kevin目錄下的文件可以進行刪除和更名權限!盡管這些文件的other用戶是r--,因為/opt/kevin目錄在其他用戶這一權限欄是rwx,
   即普通用戶對/opt/kevin目錄有可寫權限。目錄可寫權限是指可對目錄下的文件進行刪除、新建和更名操作。
2. 但是此時,普通用戶對/opt/kevin目錄下的文件本身不能進行修改操作,因為/opt/kevin目錄下的文件自身的其他用戶這一權限欄是r--。
   如果文件權限對其他普通用戶設置了可寫權限,可就能進行文件修改操作!

===========================================================================================================================================
2)創建粘滯位t權限之后
回到root用戶下,給/opt/kevin目錄加上粘滯位再次查看目錄,發現other的x權限變為t,說明添加粘滯位成功。
[linan@ss-server kevin]$ logout
[root@ss-server ~]# cd /opt/kevin/
[root@ss-server kevin]# ll -d
drwxrwxrwx 2 root root 4096 Dec  6 16:34 .
[root@ss-server kevin]# chmod o+t .             #或者直接執行"chmod o+t /opt/kevin"
[root@ss-server kevin]# ll -d      
drwxrwxrwt 2 root root 4096 Dec  6 16:34 .

依舊在該目錄下重新新建兩個文件 test1 和 test2。
[root@ss-server kevin]# touch test1 test2
[root@ss-server kevin]# ll 
total 0
-rw-r--r-- 1 root root 0 Dec  6 16:37 test1
-rw-r--r-- 1 root root 0 Dec  6 16:37 test2

再次切換到其他普通用戶下,嘗試對在/opt/kevin目錄設置粘滯位權限后創建的文件test1 和 test2進行刪除或更名操作。 
結果發現不能刪除或更名文件!! (即使給文件授予777權限也不行)
可以證實粘滯位給其它用戶帶來的安全限制。
[root@ss-server kevin]# su - linan
Last login: Fri Dec  6 16:33:29 CST 2019 on pts/22
[linan@ss-server ~]$ cd /opt/kevin/
[linan@ss-server kevin]$ ll
total 0
-rw-r--r-- 1 root root 0 Dec  6 16:37 test1
-rw-r--r-- 1 root root 0 Dec  6 16:37 test2
[linan@ss-server kevin]$ rm -rf test1               
rm: cannot remove ‘test1’: Operation not permitted
[linan@ss-server kevin]$ rm -rf test2
rm: cannot remove ‘test2’: Operation not permitted
[linan@ss-server kevin]$ mv test1 test11
mv: cannot move ‘test1’ to ‘test11’: Operation not permitted
[linan@ss-server kevin]$ mv test2 test22
mv: cannot move ‘test2’ to ‘test22’: Operation not permitted

即使上面給test1、test1文件授予777權限,那么其他用戶也不能刪除或移動這兩個文件!!!

為了進一步證實文件所有者和root依舊可以刪除。用root對該文件進行刪除操作。結果發現,依舊可以正常刪除。
[linan@ss-server kevin]$ logout
[root@ss-server kevin]# ll
total 0
-rw-r--r-- 1 root root 0 Dec  6 16:37 test1
-rw-r--r-- 1 root root 0 Dec  6 16:37 test2
[root@ss-server kevin]# rm -rf test1
[root@ss-server kevin]# rm -rf test2
[root@ss-server kevin]# ll -d
drwxrwxrwt 2 root root 4096 Dec  6 16:48 .

再來驗證下,當文件對other用戶有可寫權限的時候,粘滯位t權限的保護作用!
[root@ss-server kevin]# ll -d
drwxrwxrwt 2 root root 4096 Dec  6 17:00 .
[root@ss-server kevin]# touch test1 test2
[root@ss-server kevin]# chmod 777 test1
[root@ss-server kevin]# chmod 777 test2
[root@ss-server kevin]# ll
total 0
-rwxrwxrwx 1 root root 0 Dec  6 17:00 test1
-rwxrwxrwx 1 root root 0 Dec  6 17:00 test2

[root@ss-server kevin]# su - linan
Last login: Fri Dec  6 16:54:47 CST 2019 on pts/20
[linan@ss-server ~]$ cd /opt/kevin/
[linan@ss-server kevin]$ ll -d .
drwxrwxrwt 2 root root 4096 Dec  6 17:00 .
[linan@ss-server kevin]$ ll
total 0
-rwxrwxrwx 1 root root 0 Dec  6 17:00 test1
-rwxrwxrwx 1 root root 0 Dec  6 17:00 test2
[linan@ss-server kevin]$ echo "123" > test1
[linan@ss-server kevin]$ echo "123" >> test2
[linan@ss-server kevin]$ rm -rf test1
rm: cannot remove ‘test1’: Operation not permitted
[linan@ss-server kevin]$ mv test2 test22
mv: cannot move ‘test2’ to ‘test22’: Operation not permitted

可以看出,盡管test1、test2文件設置了777權限,但是由於它們所在目錄/opt/kevin設置了粘滯位t權限!
則其他用戶均不能對這兩個文件執行rm和mv操作!!!!

再次回到root賬號下,刪除test1、test2文件
[linan@ss-server kevin]$ logout
[root@ss-server kevin]# ll
total 8
-rwxrwxrwx 1 root root 4 Dec  6 17:00 test1
-rwxrwxrwx 1 root root 4 Dec  6 17:01 test2
[root@ss-server kevin]# rm -rf test1
[root@ss-server kevin]# rm -rf test2
[root@ss-server kevin]# ll
total 0
[root@ss-server kevin]# ll -d .
drwxrwxrwt 2 root root 4096 Dec  6 17:01 .

根據以上示例,可以得出結論
當一個目錄被設置為"粘滯位"的t權限后,則該目錄下的文件只能由  
1. 超級管理員(root)刪除或移動/更名(rm或mv)  
2. 該目錄或文件的所有者刪除或移動/更名(rm或mv)

需要注意
1. 雖然目錄有了粘滯位t權限,other用戶不能對該目錄的文件進行刪除或者移動操作,但是如若other對該文件由w權限,還是可以進行修改文件內容的。
2. 粘滯位只對目錄有效,對文件無效。

刪除粘滯位t權限的設置

[root@ss-server kevin]# chmod o-t /opt/kevin/        
[root@ss-server kevin]# ll -d .
drwxrwxrwx 2 root root 4096 Dec  6 17:01 .


免責聲明!

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



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