今天維護系統時發現一個非常詭異的問題:AAA使用者和BBB使用者同屬AAA組,但用AAA使用者建立的檔案,許可權設定為777後,還是不能用BBB使用者刪除。詭異!
幾經週轉,發現AAA使用者建立檔案位置的上層目錄的許可權是drwxrwxrwt,做開發這麼多年了,還沒見過所謂”t”的許可權,於是找了一位公司的linux大師幫忙,大師噼裡啪啦的做了一堆試驗後,然後在google上搜尋”rwt linux”,終於發現了問題,發現這種用法的名字是“檔案的粘滯位(sticky)位“。它的作用是:普通檔案的sticky位會被linux核心忽略,但
目錄的sticky位表示這個目錄裡的檔案只能被owner和root刪除,沒錯這就是問題本質,也和我的現象相吻合。於是用root使用者,對這個資料夾chmod -t 後,用BBB使用者就可以刪除剛才AAA使用者建立的檔案了。一切正常了。哇。。。。世界太平了!真是長見識了。所以將這個知識點整理如下:
檔案的粘滯位(sticky)位是作什麼用的? 普通檔案的sticky位會被linux核心忽略, 目錄的sticky位表示這個目錄裡的檔案只能被owner和root刪除 粘著位(Sticky bit) 如果使用者對目錄有寫許可權,則可以刪除其中的檔案和子目錄,即使該使用者不是這些檔案的所有者,而且也沒有讀或寫許可。粘著位出現執行許可的位置上,用t表示,設定了該位後,其它使用者就不可以刪除不屬於他的檔案和目錄。但是該目錄下的目錄不繼承該許可權,要再設定才可使用。 # chmod 1770 xxx 舉一個linux下的常見目錄來做例子,也就是 /tmp 目錄來說一下粘連位的作用。 #ls -dl /tmp drwxrwxrwt 4 root root ......... 注意other位置的t,這便是粘連位。 我們都知道,/tmp常被我們用來存放臨時檔案,是所有使用者。但是我們不希望別的使用者隨隨便便的就刪除了自己的檔案,於是便有了粘連位,它的作用便是讓使用者只能刪除屬於自己的檔案。 那麼原來的執行標誌x到哪裡去了呢? 系統是這樣規定的, 假如本來在該位上有x, 則這些特別標誌 (suid, sgid, sticky) 顯示為小寫字母 (s, s, t). 否則, 顯示為大寫字母 (S, S, T) 。 3)粘著位(sticky) eg: chmod 777 abc chmod +t abc 等價於 chmod 1777 abc 在以前舊的系統當中,如果一個程式檔案一旦設定了粘著位, 那麼當該程式中止的時候他的所有指令段將被儲存到系統的交換分割槽當中, 再次執行時可以更快的調入系統. 不過現在的作業系統已經不再使用這種功能了. 但這並不表示這一功能已經完全被廢棄. 當一個目錄設定為粘著位時,它將發揮特殊的作用, 即當一個目錄被設定為"粘著位"(用chmod a+t),則該目錄下的檔案只能由 一、超級管理員刪除 二、該目錄的所有者刪除 三、該檔案的所有者刪除 也就是說,即便該目錄是任何人都可以寫,但也只有檔案的屬主才可以刪除檔案。
保持更新,資源來源自網路。