今天維護系統時發現一個非常詭異的問題:AAA用戶和BBB用戶同屬AAA組,但用AAA用戶創建的文件,許可權設置為777後,還是不能用BBB用戶刪除。詭異! 幾經周轉,發現AAA用戶創建文件位置的上層目錄的許可權是drwxrwxrwt,做開發這麼多年了,還沒見過所謂"t"的許可權,於是找了一位公司的linu ...
今天維護系統時發現一個非常詭異的問題: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),則該目錄下的文件只能由 一、超級管理員刪除 二、該目錄的所有者刪除 三、該文件的所有者刪除 也就是說,即便該目錄是任何人都可以寫,但也只有文件的屬主才可以刪除文件。
保持更新,資源來源自網路。