首頁 > 軟體

Linux中的特殊許可權黏滯位(sticky bit)詳解

2020-06-16 17:34:22

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使用者下還是可以直接進行刪除的。所以黏滯位是針對有執行許可權的目錄的,對於檔案新增黏滯位並沒有什麼作用。

本文永久更新連結地址http://www.linuxidc.com/Linux/2016-08/134738.htm


IT145.com E-mail:sddin#qq.com