Linux中的特殊權限粘滯位(sticky bit)詳解


Linux下的文件權限

在linux下每一個文件和目錄都有自己的訪問權限,訪問權限確定了用戶能否訪問文件或者目錄和怎樣進行訪問。最為我們熟知的一個文件或目錄可能擁有三種權限,分別是讀、寫、和執行操作,在這里不做詳細說明。我們創建一個文件后系統會默認地賦予所有者讀和寫權限。當然我們也可以自己修改它,添加自己需要的權限。

特殊權限

但是這三種權限就足夠了嗎?我們現在來說說在linux下的另一個特殊權限。首先我們來看看在根目錄下的一個目錄tmp,可以看到tmp目錄的other權限是'rwt',那么這里的t又是什么權限呢,有什么意義。

在理解這個權限之前我們先來看看tmp這個目錄是存放什么東西的,linux下tmp目錄是存放一些臨時文件的,那么上圖可以看到,該目錄的所有者和組用戶的權限都是rwx,對於other的權限是rwt。

我們知道如果一個目錄的other權限設置有寫和執行權限的話,那么別的用戶也是可以在該目錄下進行創建文件和刪除文件等操作,我們來試一試:

現在是root用戶,在它的根目錄下創建了一個cur目錄,並且賦予了777權限。

之后再給cur目錄下新建了test1和test2兩個文件,而此時我們可以看到這兩個文件的other權限只有一個讀權限。

現在我們切換用戶到dh用戶下,試着刪除剛剛新建的文件,發現是完全可以刪除的。那么這就存在了一個問題,像/tmp目錄的權限是應該設置成"rwxrwxrwx"的,因為它要允許任何用戶都能在該目錄下創建、刪除、移動文件等操作。但我們剛剛也看到了,我的dh用戶是可以刪除root用戶在cur目錄下創建的文件夾,那么對於tmp目錄,任意用戶都可以刪除系統服務運行中的臨時文件(別的用戶的),那么這肯定是我們不想要的。

所以回到最初,我們看到tmp目錄的權限是"rwxrwxrwt",這里的t就起了相當重要的作用。

粘滯位(粘着位)

上面所說的t權限就是我們在這里要講的粘滯位(sticky bit),我們給剛剛的cur目錄采用chmod o+t的方式給other用戶設置粘滯位。

然后我們繼續切換到dh用戶,看看我們能否繼續之前的刪除操作:

可以看到此時我們是沒有權限刪除root用戶創建的文件了,這也就是粘滯位的作用。

粘滯位權限便是針對此種情況設置,當⽬錄被設置了粘滯位權限以后,即便⽤戶對該⽬錄有寫⼊權限,也不能刪除該⽬錄中其他⽤戶的⽂件數據,⽽是只有該⽂件的所有者和root⽤戶才有權將其刪除。設置了粘滯位之后,正好可以保持⼀種動態的平衡:允許各⽤戶在⽬錄中任意寫⼊、刪除數據,但是禁⽌隨意刪除其他⽤戶的數據。

幾點說明

對於特殊權限的添加是添加在原有的執行權限上的,所以特殊權限添加的要求需要文件或者目錄本身具有可執行權限。

上圖中,我去掉了cur的other的執行權限,可以看到本來't'的位置變成了'T',此時dh用戶在cur目錄中是不具有權限來進行一系列操作的。

那么原來的執行標志x到哪里去了呢? 系統是這樣規定的, 假如本來在該位上有x, 則這些特別標志 (suid, sgid, sticky) 顯示為小寫字母 (s, s, t).否則, 顯示為大寫字母 (S, S, T) 。  

注意事項

》粘滯位權限是針對目錄的,對文件無效

上述的這些操作是在root用戶下創建了一個test.c文件,然后添加了t權限,然而在dh用戶下還是可以直接進行刪除的。所以粘滯位是針對有執行權限的目錄的,對於文件添加粘滯位並沒有什么作用。

 

 

 

 

 

 

文章原創作者:Mr_Listening https://home.cnblogs.com/u/MrListening/


免責聲明!

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



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