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