Linux下的文件許可權 在linux下每一個文件和目錄都有自己的訪問許可權,訪問許可權確定了用戶能否訪問文件或者目錄和怎樣進行訪問。最為我們熟知的一個文件或目錄可能擁有三種許可權,分別是讀、寫、和執行操作,在這裡不做詳細說明。我們創建一個文件後系統會預設地賦予所有者讀和寫許可權。當然我們也可以自己修改它,添 ...
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/