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