專利名稱::安全操作系統(tǒng)中防止文件客體重用的方法
技術(shù)領(lǐng)域:
:本發(fā)明涉及安全操作系統(tǒng)(OS)設(shè)計(jì)領(lǐng)域,尤其涉及一種安全操作系統(tǒng)中防止文件客體重用的方法。
背景技術(shù):
:操作系統(tǒng)中的客體重用,是指客體在被釋放(或刪除)時(shí),僅僅釋放該客體在文件系統(tǒng)中的索引,而所占用的磁盤塊中的內(nèi)容并未清空。當(dāng)創(chuàng)建新的客體時(shí),有可能利用到以前客體中的內(nèi)容,例如磁盤塊,從而造成信息泄漏。所述客體,具體指磁盤文件,即存儲(chǔ)在可擦寫介質(zhì)上(一般為磁盤)上的具有索引結(jié)構(gòu)的文件系統(tǒng)上的文件,也包括一部分內(nèi)存中的文件系統(tǒng),如ramfs、ramdisk上的文件系統(tǒng)等。客體的重用是使用索引文件系統(tǒng)的操作系統(tǒng)中典型的安全漏洞之一,由于索引文件系統(tǒng)的固有結(jié)構(gòu),為了性能需要,客體的創(chuàng)建和刪除一般僅僅更新索引項(xiàng),這就造成了客體內(nèi)容可能復(fù)用的問題。例如=Linux操作系統(tǒng),出于性能的考慮,對(duì)于資源的管理采用即時(shí)分配和丟棄方式,通過指針、掩碼等方式表示資源的分配情況,而不是將資源真正的分配和回收。以磁盤文件為例,在安全操作系統(tǒng)所支持的ext3文件系統(tǒng)上,文件是以i節(jié)點(diǎn)存儲(chǔ)的,每個(gè)i節(jié)點(diǎn)指示了該文件所有的磁盤塊;而i節(jié)點(diǎn)和磁盤塊均是以掩碼方式標(biāo)識(shí)該塊的使用情況。當(dāng)用戶刪除文件時(shí),只是將相應(yīng)的i節(jié)點(diǎn)掩碼和磁盤塊掩碼去掉,而該文件的內(nèi)容仍然還存儲(chǔ)在磁盤塊上,該磁盤塊并不會(huì)被清空。因此當(dāng)其他用戶創(chuàng)建一個(gè)新的文件時(shí),這些磁盤塊有可能被分配到該文件,用戶讀取該文件時(shí),就可能讀到原來的文件中的部分內(nèi)容,即發(fā)生了信息泄漏。操作系統(tǒng)中除了磁盤文件外,還有其他客體,如動(dòng)態(tài)內(nèi)存、IPC對(duì)象等,由于頻繁的分配和回收機(jī)制并不改變其內(nèi)容,因此也會(huì)造成信息泄漏。其中最重要的客體是磁盤文件。由于多任務(wù)操作系統(tǒng)中對(duì)文件的操作涉及到的場(chǎng)景比較復(fù)雜,涉及一個(gè)進(jìn)程多次打開文件、多個(gè)進(jìn)程打開一個(gè)文件、硬鏈接等各種各樣的場(chǎng)景,而不能僅僅由刪除客體的發(fā)起者做簡(jiǎn)單的清空,因此解決客體重用的方法一般都是在程序做文件刪除的系統(tǒng)調(diào)用時(shí),由操作系統(tǒng)內(nèi)核將文件內(nèi)容清空,以保證該操作的原子性,而不會(huì)造成用戶態(tài)程序的同步問題。在現(xiàn)有的操作系統(tǒng)內(nèi)核中,執(zhí)行刪除的系統(tǒng)調(diào)用前將文件清空的做法比較簡(jiǎn)單,保證清空和刪除這兩個(gè)操作的原子性,不會(huì)影響到其他進(jìn)程訪問該文件產(chǎn)生的異常行為。但是,由于輸入/輸出(I/o)系統(tǒng)調(diào)用的不可重入性,在這兩個(gè)操作完成前,內(nèi)核無(wú)法返回用戶態(tài),當(dāng)前處理器上的其他所有進(jìn)程均會(huì)阻塞,從而嚴(yán)重的影響性能。尤其是在刪除較大的文件時(shí),將導(dǎo)致操作系統(tǒng)停止響應(yīng)等嚴(yán)重問題。因此,從這個(gè)意義上講,惡意的大文件刪除操作導(dǎo)致系統(tǒng)性能降低也是一種攻擊。
發(fā)明內(nèi)容有鑒于此,本發(fā)明所要解決的技術(shù)問題在于提供一種安全操作系統(tǒng)中防止文件客體重用的方法,以解決現(xiàn)有的防止客體重用技術(shù)中的性能缺陷(如由于內(nèi)核的工作過于集中導(dǎo)致防止客體重用策略失效等),通過將大量操作系統(tǒng)內(nèi)核的工作轉(zhuǎn)移到用戶態(tài)程序,并通過設(shè)計(jì)嚴(yán)格的同步機(jī)制,使多任務(wù)環(huán)境下不會(huì)產(chǎn)生同步問題,以改善系統(tǒng)運(yùn)行的性能和避免在防止文件客體重用時(shí)引起的信息泄露。為解決上述技術(shù)問題,本發(fā)明一方面提供了一種安全操作系統(tǒng)中防止文件客體重用的方法,其特征在于,當(dāng)應(yīng)用程序需要?jiǎng)h除文件客體時(shí),首先所述應(yīng)用程序通過fcount系統(tǒng)調(diào)用從系統(tǒng)內(nèi)核獲取所述需要被刪除文件客體的引用計(jì)數(shù);當(dāng)引用計(jì)數(shù)為O時(shí),文件操作系統(tǒng)調(diào)用對(duì)該文件客體設(shè)置互斥機(jī)制,并將被刪除文件客體內(nèi)容清空。進(jìn)一步,本發(fā)明所述的安全操作系統(tǒng)中防止文件客體重用的方法,其特征在于獲取所述需要被刪除文件客體的引用計(jì)數(shù)的方式為通過路徑獲取對(duì)應(yīng)文件客體的引用計(jì)數(shù)或者通過文件描述符獲取對(duì)應(yīng)的文件客體的引用計(jì)數(shù)。進(jìn)一步,本發(fā)明所述的安全操作系統(tǒng)中防止文件客體重用的方法,其特征在于,所述fcount系統(tǒng)調(diào)用包括兩個(gè)操作常量FC0P_FD和FC0P_PATH;其中,對(duì)于獲取一個(gè)路徑名表示的文件客體,要獲得其引用計(jì)數(shù),則傳入FC0P_PATH和相應(yīng)的路徑;對(duì)于獲取一個(gè)文件描述符對(duì)應(yīng)的文件客體,則通過傳入FC0P_FD和文件描述符得到其引用計(jì)數(shù)。進(jìn)一步,本發(fā)明所述的安全操作系統(tǒng)中防止文件客體重用的方法,其特征在于,所述文件操作系統(tǒng)調(diào)用為unlink操作。進(jìn)一步,本發(fā)明所述的安全操作系統(tǒng)中防止文件客體重用的方法,其特征在于,所述文件操作系統(tǒng)調(diào)用為close操作。進(jìn)一步,本發(fā)明所述的安全操作系統(tǒng)中防止文件客體重用的方法,其特征在于,所述文件操作系統(tǒng)調(diào)用為_exit操作。進(jìn)一步,本發(fā)明所述的安全操作系統(tǒng)中防止文件客體重用的方法,其特征在于,所述將被刪除文件客體內(nèi)容清空的方式為將文件客體所占用的磁盤空間內(nèi)容填寫為零。進(jìn)一步,本發(fā)明所述的安全操作系統(tǒng)中防止文件客體重用的方法,其特征在于,所述互斥機(jī)制為互斥鎖機(jī)制,所述互斥鎖機(jī)制由文件操作鎖提供,所述文件操作鎖由文件操作系統(tǒng)調(diào)用提供。進(jìn)一步,本發(fā)明所述的安全操作系統(tǒng)中防止文件客體重用的方法,其特征在于所述文件操作鎖包括加鎖操作、解鎖操作和等待鎖操作其中,執(zhí)行所述加鎖操作后,任何對(duì)該鎖的等待都會(huì)被阻塞;執(zhí)行所述解鎖操作后,將文件鎖解除,任何對(duì)該鎖的等待不會(huì)發(fā)生阻塞,并立即返回;執(zhí)行所述等待鎖操作,嘗試等待一個(gè)鎖,其操作結(jié)果是阻塞或返回。本發(fā)明所提供的安全操作系統(tǒng)中防止文件客體重用的方法,具有以下優(yōu)點(diǎn)本發(fā)明的防止文件客體重用的方法中,應(yīng)用獲取文件計(jì)數(shù)的fcount系統(tǒng)調(diào)用、以及在應(yīng)用程序調(diào)用防止客體重用功能模塊時(shí)刪除客體對(duì)各種場(chǎng)景的分析并不留能夠旁路的路徑,使該防止客體重用功能模塊能夠顯著改善系統(tǒng)運(yùn)行的性能,使其在刪除客體時(shí)不再阻塞其他的進(jìn)程,同時(shí)也避免了在防止文件客體重用時(shí)引起的信息泄露。圖I為實(shí)現(xiàn)本發(fā)明所述的安全操作系統(tǒng)中防止文件客體重用方法的結(jié)構(gòu)示意圖;圖2為實(shí)現(xiàn)本發(fā)明所述的安全操作系統(tǒng)中防止文件客體重用方法的各功能模塊的詳細(xì)結(jié)構(gòu)示意圖3為本發(fā)明所述的安全操作系統(tǒng)中防止文件客體重用方法中unlink操作流程示意圖4為本發(fā)明所述的安全操作系統(tǒng)中防止文件客體重用方法中的close操作流程示意圖5為本發(fā)明所述的安全操作系統(tǒng)中防止文件客體重用方法中的_exit操作流程示意圖6為本發(fā)明所述的安全操作系統(tǒng)中防止文件客體重用方法中的open操作流程示意圖。具體實(shí)施例方式下面結(jié)合附圖及本發(fā)明的實(shí)施例對(duì)本發(fā)明的方法作進(jìn)一步詳細(xì)的說明。關(guān)于防止文件客體重用,在國(guó)標(biāo)GB/T20272的4.4.I.8.a中的規(guī)定如下應(yīng)確保動(dòng)態(tài)分配與管理的資源,在保持信息安全的情況下被再利用,主要包括一、確保非授權(quán)用戶不能查找使用后返還系統(tǒng)的記錄介質(zhì)中的信息內(nèi)容;二、確保非授權(quán)用戶不能查找系統(tǒng)現(xiàn)已分配給他的記錄介質(zhì)中以前的信息內(nèi)容;有的文件客體在其他主體使用后返還給系統(tǒng)時(shí),還保留有原來的信息,標(biāo)準(zhǔn)中規(guī)定了當(dāng)介質(zhì)返還給系統(tǒng)后,即使該用戶擁有了所有權(quán),也不能獲得該對(duì)象以前的信息。圖I為實(shí)現(xiàn)本發(fā)明所述的安全操作系統(tǒng)中防止文件客體重用方法的結(jié)構(gòu)示意圖;如圖I所示,當(dāng)應(yīng)用(用戶)程序使用磁盤文件、內(nèi)存等文件客體時(shí),需要通過系統(tǒng)調(diào)用向內(nèi)核發(fā)出請(qǐng)求,由于頻繁的請(qǐng)求,內(nèi)核陷入核心態(tài)(特權(quán)態(tài))后再返回用戶態(tài)會(huì)造成系統(tǒng)性能的大幅降低,因此一般只需要讓內(nèi)核實(shí)現(xiàn)一些比較簡(jiǎn)單、獨(dú)立的工作,剩下的部分則由用戶態(tài)的庫(kù),一般是由GNUC(GNUCLibrary,又稱Glibc)庫(kù)來完成。Glibc全稱為GNUClibrary是GNU下的C語(yǔ)言標(biāo)準(zhǔn)庫(kù)。本發(fā)明的防止文件客體重用的設(shè)計(jì)也沿用該方式,在不對(duì)性能造成較大影響的前提下,實(shí)現(xiàn)防止文件客體的內(nèi)容被重用的功能,具體是要求盡可能的在用戶程序和用戶態(tài)的C標(biāo)準(zhǔn)庫(kù)的層面上實(shí)現(xiàn),但仍然需要在系統(tǒng)內(nèi)核的協(xié)助下獲取一些信息,而帶來的問題就是用戶態(tài)的程序可以輕易的旁路掉文件客體重用的功能。因此,也需要在內(nèi)核中實(shí)現(xiàn)一部分防止文件客體內(nèi)容被重用的功能。由于標(biāo)準(zhǔn)庫(kù),尤其是C標(biāo)準(zhǔn)庫(kù),在安全操作系統(tǒng)上為Glibc庫(kù),提供了程序運(yùn)行的最基本功能,離開Glibc庫(kù)的程序基本不能請(qǐng)求系統(tǒng)的資源和服務(wù),因此可以在該層次上實(shí)現(xiàn)客體重用的功能。其他一些特殊工具,如文件系統(tǒng)格式化工具,由于工具功能的獨(dú)立性,可以在其中實(shí)現(xiàn),而不必考慮功能的旁路。圖2為實(shí)現(xiàn)本發(fā)明所述的安全操作系統(tǒng)中防止文件客體重用方法的各功能模塊的詳細(xì)結(jié)構(gòu)示意圖;如圖2所示,為防止客體重用,應(yīng)用(用戶)程序在設(shè)計(jì)上大多數(shù)時(shí)候都處于用戶態(tài),但是也有一些如IPC對(duì)象,需要在內(nèi)核中實(shí)現(xiàn),另外,其他一些客體,如磁盤文件,需要在內(nèi)核的協(xié)助下獲取一些信息,也需要在內(nèi)核中實(shí)現(xiàn)一部分功能。IPC進(jìn)程間通信時(shí)創(chuàng)建IPC對(duì)象,調(diào)用IPC_alloc來動(dòng)態(tài)分配IPC對(duì)象需要的內(nèi)存空間,在刪除對(duì)象時(shí)調(diào)用kfree或者vfree釋放內(nèi)存空間,但預(yù)先未對(duì)內(nèi)存空間進(jìn)行清零,為防止信息泄露,考慮在IPC對(duì)象釋放內(nèi)存空間時(shí)分別進(jìn)行清零操作。本發(fā)明的防止客體重用的方法需要在C標(biāo)準(zhǔn)庫(kù)層和系統(tǒng)內(nèi)核2個(gè)部分中同時(shí)進(jìn)行。文件客體的內(nèi)容要在刪除該客體時(shí)清除掉,會(huì)涉及到多種情況,如多個(gè)進(jìn)程的同步問題、硬鏈接的情況等,需要對(duì)其分別進(jìn)行考慮和設(shè)計(jì)。在設(shè)計(jì)前,還需要明確以下幾項(xiàng)內(nèi)容第一、文件的刪除在POSix兼容的系統(tǒng)中,沒有專門定義對(duì)于文件的刪除操作,只有減小其引用計(jì)數(shù)的操作,其系統(tǒng)調(diào)用為unlink。該操作只能將引用計(jì)數(shù)減少1,但并不能完全保證刪除文件,只有該文件引用計(jì)數(shù)達(dá)到了0,而且在沒有被別的進(jìn)程使用的情況下才會(huì)刪除文件。這里,P0SIX,為可移植操作系統(tǒng)接口(PortableOperatingSystemInterface,縮寫為POSIX是為了讀音更像UNIX)。電氣和電子工程師協(xié)會(huì)(IEEE)最初開發(fā)POSIX標(biāo)準(zhǔn),是為了提高UNIX環(huán)境下應(yīng)用程序的可移植性。但POSIX并不局限于UNIX。許多其它的操作系統(tǒng),如DECOpenVMS和MicrosoftWindowsNT,都支持POSIX標(biāo)準(zhǔn),尤其是IEEEStd.1003.1-1990(1995年修訂)或P0SIX.1,P0SIX.I提供了源代碼級(jí)別的C語(yǔ)言應(yīng)用編程接口(API)給操作系統(tǒng)的服務(wù)程序,如讀寫文件。第二、文件的硬鏈接P0SIX兼容的系統(tǒng)有硬鏈接的概念,對(duì)于ext2、ext3之類的索引文件系統(tǒng),硬鏈接通過i節(jié)點(diǎn)來實(shí)現(xiàn)。使用link系統(tǒng)調(diào)用增加一個(gè)文件的硬鏈接,而unlink減少一個(gè)硬鏈接。一個(gè)文件的引用計(jì)數(shù)可以通過stat系統(tǒng)調(diào)用得到。當(dāng)一個(gè)文件的硬鏈接為O時(shí),表示該文件的內(nèi)容被丟棄,不再有效,相應(yīng)的磁盤塊也被回收。第三、文件的共享在安全操作系統(tǒng)中,文件的打開操作是通過open系統(tǒng)調(diào)用實(shí)現(xiàn)的。一個(gè)文件是可以被多個(gè)進(jìn)程打開的,這也是POSix的定義,也可以被一個(gè)進(jìn)程多次打開,比如不同的函數(shù)或不同的線程。當(dāng)一個(gè)文件被打開多個(gè)實(shí)例時(shí),即使其引用計(jì)數(shù)達(dá)到了0,也不會(huì)刪除該文件,因?yàn)檫€有其他文件描述符、其他進(jìn)程在使用這個(gè)文件,依然可以讀寫其內(nèi)容。當(dāng)一個(gè)進(jìn)程或打開的文件描述符不再使用該文件時(shí),會(huì)通過close系統(tǒng)調(diào)用關(guān)閉該文件;只有當(dāng)一個(gè)文件不被任何程序使用時(shí),即未被打開時(shí),當(dāng)其引用計(jì)數(shù)達(dá)到了O時(shí),才會(huì)刪除該文件。第四、同步一個(gè)文件未被打開,且其引用計(jì)數(shù)達(dá)到了O將要?jiǎng)h除時(shí),將其填零仍然需要一段操作。該操作如果在內(nèi)核中進(jìn)行,可以保證填零操作的原子性,但是這樣會(huì)嚴(yán)重影響性能。對(duì)于大文件,在內(nèi)核中對(duì)其填零非常耗時(shí),此時(shí)其他所有進(jìn)程均被阻塞,不能加以調(diào)度,絕大多數(shù)都是I/o操作,而CPU卻仍然閑置。因此填零操作必須在用戶態(tài)進(jìn)行,而在用戶態(tài)填零時(shí),當(dāng)前進(jìn)程可能會(huì)被調(diào)度而掛起,新的進(jìn)程可能會(huì)再次打開該文件,這樣就會(huì)造成文件內(nèi)容的不一致。因此需要在填零時(shí)將文件加鎖而獨(dú)占。第五、異常情況對(duì)于文件的讀寫,正規(guī)的方式應(yīng)該是打開(open系統(tǒng)調(diào)用)、讀寫(read/write系統(tǒng)調(diào)用)、關(guān)閉(close系統(tǒng)調(diào)用)。但是系統(tǒng)在容錯(cuò)性設(shè)計(jì)時(shí),會(huì)對(duì)異常的情況進(jìn)行考慮,如文件未被關(guān)閉時(shí),當(dāng)進(jìn)程執(zhí)行_exit系統(tǒng)調(diào)用退出,或者被殺死時(shí),內(nèi)核會(huì)將該進(jìn)程未關(guān)閉的所有文件進(jìn)行關(guān)閉。而用戶態(tài)無(wú)法獲得該文件關(guān)閉的通知,此時(shí)如果該文件被關(guān)閉后正好達(dá)到了刪除的條件,則用戶態(tài)錯(cuò)過了阻止該客體信息被重用的情況。因此需要在_61^系統(tǒng)調(diào)用的入口強(qiáng)制在用戶態(tài)關(guān)閉所有文件。在明確了以上的具體情況后,通過分析,可以得出需要設(shè)計(jì)的以下機(jī)制文件的引用計(jì)數(shù)、文件的操作鎖、unlink操作、close操作、_exit操作和open操作。下面針對(duì)上述各種機(jī)制并結(jié)合附圖進(jìn)行詳細(xì)的說明一、文件的引用計(jì)數(shù)包括路徑對(duì)應(yīng)的文件、文件描述符對(duì)應(yīng)的文件的使用計(jì)數(shù)。該信息在用戶態(tài)無(wú)法獲得,而且系統(tǒng)中未提供相應(yīng)的系統(tǒng)調(diào)用,必須增加新的系統(tǒng)調(diào)用。在一般的操作系統(tǒng)中,一個(gè)文件是否被使用只允許內(nèi)核知道,而用戶態(tài)沒有途徑獲得這種信息。但是在文件客體的可擦除的判斷邏輯中,該信息是最關(guān)鍵的信息之一,必須通過某種途徑得到。因此在該系統(tǒng)中設(shè)計(jì)了新的系統(tǒng)調(diào)用fcount(調(diào)用名),通過該系統(tǒng)調(diào)用能得到一個(gè)文件的引用計(jì)數(shù)。當(dāng)引用計(jì)數(shù)為O時(shí),表示該文件沒有被打開或使用。在進(jìn)程之間,文件是通過路徑名,即目錄項(xiàng)表示的。而在進(jìn)程內(nèi)部,文件除了目錄項(xiàng)外,還有文件描述符。POSIX標(biāo)準(zhǔn)中,uniink操作需要知道一個(gè)文件的路徑,而close操作則需要知道一個(gè)文件的描述符,因此fcount系統(tǒng)調(diào)用應(yīng)該能對(duì)這兩種情況均返回正確結(jié)果。故操作系統(tǒng)中還定義了兩個(gè)操作常量FC0P_FD和FC0P_PATH。FC0P_FD和FC0P_PATH都是C語(yǔ)言的宏,F(xiàn)COP就是阿拉伯?dāng)?shù)字1,F(xiàn)PATH_就是阿拉伯?dāng)?shù)字2。其中,對(duì)于獲取一個(gè)路徑名表示的文件客體,要獲得其引用計(jì)數(shù),傳入FC0P_PATH和相應(yīng)的路徑;對(duì)于獲取一個(gè)文件描述符對(duì)應(yīng)的文件客體,則通過傳入FC0P_FD和文件描述符得到其引用計(jì)數(shù)。二、文件操作鎖文件操作鎖是用來保證當(dāng)文件被判斷是否可以填零時(shí)不會(huì)發(fā)生進(jìn)程間語(yǔ)義的沖突。當(dāng)系統(tǒng)中被加以文件操作鎖時(shí),任何進(jìn)程對(duì)任何文件的試圖訪問均會(huì)造成該進(jìn)程阻塞,直到設(shè)置鎖的進(jìn)程主動(dòng)解鎖,在此期間會(huì)造成一定的性能損失。文件操作鎖被設(shè)計(jì)為全局鎖的主要原因是系統(tǒng)中文件數(shù)量過于龐大,為每個(gè)文件設(shè)置鎖在用戶態(tài)不可實(shí)現(xiàn),而對(duì)鎖的操作則可以通過優(yōu)化邏輯來減少性能損失。文件操作鎖使用SystemV版本的信號(hào)量實(shí)現(xiàn),該信號(hào)量在系統(tǒng)的內(nèi)核中實(shí)現(xiàn),不同于POSIX信號(hào)量在內(nèi)存中的實(shí)現(xiàn),這樣能保證Glibc的bug和錯(cuò)誤不會(huì)影響文件操作鎖的實(shí)現(xiàn)。對(duì)于文件操作鎖,定義了以下幾種操作1、加鎖加鎖后,任何對(duì)該鎖的等待都會(huì)被阻塞;2、解鎖將文件鎖解除,任何對(duì)該鎖的等待不會(huì)發(fā)生阻塞,立即返回;3、等待鎖嘗試等待一個(gè)鎖,可能的結(jié)果是阻塞或返回。unlink,close,_exit,open都是系統(tǒng)給用戶提供的系統(tǒng)調(diào)用,用戶根據(jù)需要調(diào)用,實(shí)現(xiàn)自己的邏輯。在系統(tǒng)級(jí)這幾個(gè)系統(tǒng)調(diào)用間無(wú)依賴關(guān)系。例如當(dāng)一個(gè)進(jìn)程對(duì)一個(gè)文件進(jìn)行unlink,close,open操作時(shí),首先對(duì)這個(gè)文件做鎖操作,防止其他進(jìn)程操作。文件操作鎖達(dá)到的目的就是讓鎖這段過程成為原子操作,原子操作的目的就是使得操作過程不能被中斷。當(dāng)應(yīng)用程序需要?jiǎng)h除文件客體時(shí),首先所述應(yīng)用程序通過fcount系統(tǒng)調(diào)用從系統(tǒng)內(nèi)核獲取所述需要被刪除文件客體的引用計(jì)數(shù);當(dāng)引用計(jì)數(shù)為O時(shí),文件操作系統(tǒng)調(diào)用對(duì)該文件客體設(shè)置互斥機(jī)制,并將被刪除文件客體內(nèi)容清空。其中,所述將被刪除文件客體內(nèi)容清空的方式為將文件客體所占用的磁盤空間內(nèi)容填寫為零。所述文件操作系統(tǒng)調(diào)用包括unlink操作、close操作、_exit操作。所述互斥機(jī)制為互斥鎖機(jī)制,所述互斥鎖機(jī)制由文件操作鎖提供,其中文件操作鎖由文件操作系統(tǒng)調(diào)用提供。三、unlink操作刪除文件時(shí)判斷時(shí)機(jī),將其內(nèi)容清空。unlink操作文件時(shí),有可能發(fā)生引用計(jì)數(shù)為0,而且文件未被打開占用,此時(shí)除了需要判斷客體重用的開關(guān)和滿足的條件外,還需要設(shè)置文件操作鎖。此時(shí),任何對(duì)該文件的打開、關(guān)閉等操作均被阻塞。在發(fā)現(xiàn)不能滿足填零條件,還需要解鎖,以便其他對(duì)該文件的操作能恢復(fù)正常。圖3為本發(fā)明所述的安全操作系統(tǒng)中防止文件客體重用方法中unlink操作流程示意圖3的執(zhí)行過程如下(I)在整個(gè)過程之前,有可能有其他進(jìn)程也在unlink該文件,因此需要先等待文件操作鎖。(2)如果系統(tǒng)中鎖機(jī)制因?yàn)殒i機(jī)制失效或客體重用開關(guān)關(guān)閉,則必須考慮恢復(fù)系統(tǒng)調(diào)用原有功能直接進(jìn)入unlink系統(tǒng)調(diào)用,即不進(jìn)行擦除操作的各種邏輯。(3)如果滿足條件,首先對(duì)其執(zhí)行鎖文件操作,防止其他主體進(jìn)入而導(dǎo)致重用。(4)對(duì)其進(jìn)行unlink操作,首先對(duì)其引用計(jì)數(shù)判斷,如果大于O則直接進(jìn)入unlink系統(tǒng)調(diào)用,調(diào)用完畢解鎖文件,結(jié)束程序。如果等于O則根據(jù)系統(tǒng)環(huán)境進(jìn)行判斷是否仍然打開,如果允許打開則直接進(jìn)入unlink系統(tǒng)調(diào)用,判斷調(diào)用的結(jié)果成功與否再解鎖文件,如果成功就清除文件,結(jié)束程序,如果失敗就不清除文件,結(jié)束程序。如果前面的仍然打開判斷不被允許則直接做解鎖文件操作,結(jié)束程序。四、close操作關(guān)閉文件時(shí)判斷時(shí)機(jī),將其內(nèi)容清空。圖4為本發(fā)明所述的安全操作系統(tǒng)中防止文件客體重用方法中的close操作流程示意圖;圖4的執(zhí)行過程如下(I)在整個(gè)過程之前,有可能有其他進(jìn)程也在close該文件,因此需要先等待文件操作鎖。(2)如果系統(tǒng)中鎖機(jī)制因?yàn)榭腕w重用開關(guān)關(guān)閉,則不考慮客體重用問題,直接調(diào)用close系統(tǒng)調(diào)用。(3)如果滿足條件,首先對(duì)其執(zhí)行鎖文件操作,防止其他主體進(jìn)入而導(dǎo)致重用。(4)首先對(duì)其引用計(jì)數(shù)判斷,如果大于O則直接解鎖文件,調(diào)用close系統(tǒng)調(diào)用,結(jié)束程序。如果等于O則根據(jù)系統(tǒng)環(huán)境進(jìn)行判斷是否仍然打開,如果是則也解鎖文件操作,調(diào)用close系統(tǒng)調(diào)用,結(jié)束程序。如果不允許打開,則做解鎖文件操作,擦除文件之后再調(diào)用close系統(tǒng)調(diào)用,結(jié)束程序。五、_exit操作退出程序時(shí),將未關(guān)閉的文件在用戶態(tài)關(guān)閉。系統(tǒng)在被發(fā)送KILL信號(hào)殺死前,或者自身退出時(shí),會(huì)自動(dòng)調(diào)用_exit系統(tǒng)調(diào)用。該系統(tǒng)調(diào)用會(huì)導(dǎo)致進(jìn)程退出運(yùn)行,并使內(nèi)核關(guān)閉該進(jìn)程尚未關(guān)閉的文件,因此也有可能滿足擦除文件的兩個(gè)條件。由于內(nèi)核關(guān)閉文件時(shí),用戶態(tài)無(wú)法得到通知,因此需要在該系統(tǒng)調(diào)用前強(qiáng)制關(guān)閉所有文件,即調(diào)用close函數(shù)。圖5為本發(fā)明所述的安全操作系統(tǒng)中防止文件客體重用方法中的_exit操作流程示意圖;圖5的執(zhí)行過程如下、(I)如果系統(tǒng)中鎖機(jī)制因?yàn)榭腕w重用開關(guān)關(guān)閉,則不考慮客體重用問題,直接調(diào)用_exit系統(tǒng)調(diào)用。(2)如果滿足條件,首先對(duì)其執(zhí)行關(guān)閉文件操作,防止其他主體進(jìn)入而導(dǎo)致重用。首先打開fd目錄,并讀文件描述符,然后調(diào)用close系統(tǒng)調(diào)用,判斷是否讀完文件,如果沒有則返回到讀文件描述符步驟循環(huán),如果已經(jīng)讀完則關(guān)閉fd目錄則調(diào)用_exit系統(tǒng)調(diào)用。(3)結(jié)束程序。需要說明的是,本發(fā)明的_exit系統(tǒng)調(diào)用的函數(shù)在強(qiáng)制調(diào)用close功能時(shí),必須得到該進(jìn)程中尚未關(guān)閉的文件。這些文件不能直接得到,而是只能通過/proc偽文件系統(tǒng)得到文件描述符。例如,對(duì)于Pid為1000的進(jìn)程,打開/proc/1000/fd的目錄,會(huì)得到O、I、2……等的文件描述符,之后再調(diào)用close函數(shù),分別對(duì)其關(guān)閉,由于close函數(shù)已經(jīng)實(shí)現(xiàn)了擦除操作以及文件操作鎖的邏輯(上文已進(jìn)行表述,在此不再贅述)。因此_exit系統(tǒng)調(diào)用可以不需要自己再做該工作以及操作文件操作鎖。_exit系統(tǒng)調(diào)用也可以在讀取文件描述符之后,對(duì)其引用計(jì)數(shù)進(jìn)行判斷,再進(jìn)行文件操作鎖解鎖和擦除等步驟。六、open操作打開文件時(shí),根據(jù)時(shí)機(jī)等待。圖6為本發(fā)明所述的安全操作系統(tǒng)中防止文件客體重用方法中的open操作流程示意圖。圖6的執(zhí)行過程如下(I)如果系統(tǒng)中鎖機(jī)制因?yàn)榭腕w重用開關(guān)關(guān)閉,則不考慮客體重用問題,直接調(diào)用open系統(tǒng)調(diào)用。(2)如果滿足條件,首先對(duì)其執(zhí)行鎖文件操作,防止其他主體進(jìn)入而導(dǎo)致重用。得到鎖以后,調(diào)用open系統(tǒng)調(diào)用,結(jié)束程序,如果得不到則等待,直到得到為止。(3)結(jié)束程序。最后應(yīng)當(dāng)說明的是以上實(shí)施例僅用以說明本發(fā)明的技術(shù)方案而非對(duì)其限制;盡管參照較佳實(shí)施例對(duì)本發(fā)明進(jìn)行了詳細(xì)的說明,所屬領(lǐng)域的普通技術(shù)人員應(yīng)當(dāng)理解依然可以對(duì)本發(fā)明的具體實(shí)施方式進(jìn)行修改或者對(duì)部分技術(shù)特征進(jìn)行等同替換;而不脫離本發(fā)明技術(shù)方案的精神,其均應(yīng)涵蓋在本發(fā)明請(qǐng)求保護(hù)的技術(shù)方案范圍當(dāng)中。權(quán)利要求1.一種安全操作系統(tǒng)中防止文件客體重用的方法,其特征在于,當(dāng)應(yīng)用程序需要?jiǎng)h除文件客體時(shí),首先所述應(yīng)用程序通過fcount系統(tǒng)調(diào)用從系統(tǒng)內(nèi)核獲取所述需要被刪除文件客體的引用計(jì)數(shù);當(dāng)引用計(jì)數(shù)為0時(shí),文件操作系統(tǒng)調(diào)用對(duì)該文件客體設(shè)置互斥機(jī)制,并將被刪除文件客體內(nèi)容清空。2.根據(jù)權(quán)利要求I所述的安全操作系統(tǒng)中防止文件客體重用的方法,其特征在于獲取所述需要被刪除文件客體的引用計(jì)數(shù)的方式為通過路徑獲取對(duì)應(yīng)文件客體的引用計(jì)數(shù)或者通過文件描述符獲取對(duì)應(yīng)的文件客體的引用計(jì)數(shù)。3.根據(jù)權(quán)利要求I或2所述的安全操作系統(tǒng)中防止文件客體重用的方法,其特征在于,所述fcount系統(tǒng)調(diào)用包括兩個(gè)操作常量FC0P_FD和FC0P_PATH;其中,對(duì)于獲取一個(gè)路徑名表示的文件客體,要獲得其引用計(jì)數(shù),則傳入FC0P_PATH和相應(yīng)的路徑;對(duì)于獲取一個(gè)文件描述符對(duì)應(yīng)的文件客體,則通過傳入FC0P_FD和文件描述符得到其引用計(jì)數(shù)。4.根據(jù)權(quán)利要求I所述的安全操作系統(tǒng)中防止文件客體重用的方法,其特征在于,所述文件操作系統(tǒng)調(diào)用為unlink操作。5.根據(jù)權(quán)利要求I所述的安全操作系統(tǒng)中防止文件客體重用的方法,其特征在于,所述文件操作系統(tǒng)調(diào)用為close操作。6.根據(jù)權(quán)利要求I所述的安全操作系統(tǒng)中防止文件客體重用的方法,其特征在于,所述文件操作系統(tǒng)調(diào)用為_exit操作。7.根據(jù)權(quán)利要求I至6任何之一所述的安全操作系統(tǒng)中防止文件客體重用的方法,其特征在于,所述將被刪除文件客體內(nèi)容清空的方式為將文件客體所占用的磁盤空間內(nèi)容填寫為零。8.根據(jù)權(quán)利要求I至6任何之一所述的安全操作系統(tǒng)中防止文件客體重用的方法,其特征在于,所述互斥機(jī)制為互斥鎖機(jī)制,所述互斥鎖機(jī)制由文件操作鎖提供,所述文件操作鎖由文件操作系統(tǒng)調(diào)用提供。9.根據(jù)權(quán)利要求8所述的安全操作系統(tǒng)中防止文件客體重用的方法,其特征在于所述文件操作鎖包括加鎖操作、解鎖操作和等待鎖操作其中,執(zhí)行所述加鎖操作后,任何對(duì)該鎖的等待都會(huì)被阻塞;執(zhí)行所述解鎖操作后,將文件鎖解除,任何對(duì)該鎖的等待不會(huì)發(fā)生阻塞,并立即返回;執(zhí)行所述等待鎖操作,嘗試等待一個(gè)鎖,其操作結(jié)果是阻塞或返回。全文摘要一種安全操作系統(tǒng)中防止文件客體重用的方法,主要包括對(duì)文件的使用計(jì)數(shù)fcount進(jìn)行系統(tǒng)調(diào)用的步驟;對(duì)unlink操作的步驟;對(duì)close操作的步驟;對(duì)_exit操作的步驟;對(duì)open操作的步驟;以及為上述各類操作提供互斥鎖機(jī)制的文件操作鎖的操作步驟。采用本發(fā)明的防止文件客體重用的實(shí)現(xiàn)方法,應(yīng)用獲取文件計(jì)數(shù)的fcount系統(tǒng)調(diào)用以及在應(yīng)用程序調(diào)用防止客體重用功能模塊時(shí),刪除客體對(duì)各種場(chǎng)景的分析并不留下能夠被旁路的路徑,使該防止客體重用功能模塊能夠顯著改善系統(tǒng)運(yùn)行的性能,使其在刪除客體時(shí)不再阻塞其他的進(jìn)程,同時(shí)也能夠避免在防止文件客體重用時(shí)引起的信息泄露。文檔編號(hào)G06F21/00GK102708323SQ20121014972公開日2012年10月3日申請(qǐng)日期2012年5月15日優(yōu)先權(quán)日2012年5月15日發(fā)明者劉冬梅,劉燕,周啟明,武術(shù),王戍靖,郎金剛,龔文申請(qǐng)人:中國(guó)科學(xué)院軟件研究所,中科方德軟件有限公司