在 Linux 操作系統下針對目錄和文件除了經典的UGO 權限模型和文件系統特殊權限ACL(包括NFS4 ACL)外,在一些特殊的場合下有些特殊的需求上面的兩種方案還不足夠,下面就介紹三種權限方案(粘滯位,SUID,SGID)以及對應的使用場景,該篇主要講粘滯位。
粘滯位
場景:在linux系統中,當你需要在一個public的目錄下下分享一個文件給大家,但又不希望別人修改,重命名或者刪除它怎麼辦?
題外知識補充:首先爲什麼需要在一個public的目錄下呢?目地是保證這個目錄別人也能進去,別人也可能需要在裏面分享一些文件,所以需要保證這個public的目錄有rwx-rwx-rwx的權限,那是不是意味着任何人都可以刪除這個public目錄呢,並不是,決定是否有刪除或者重命名目錄或文件的是你是否有要刪除對象的父目錄owner權限或者rwx權限,就比如/tmp 目錄,任何人都可以在裏面創建文件,但除了root其他用戶都無法刪除/tmp;另外針對文件,即使用戶對文件有rwx的權限,但對上層父目錄只有rx的權限,那這個用戶只能更新這個文件,並沒有刪除或重命名這個文件的權限。
針對這個場景Linux提供了粘滯位的方案,設置方法如下:
chmod +t <目錄名>

設置完之後可以看到teststick目錄權限標記位有個t,這是因爲之前這個位置有x權限,如果之前這個位置是-,這個時候應該會顯示T。
我們來驗證下:
發現即使cs用戶對操作的文件的父目錄及文件都有rwx權限,但因爲父目錄被標記了粘滯位,所以沒有權限刪除這個文件,但試了下更新文件倒是可以,如果要禁止更新文件,可能只能去除w權限了,但不清楚/tmp目錄下同樣的權限配置,文件設置成rwx,爲何依然可以禁止更新文件?難道僅僅是因爲/tmp的owner是root? 有清楚的小夥伴可以留言告知。