利用粘著位 防止Unix中文件被惡意刪除
企業有時候出于項目的需要,會臨時組成一個項目小組來完成某個特定的項目。此時項目小組要求各個項目小組成員多某個目錄具有讀寫的權限,可以往這個目錄中建立文件,可以閱讀他人創建的文件。但是有一個限制,即不能夠刪除他人建立的文件。如下面所示,現在系統工程師為某個項目專門建立了一個item的目錄。
在這個目錄下有兩個文件,分別為urr001與tgt001,分別是用戶SA01與用戶SA02創建的。現在企業的要求是,無論是用戶SA01還是用戶SA02,都可以在這個目錄中創建文件;SA01也可閱讀文件tgt001(所有權是SA02)的文件;但是SA01不能夠刪除文件tgt001.
目錄:/item文件 urr001 所有者 SA02文件 tgt001 所有者 SA01
也許有系統工程師會對這個需求感到懷疑,這可以實現嗎?答案是肯定的。通過Unix操作系統提供的粘著位功能,就可以輕松實現這個功能。
一、粘著位與文件的關系。
粘著位,又稱保存文本位,其實就是一個權限控制屬性。通常情況下,粘著位即可以用在普通文件上,也可以用在目錄文件上。當用在普通文件上時,粘著位可以把某個程序文件的SUID置位。并且它的文本映像將***保存在交換區里。如此的話,當程序獲得了CPU使用權時,就可以快速的裝載到內存中。
故粘著位可以提高系統程序的運行效率。如有些版本的Unix系統,就把vi等常用的程序文件的粘著位設置為1,就明顯提高了這些應用程序的運行效率。不過現在很少用到這個特性。因為現在磁盤讀寫速度已經達到***;而且內存的價格也便宜。也就是說,現在磁盤速度與內存往往已經不是系統的瓶頸資源,故為普通文件設置粘著位已經沒有特殊的必要了。為此筆者現在在系統設置中,基本上不會為普通文件設置粘著位。
那么粘著位不是無用武之地了嗎?其實不然。雖然在普通文件上設置粘著位沒有實際的應用價值,但是在目錄文件上設置粘著位還是很有用的。如文章一開頭筆者所闡述的內容,就需要通過粘著位來實現。簡單的說,當粘著位與目錄文件結合時,能夠實現一些讓人想都想不到的安全措施。
二、粘著位在/var/tmp目錄中的應用。
當粘著位應用在目錄文件上時,它便成為了一個有用的安全措施。其實在Unix系統中,就有一個很好的案例可以幫助我們來了解粘著位與目錄文件結合的作用。如/var/tmp目錄,只要用來存儲用戶或者應用程序的臨時文件。通常情況下,這個目錄允許所有的用戶創建文件,但是任何用戶不能夠刪除其他用戶建立的文件。很多系統管理員剛接觸Unix系統的時候,會對這個功能感到疑惑。筆者在對學員進行培訓時,也往往把這個內容放在后面進行介紹,免得搞得學員頭昏腦漲。其實這就是粘著位在起作用。為了說明白粘著位到底在其中扮演者什么角色,我們可以利用命令ls -ld /var/tmp/ 來看一下這個目錄的權限信息。
drwxrwxrwt 3 root root 4096 Apr 3 13:39 /var/tmp/
看到這個結果,大家是否會感到奇怪。“drwxrwxrwt”這個表示某個目錄文件的權限信息。其中***個字符d表示這是一個目錄文件,第二個到底四個字符rwx表示目錄的所有者對這個目錄具有讀寫執行的權限,即完全控制權限;第五個字符到第七個字符rwx表示組成員對這個目錄具有讀寫執行的權限;第八個字符到第七個字符是用來表示其他用戶對這個目錄文件的權限,原來也應該是rwx或者rw-的。但是這里***一個字符卻變為了t.其實這個t就是粘著位。上面這個文件的權限信息,就是表示任何用戶對這個目錄都具有寫入的權限(即可以創建文件)。但是由于多了一個粘著位,則某個用戶就不能夠刪除其他用戶創建的文件(即用戶只能夠刪除所有權為自己創建的文件)。
可見利用粘著位能夠防止其他用戶對文件進行惡意刪除。這個功能在實際工作中非常有用。如文章開頭所闡述的,現在企業需要開發一個新項目而從各個部門抽調人員組成一個新的項目小組。現在企業希望各個項目小組成員都能夠往一個為項目建立的文件夾中建立文件,但是不能夠刪除其他用戶的文件,而只能夠刪除自己創建的文件。此時就可以利用粘著位來實現。
三、粘著位的具體實現過程。
掌握了以上粘著位的基本功用后,筆者就給大家談談如何來應用粘著位防止文件被惡意刪除。粘著位在小組項目管理中非常有用。他允許一組用戶對同一組文件(同一個目錄下的文件)進行有限操作(閱讀、創建文件),而不影響文件的安全性(不能夠隨意被刪除)。如現在企業為了開發一個新項目成立了一個項目小組,名字為item.為了統一管理這個項目的相關文檔,系統工程師在Unix操作系統上建立了一個/item的目錄文件。在項目開發的過程中,所有跟這個項目有關的文檔都保存在這個目錄中。假設現在這個項目小組的成員有兩個,分別為SA01與SA02.企業現在需要實現如下幾個需求。一是用戶SA01與用戶SA02都可以往這個目錄中保存或者創建文件。二是用戶SA01能夠刪除自己創建的文件;用戶SA02也可以刪除自己創建的文件。三是用戶SA01不能夠刪除用戶SA02創建的文件,反之亦然。四是用戶SA01可以閱讀用戶SA02創建的文件,反之亦然。要實現如上需求的話,按一下幾個步驟操作即可。
***步:創建一個組。由于需要對多個用戶進行粘著位的設置,為此為了管理的方便,***把多個用戶納入到一個組中進行管理。為此系統工程師***在Unix操作系統中建立一個用戶組,以減少后續維護的工作量。故系統工程師要在/etc/group文件中創建一個公共組,如item組。
第二步:為這些用戶創建各自的帳號。在Unix系統中,為用戶創建賬號時,比Windows操作系統要復雜一點。如還需要制定用戶的主目錄。這里的主目錄是指當這個用戶登錄到Unix操作系統時默認的系統目錄。為了實現如上的功能,系統工程師需要在創建帳戶的時候,為這些帳戶設置同一個主目錄,如item等等。這里要注意一點,即這個主目錄與它下面所有的子目錄文件不能夠為某個用戶獨占。為此筆者往往把這些目錄與子目錄文件的所有權轉移給root用戶。
第三步:然后利用root用戶的身份來設置這些目錄的組的可讀權限。有時候可能要求同組的成員對與這個目錄的文件除了閱讀之外,還需要修改。具體是否可以允許同組成員進行修改,系統工程師可以根據自己的需要進行修改。不過根據筆者的經驗,大部分情況下企業是允許同個項目小組的成員對項目文件具有修改權。
第四步:設置粘著位。以上這些準備工作都做好之后,系統工程師就可以對item這個目錄文件設置粘著位。設置很簡單,只需要在原有權限屬性上面增加一個1值即可。如通過絕對權限設置的話,就可以利用chmod 1775 /item即可。如果使用相對權限設置的話,那么就可以使用chmod +t即可。執行這個命令之后,就會這個目錄文件設置了粘著位。如此,除非了文件的所有者,否則其他用戶將無法刪除這個文件。
可見,雖然時過境遷,粘著位跟普通文件結合,已經發揮不了其應有的作用。但是,其跟目錄文件結合,仍然是一個有用的安全措施。特別是企業在項目管理中,通過粘著位可以實現允許一組用戶對同一組文件進行操作,而同時又能夠保障他們的安全性。
【編輯推薦】