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/
http://xxxxxx/Linuxjc/1153857.html TechArticle