檔案的粘滞位(sticky)位是作什麼用的?
粘滞位(Stickybit),又稱粘着位,是Unix檔案系統權限的一個旗标。最常見的用法在目錄上設定粘滞位,也隻能針對⽬設定,對于⽂件⽆效。則設定了粘滞位後,隻有目錄内檔案的所有者或者root才可以删除或移動該檔案。如果不為目錄設定粘滞位任何具有該目錄寫和執行權限的使用者都可以删除和移動其中的檔案。實際應用中,粘滞位一般用于/tmp目錄,以防止普通使用者删除或移動其他使用者的檔案。
我們進行下面的操作:
#以root使用者的身份建立/sbit目錄,在/sbit目錄中建立檔案feil,并檢視其預設權限。
#給目錄sbit賦予777權限
#以普通使用者long的身份登入系統,可以删除/feil。
rm:是否删除有寫保護的普通空檔案 "/feil"?y
通過上面的操作可以發現,雖然普通使用者long對檔案/feil隻具備“r--”權限,但因為從/sbit目錄獲得了“rwx”權限,因而仍然可以将/feil删除。
在Linux系統中比較典型的例如就是“/tmp”、 “/var/tmp”⽬錄。這兩個目錄作為Linux系統的臨時檔案夾,權為“rwxrwxrwx”,即允許任意使用者、任意程式在該目錄中進行建立、删除、移動檔案或子目錄等操作。然而試想一下,若任意一個普通使用者都能夠删除系統服務運作中使用的臨時檔案,将造成什麼結果?
粘滞位權限便是針對此種情況設定,當目錄被設定了粘滞位權限以後,即便使用者對該目錄有寫的權限,也不能删除該目錄中其他使用者的檔案資料,而是隻有該檔案的所有者和root使用者才有權将其删除。設定了粘滞位之後,正好可以保持這種動态的平衡:允許各使用者在目錄中任意寫入、删除資料,但是禁止随意删除其他使用者的資料。
但是該目錄下的目錄不繼承該粘滞位權限,要再設定才可使用。也隻能針對目錄設定,對于檔案無效。則設定了粘滞位後,隻有目錄内檔案的所有者或者root才可以删除或移動該檔案。如果不為目錄設定粘滞位,任何具有該目錄寫和執行權限的使用者都可以删除和移動其中的檔案。
需要注意的是:粘滞位權限隻能針對目錄設定,對于檔案無效。
設定了粘滞位權限的目錄,使用ll指令檢視其屬性時,其他使用者權限處的“x”将變為“t”。
例如,檢視/tmp、/var/tmp目錄本身的權限,确認存在“t”标記。
粘滞位權限都是針對其他使用者(other)設定,使用chmod指令設定目錄權限時,“o+t”、“o-t”權限模式可分别用于添加、移除粘滞位權限。
例如,為/sbit目錄設定粘滞位權限。
此時普通使用者long便無法删除/feil檔案了。
[[email protected] sbit]$ rm /feil
rm:是否删除有寫保護的普通空檔案 "/test/file1"?y
rm: 無法删除"/test/file1": 不允許的操作
即當一個目錄被設定為"粘着位"(用chmod a+t),則該目錄下的檔案隻能由
一、超級管理者删除
二、該目錄的所有者删除
三、該檔案的所有者删除
也就是說,即便該目錄是任何人都可以寫,但也隻有檔案的屬主才可以删除檔案。
粘滞位權限在生産環境中也被廣泛應用,當需要為使用者提供一個開放目錄而又不希望造成管理混亂時,通過為目錄設定粘滞位權限便可以解決問題。