專利名稱:在操作系統(tǒng)中根據(jù)用戶行為歷史來控制文件訪問的方法
技術(shù)領(lǐng)域:
本發(fā)明涉及一種計(jì)算機(jī)操作系統(tǒng)的用戶訪問控制方法,主要是一種在操作系統(tǒng)中根據(jù)用戶行為歷史來控制文件訪問的方法。
背景技術(shù):
計(jì)算機(jī)操作系統(tǒng)對(duì)于文件系統(tǒng)中的文件、目錄、以及其它系統(tǒng)資源(例如“注冊(cè)表”)的訪問保護(hù),是基礎(chǔ)性的安全機(jī)制。如果沒有這樣的保護(hù)機(jī)制,那么誰都可以任意地修改、增添、刪除、或者執(zhí)行系統(tǒng)中的任何文件,至于黑客就更可以任意散布病毒、蠕蟲、木馬等等惡意代碼。那樣,系統(tǒng)就毫無安全性可言了。
為此,早在三十年前,Unix操作系統(tǒng)就采取了措施,把計(jì)算機(jī)用戶分成“文件主(文件的創(chuàng)建者)”、“文件主的同組人”、“(其他)用戶”三類,把對(duì)于文件的“訪問”分成讀、寫、執(zhí)行三種基本操作,并為每個(gè)具體的文件或目錄(由文件主)規(guī)定好每一類用戶對(duì)其可以實(shí)行哪幾種操作、稱為對(duì)此文件的“訪問權(quán)限”。有關(guān)各類用戶訪問權(quán)限的信息“如影隨形”地跟隨著每個(gè)具體的文件,存儲(chǔ)在每個(gè)文件的“目錄項(xiàng)”中,不能被輕易改變。而具體的用戶屬于哪一類,則是在“登錄”到系統(tǒng)的時(shí)候就(根據(jù)用戶名和口令密碼)決定了的。這樣,例如有某個(gè)用戶不懷好意、想要偷偷修改某個(gè)“可執(zhí)行文件”使之染上病毒,就可能會(huì)因?yàn)榧确俏募?、又非文件主的同組人、而為操作系統(tǒng)所拒絕。Unix的這種方案在當(dāng)時(shí)的條件下是很有效的,所以一直傳了下來,后來的包括Windows在內(nèi)的操作系統(tǒng)基本上都承襲了Unix的這種機(jī)制。
可是,隨著計(jì)算機(jī)應(yīng)用的普及,把用戶分成三類就顯得粗糙了。例如在銀行中,可能即使是與文件主同組的人也不應(yīng)該都有相同的權(quán)限、而要有所區(qū)別,并且實(shí)際上可能存在著很多不同的組,需要分別賦予訪問權(quán)限,有時(shí)候甚至需要針對(duì)具體的人獨(dú)立地賦予訪問權(quán)限。所以,應(yīng)該把將用戶分三類賦予不同訪問權(quán)限的方法加以擴(kuò)充,使每個(gè)文件或目錄(或其它資源)都有個(gè)“訪問控制名單”,名單中詳列哪一些組有什么樣(讀/寫/執(zhí)行及其它)的訪問權(quán)限、哪幾個(gè)人有什么樣的訪問權(quán)限,或者哪些組和哪些人不允許什么樣的訪問,名單上沒有的就不許訪問,或只允許讀。這個(gè)名單就是ACL,即“Access Control List”,一般翻譯成“訪問控制列表”或“訪問控制表”。在采用這種技術(shù)的操作系統(tǒng)中,ACL是作為文件的一部分而存儲(chǔ)的;只要文件在,它的ACL就在。ACL可長可短,主要由一串“訪問控制項(xiàng)”ACE構(gòu)成,每一個(gè)ACE說明一個(gè)組或人對(duì)此文件的訪問權(quán)限,實(shí)際上也就是一條是否允許訪問的規(guī)則。
從表面上看,這只是提高了文件的安全性,但是實(shí)際上這也提高了整個(gè)系統(tǒng)的安全性、特別是防止病毒等惡意代碼侵入方面的安全性。這是因?yàn)?,無論是病毒、木馬、還是別的什么惡意代碼,一般都需要把一些信息寫到被入侵系統(tǒng)的磁盤上、即文件系統(tǒng)中,或修改已經(jīng)存在的文件,這樣才能“落地生根”。而管住了文件系統(tǒng)(包括文件、目錄等等)的安全,那么整個(gè)系統(tǒng)即使一時(shí)被侵入也留不下持續(xù)的后果,這就提高了整個(gè)系統(tǒng)的安全性。當(dāng)然,實(shí)際使用中還要結(jié)合別的安全措施。
IBM版的Unix操作系統(tǒng)AIX(主要用于銀行等等)很早以前就實(shí)現(xiàn)了ACL,后來別的操作系統(tǒng)也都逐漸跟上。目前,Windows和Linux兩個(gè)操作系統(tǒng)都支持ACL,就是說都提供了ACL這種機(jī)制。最近幾年,美國南加州大學(xué)等機(jī)構(gòu)的一些研究者又對(duì)ACL作了進(jìn)一步的改進(jìn),使得訪問權(quán)限可以帶上條件;例如規(guī)定某人可以在上班時(shí)間讀/寫某個(gè)文件,在此時(shí)間窗口以外則只允許讀而不允許寫。這樣的ACL稱為“擴(kuò)充ACL”、即EACL。
傳統(tǒng)的ACL只考慮企圖訪問文件的人、即用戶,而不考慮是通過什么軟件來訪問的,可是實(shí)際上這一點(diǎn)往往也很重要。例如,對(duì)于一個(gè)銀行賬戶,用戶也許只應(yīng)該通過某個(gè)特定的、為管理者認(rèn)可的應(yīng)用軟件來訪問,如果不是就很可疑,就應(yīng)該拒絕(并應(yīng)該報(bào)告或記錄在案)。這一點(diǎn)在傳統(tǒng)的ACL中是沒有的,但是在EACL中已經(jīng)有了。用哪一個(gè)應(yīng)用軟件來訪問某一個(gè)文件(或目錄、注冊(cè)表等等,以下統(tǒng)稱“對(duì)象”),是使用者的一種行為特征;而使用者是誰,屬于哪一個(gè)組,則是其身份特征。所以EACL實(shí)際上把行為特征引入了ACL機(jī)制,這顯然有利于提高系統(tǒng)的安全性。
但是,“通過什么軟件來訪問”只是一個(gè)局部的、一時(shí)一地的行為。光考慮一個(gè)局部的行為并據(jù)此作出判斷還不夠安全。就像對(duì)于人一樣,不光要看其當(dāng)前在做什么,還要考察其過去作了些什么,最好是要考察其“全部工作和全部歷史”,這才能作出可靠的判斷。仍以上述對(duì)于銀行賬戶的訪問為例,假如用戶確實(shí)是通過規(guī)定的軟件前來訪問的,但是進(jìn)一步的考察卻發(fā)現(xiàn)這個(gè)軟件是通過網(wǎng)絡(luò)操作遠(yuǎn)程啟動(dòng)的,這就又非??梢伞⑸踔粱旧峡梢詳喽椴徽A?假定銀行的制度不允許職員通過網(wǎng)絡(luò)遠(yuǎn)程操作),此時(shí)當(dāng)然應(yīng)該拒絕訪問(并應(yīng)該報(bào)告和記錄在案)。那么,能否知道這個(gè)軟件是通過網(wǎng)絡(luò)操作遠(yuǎn)程啟動(dòng)的呢?在計(jì)算機(jī)操作系統(tǒng)中,行為的主體是“進(jìn)程”。一般而言,進(jìn)程就是一個(gè)應(yīng)用軟件的運(yùn)行。在操作系統(tǒng)的內(nèi)核中,當(dāng)前正在運(yùn)行的每一個(gè)進(jìn)程都有一個(gè)“進(jìn)程控制塊”PCB作為其代表,里面記錄著許多有關(guān)該進(jìn)程的信息,其中就包括所運(yùn)行的是哪一個(gè)軟件。上述在EACL中把通過哪一個(gè)應(yīng)用軟件前來訪問作為一個(gè)判斷依據(jù),這信息就可以從進(jìn)程控制塊中獲取。另一方面,一個(gè)進(jìn)程在運(yùn)行的過程中可以另外再創(chuàng)建新的進(jìn)程,稱為“子進(jìn)程”,并讓其執(zhí)行別的程序。此時(shí)操作系統(tǒng)要為子進(jìn)程分配一個(gè)進(jìn)程控制塊,并在進(jìn)程控制塊中記載下誰是它的“父進(jìn)程”。這樣,在理想的情況下(如果父進(jìn)程還“在世”),從任何一個(gè)進(jìn)程開始,就可以通過其進(jìn)程控制塊找到其父進(jìn)程(其進(jìn)程控制塊),再找到父進(jìn)程的父進(jìn)程,如此等等,一直找出其所有直系的“祖上”。如果考察所有的進(jìn)程控制塊,則還可以歸納出所有這些進(jìn)程的“家譜”,這家譜一般是一棵以系統(tǒng)中的原始進(jìn)程為根的倒置的“進(jìn)程樹”。
這樣,仍以前述對(duì)于銀行賬戶的訪問為例,如果發(fā)現(xiàn)雖然要求讀/寫文件的訪問者進(jìn)程是在執(zhí)行規(guī)定的軟件,但是它的父進(jìn)程卻是telnetd,這是供遠(yuǎn)程“登錄”軟件,那就可疑了,從而應(yīng)該加以拒絕。因?yàn)檫@說明用戶是先通過telnet遠(yuǎn)程登錄,然后才啟動(dòng)執(zhí)行所規(guī)定的軟件,而這理應(yīng)是在本地啟動(dòng)的,為什么現(xiàn)在卻是遠(yuǎn)程啟動(dòng)的呢?顯然,這是因?yàn)榭疾炝嗽L問者進(jìn)程的父進(jìn)程才發(fā)現(xiàn)的疑點(diǎn)。同樣的道理還可以類推,可以“查三代”、甚至追溯得更遠(yuǎn)。需要指出的是進(jìn)程之間的父子關(guān)系,以及祖孫關(guān)系等等,所反映的表面上似乎是進(jìn)程的“出身”,但是實(shí)際上卻是行為,特別是使用者的行為。就拿telnetd來說,它啟動(dòng)什么軟件運(yùn)行就是由遠(yuǎn)程的使用者控制的。所以,從一個(gè)進(jìn)程上溯所得出的該進(jìn)程的“家世”,實(shí)際上反映了使用者宏觀的操作過程、或者精心安排,總之是使用者的行為歷史。
由此可見,把對(duì)于使用者此種行為歷史的考察加入到操作系統(tǒng)的ACL機(jī)制中,對(duì)于提高操作系統(tǒng)的安全性是很有好處的??墒?,目前的幾種操作系統(tǒng),無論是Windows還是Linux,都沒有在ACL機(jī)制中把使用者的行為歷史、即訪問者進(jìn)程的“家世”考慮進(jìn)去。
應(yīng)該說,在操作系統(tǒng)對(duì)于文件等對(duì)象的保護(hù)機(jī)制中不考慮、不考察使用者的行為歷史,是現(xiàn)有技術(shù)的缺陷,它在一定程度上降低了系統(tǒng)的安全性。
發(fā)明內(nèi)容
針對(duì)現(xiàn)有技術(shù)的缺陷,本發(fā)明提供了一種在操作系統(tǒng)中根據(jù)用戶行為歷史來控制文件訪問的方法,其顯著的特點(diǎn)是將對(duì)于用戶行為歷史的考察增添到計(jì)算機(jī)操作系統(tǒng)對(duì)于文件系統(tǒng)的“訪問控制名單(ACL)”機(jī)制中,提高操作系統(tǒng)的安全性。
本發(fā)明解決上述原有技術(shù)方案所存在的問題。本發(fā)明所述的這種在操作系統(tǒng)中根據(jù)用戶行為歷史來控制文件訪問的方法是對(duì)原有ACL機(jī)制的擴(kuò)充和改進(jìn)。
“訪問控制名單”ACL實(shí)質(zhì)上是由一組“訪問控制項(xiàng)”ACE構(gòu)成的,每一個(gè)ACE就是一條規(guī)則。一般ACE中有三個(gè)字段,代表著三個(gè)方面的內(nèi)容1.ACE屬性。說明本項(xiàng)規(guī)則的基礎(chǔ)是什么,例如用戶、用戶所述的組、等等。
2.訪問者的ID。當(dāng)屬性為“用戶”時(shí),這就是用戶號(hào);當(dāng)屬性為“組”時(shí),這就是訪問者所屬的組號(hào)。
3.訪問權(quán)。當(dāng)訪問者的身份等特征與前兩個(gè)字段相符時(shí),允許對(duì)本ACL所屬目標(biāo)文件的訪問(操作)種類,一般包括讀、寫、執(zhí)行,也可以包括例如刪除、改名等等操作。這個(gè)字段通常是個(gè)位圖。除“允許操作”位圖外,有些ACL還可能使用“禁止操作”位圖。
例如,要是某個(gè)ACE的屬性為“組”、ID為201、訪問權(quán)為“讀+執(zhí)行”,那就表示只要不是另有規(guī)定(例如對(duì)其中的某幾個(gè)特殊用戶),凡是屬于201組的用戶,對(duì)于目標(biāo)文件都可以讀或者執(zhí)行。如果一個(gè)訪問者在某個(gè)文件的ACL中找不到任何相符的ACE,那就說明不允許訪問這個(gè)文件。傳統(tǒng)的ACL一般只有“用戶”和“組”兩種屬性。
為實(shí)現(xiàn)根據(jù)用戶行為歷史來控制文件訪問,需要增加一種屬性為“曾經(jīng)執(zhí)行”的ACE,其ID則為程序名、而不是用戶的身份。例如,要是ACE屬性為“曾經(jīng)執(zhí)行”、ID為“telnetd”、訪問權(quán)為0,那么這條規(guī)則就是在使用者(不管是誰)的行為歷史上,如果曾經(jīng)執(zhí)行過telnetd、也即其中的某一步是telnetd,那就不允許訪問目標(biāo)文件。那么怎樣知道是否曾經(jīng)執(zhí)行過telnetd呢?只要從當(dāng)前進(jìn)程(即訪問者進(jìn)程)開始,逐步上溯,考察這個(gè)鏈中每個(gè)進(jìn)程控制塊的“程序名”或“命令行”字段、看其所執(zhí)行的程序是否telnetd即可。只要當(dāng)前進(jìn)程或其某個(gè)“祖上”進(jìn)程所執(zhí)行的是telnetd,就與這個(gè)ACE相符了,而ACE的訪問權(quán)字段為0表示不得訪問。反之,如果都沒有執(zhí)行telnetd,那就繼續(xù)查看ACL中的下一個(gè)ACE。一般,一個(gè)文件的ACL中可以有數(shù)百、甚至上千個(gè)ACE,即數(shù)百甚至上千條規(guī)則。
這樣,系統(tǒng)的管理者只要為一些重要的文件設(shè)置好ACL,特別是設(shè)置好ACE屬性為“曾經(jīng)執(zhí)行”的規(guī)則,就可以防止別人通過網(wǎng)絡(luò)來訪問這些文件。例如,假定一臺(tái)計(jì)算機(jī)上有telnetd、firefox、foxmail、netmeeting和snmpd等5個(gè)程序(服務(wù)進(jìn)程)都有可能通過網(wǎng)絡(luò)受到遠(yuǎn)程訪問,那就為這5個(gè)程序都各自配上一條屬性為“曾經(jīng)執(zhí)行”的規(guī)則,都不允許訪問(或者只允許讀)那些重要的文件。當(dāng)然,每個(gè)文件都應(yīng)該有一個(gè)ACL。注意有些網(wǎng)絡(luò)軟件在正常情況下不會(huì)圖謀不軌,但是卻也可能成為禍根,因?yàn)槌绦蛑杏锌赡軙?huì)存在緩沖區(qū)溢出的漏洞,如果被攻擊者發(fā)現(xiàn)并利用,就也可能轉(zhuǎn)化成惡意程序。所以對(duì)于“涉外”的網(wǎng)絡(luò)軟件都應(yīng)注意防范。
需要說明的是所說的文件實(shí)際上也包括目錄,不允許對(duì)一個(gè)目錄實(shí)行寫操作,就是不允許在這個(gè)目錄中創(chuàng)建文件。一般而言,惡意用戶在侵入一個(gè)系統(tǒng)以后總是要把一些惡意代碼寫入某個(gè)目錄。如果把這條路堵死,惡意代碼就無處落腳了。
正常的網(wǎng)絡(luò)連接也有可能要訪問本地的文件。例如從網(wǎng)絡(luò)上下載一個(gè)文件的時(shí)候,就總得要把它寫在本地的文件系統(tǒng)中,再如有時(shí)候也需要把本地的文件作為電子郵件的附件發(fā)送出去。為此,可以在文件系統(tǒng)中固定設(shè)置幾個(gè)目錄(文件夾)專門用于這個(gè)目的,這幾個(gè)目錄的ACL可以設(shè)置得很寬松,而對(duì)其它的目錄則嚴(yán)加防范。不過這些實(shí)際應(yīng)用上的細(xì)節(jié)已經(jīng)與本發(fā)明的實(shí)質(zhì)關(guān)系不大。
所以,有了對(duì)ACL的擴(kuò)充和對(duì)于訪問者進(jìn)程的“家世”考察(和比對(duì))這么兩個(gè)要素,就可以實(shí)現(xiàn)根據(jù)用戶行為歷史來控制文件訪問的目的了?,F(xiàn)將此方法具體陳述如下●在現(xiàn)有的“訪問控制名單”ACL機(jī)制中增加一種訪問控制項(xiàng)(ACE),該訪問控制項(xiàng)的屬性為“曾經(jīng)執(zhí)行”,內(nèi)容包括一個(gè)訪問者的ID和對(duì)于訪問權(quán)限的規(guī)定,當(dāng)屬性為“曾經(jīng)執(zhí)行”時(shí),ACE中的ID字段內(nèi)容為程序名字符串;如果要求訪問目標(biāo)文件的用戶曾經(jīng)執(zhí)行過這個(gè)程序,要求訪問目標(biāo)文件的當(dāng)前進(jìn)程即由該程序派生而來,并適用該ACE所規(guī)定的訪問權(quán)限;●系統(tǒng)管理員(或使用者)為需要保護(hù)的文件配置ACL,用屬性為“曾經(jīng)執(zhí)行”的ACE防止由某個(gè)特定程序所派生的子進(jìn)程不適當(dāng)?shù)卦L問目標(biāo)文件。在ACL中針對(duì)需要防備的每個(gè)程序都配備一個(gè)屬性為“曾經(jīng)執(zhí)行”的ACE,在ACE中規(guī)定具體的訪問權(quán)限,訪問者的ID設(shè)置成特定程序的程序名(程序文件名);
●每當(dāng)需要訪問一個(gè)目標(biāo)文件時(shí),ACL機(jī)制從頭開始逐條查看其“訪問控制名單”ACL中的每一條ACE,即訪問控制項(xiàng),并處理如下1.查看ACL中的下一條ACE,如果不再有下一條ACE,則拒絕訪問、或按默認(rèn)權(quán)限訪問(例如只讀),并結(jié)束對(duì)ACL的處理。
2.如果此ACE不是屬性為“曾經(jīng)執(zhí)行”的訪問控制項(xiàng),就按ACL機(jī)制原有的方式處理,如果條件相符即得出結(jié)論,并結(jié)束對(duì)ACL的處理,否則繼續(xù)查看下一條ACE,回到2。
3.如果ACE屬性是“曾經(jīng)執(zhí)行”,就以該ACE的ID字段所提供的程序名字符串為比對(duì)目標(biāo)。并從當(dāng)前進(jìn)程、即訪問者進(jìn)程的進(jìn)程控制塊開始比對(duì)。
4.比對(duì)進(jìn)程控制塊中的“程序名”或“命令行”字段,如果相符即得出結(jié)論,并結(jié)束對(duì)ACL的處理。有些操作系統(tǒng)的進(jìn)程控制塊給出的是“程序名”,有些則給出“命令行”。相比之下,“命令行”中的信息更為全面,只要ACE所提供的程序名字符串出現(xiàn)在“命令行”中就說明這個(gè)進(jìn)程可能在執(zhí)行有關(guān)的程序。一般而言,如果進(jìn)程控制塊給出的是“程序名”,那么操作系統(tǒng)就會(huì)提供一個(gè)獲取完整“命令行”的手段。例如Linux就是這樣。
5.否則查看當(dāng)前進(jìn)程的父進(jìn)程字段,得到父進(jìn)程的進(jìn)程號(hào)。如果父進(jìn)程的進(jìn)程號(hào)等于原始進(jìn)程的進(jìn)程號(hào),則對(duì)于訪問者進(jìn)程“家世”的上溯已經(jīng)窮盡,轉(zhuǎn)到7。
6.根據(jù)父進(jìn)程的進(jìn)程號(hào)找到其進(jìn)程控制塊,轉(zhuǎn)到4,繼續(xù)比對(duì)。
7.對(duì)于訪問者進(jìn)程“家世”的上溯已經(jīng)窮盡,未發(fā)現(xiàn)曾經(jīng)執(zhí)行該ACE所述的程序文件,轉(zhuǎn)到1,繼續(xù)查看ACL中的下一條ACE。
進(jìn)一步,作為入侵檢測(cè)的一種輔助手段,在根據(jù)用戶行為歷史控制文件訪問的同時(shí),可以把越權(quán)訪問的企圖作為報(bào)警信息記錄下來,甚至實(shí)時(shí)地發(fā)出警報(bào)。例如,發(fā)現(xiàn)某個(gè)進(jìn)程企圖訪問載有敏感信息的文件,而這個(gè)進(jìn)程又是由telnetd或者網(wǎng)絡(luò)瀏覽器進(jìn)程派生而來,則一方面要拒絕其越權(quán)訪問要求,另一方面也要發(fā)出警報(bào),因?yàn)檫@很可能是因?yàn)榫W(wǎng)絡(luò)入侵所引起。
本發(fā)明有益的效果是在現(xiàn)有的“訪問控制名單”ACL機(jī)制中增加一種屬性為“曾經(jīng)執(zhí)行”訪問控制項(xiàng)(ACE),把對(duì)于使用者行為歷史的考察納入ACL機(jī)制,系統(tǒng)的管理者只要為一些重要的文件設(shè)置好ACL,特別是設(shè)置好ACE屬性為“曾經(jīng)執(zhí)行”的規(guī)則,就可以防止由需要防備的程序如telnetd等等派生的進(jìn)程不適當(dāng)?shù)卦L問目標(biāo)文件,從而防止惡意用戶通過網(wǎng)絡(luò)不適當(dāng)?shù)卦L問目標(biāo)文件,其效果是提高了操作系統(tǒng)的安全性。
附圖1是本發(fā)明操作系統(tǒng)中“進(jìn)程樹”的示意圖;具體實(shí)施方式
下面結(jié)合附圖和實(shí)施例對(duì)本發(fā)明作進(jìn)一步說明附圖1中的每個(gè)方塊都代表著一個(gè)進(jìn)程控制塊,即代表著一個(gè)進(jìn)程。其中的1號(hào)進(jìn)程是系統(tǒng)中的原始進(jìn)程,是所有其它進(jìn)程的始祖。在Linux系統(tǒng)中,1號(hào)進(jìn)程所執(zhí)行的程序是init。圖中的6878號(hào)進(jìn)程所執(zhí)行的程序是evince,這是個(gè)相當(dāng)于微軟Word的文字編輯程序。這個(gè)方塊有個(gè)箭頭指向6872號(hào)進(jìn)程,表示其“父進(jìn)程”是6872號(hào)進(jìn)程,余可類推。6872號(hào)進(jìn)程執(zhí)行的是firefox,而firefox就是網(wǎng)絡(luò)瀏覽器。這說明6878號(hào)進(jìn)程是由6872號(hào)進(jìn)程、即網(wǎng)絡(luò)瀏覽器進(jìn)程派生(創(chuàng)建)出來的。假定我們有個(gè)需要保守秘密的文件,這個(gè)文件不應(yīng)該允許來自網(wǎng)絡(luò)的任何訪問,所以在它的ACL中就應(yīng)該有個(gè)屬性為“曾經(jīng)執(zhí)行”、程序名為firefox、訪問權(quán)限為禁止任何訪問的ACE。意思是,只要是firefox、或者由firefox直接或間接派生出來的進(jìn)程,就一律禁止訪問這個(gè)文件。
這樣,當(dāng)6878號(hào)進(jìn)程、即evince進(jìn)程企圖按“讀”或“寫”模式打開這個(gè)文件時(shí),實(shí)施了本發(fā)明的軟件就拿ACE中指定的程序名firefox與6878號(hào)進(jìn)程的程序名(evince)進(jìn)行比對(duì),因?yàn)椴环蜕纤莸剿母高M(jìn)程6872號(hào)進(jìn)程。這次比對(duì)相符,說明本條ACE所規(guī)定的訪問權(quán)限應(yīng)該生效,于是就拒絕訪問,并且還可以發(fā)出警報(bào)。
如果與6872號(hào)進(jìn)程的比對(duì)仍舊不符,就繼續(xù)上溯,直到1號(hào)進(jìn)程。如果全都不符,就說明本條ACE不生效,于是就繼續(xù)考查ACL中的下一條ACE。
“進(jìn)程樹”中的進(jìn)程可能很多,但是從某個(gè)特定的進(jìn)程開始上溯,所涉及的只是它的“直系”親屬。
目前主流的操作系統(tǒng)就是Windows和Linux兩種,所以下面以Linux為例說明本發(fā)明的實(shí)施,并指出在Windows操作系統(tǒng)中實(shí)施時(shí)的技術(shù)上的特殊之處。
但是,只要有需要,本發(fā)明所述方法在別的操作系統(tǒng)中也可以實(shí)施,而具體的實(shí)施(如程序代碼以及數(shù)據(jù)結(jié)構(gòu)的定義)并不影響本發(fā)明的實(shí)質(zhì)。
實(shí)施例一、在Linux操作系統(tǒng)中的實(shí)施Linux操作系統(tǒng)支持許多種不同的文件系統(tǒng),但是就ACL機(jī)制的實(shí)現(xiàn)而言并無太大的不同,所以下面以ext2為例說明本方法的實(shí)施。
1.對(duì)ACL的擴(kuò)充在2.6.14版Linux的代碼中,ACE的數(shù)據(jù)結(jié)構(gòu)定義為struct posix_acl_entry {short e_tag;unsigned shorte_perm;unsigned int e_id;};
這里的e_tag就是ACE的屬性;e_id就是訪問者在某一方面的ID,也就是某種屬性的值,例如當(dāng)屬性為“用戶”時(shí)這就是用戶號(hào);e_perm則是允許的訪問權(quán)限位圖。
而ACL,則基本上就是一個(gè)ACE數(shù)組、即posix_acl_entry結(jié)構(gòu)數(shù)組struct posix_acl{atomic_ta_refcount;unsigned inta_count;struct posix_acl_entry a_entries
;};
結(jié)構(gòu)數(shù)組a_entries
表示其大小是可變的,字段a_count的數(shù)值說明這個(gè)數(shù)組的大小。
原來的ACE屬性有如下幾種#define ACL_USER_OBJ(0x01)#define ACL_USER(0x02)#define ACL_GROUP_OBJ (0x04)#define ACL_GROUP (0x08)#define ACL_MASK (0x10)#define ACL_OTHER(0x20)為實(shí)施本發(fā)明所述的方法,現(xiàn)在要加上一個(gè)新的屬性“曾經(jīng)執(zhí)行”,所以就增加一個(gè)定義#define ACL_EXECUTED (0x80)原來e_id的值是用戶號(hào)或組號(hào),所以32位整數(shù)就夠了。而現(xiàn)在需要用來給定一個(gè)程序名,32位整數(shù)顯然不夠了,所以要修改ACE數(shù)據(jù)結(jié)構(gòu)的定義,把e_id改成一個(gè)Union,使它既可以是32位整數(shù)、也可以是用作程序名的字符數(shù)組struct posix_acl_entry {short e_tag;unsigned shorte_perm;union {unsigned inte_id;charprog[16];} u; };
用16個(gè)字符作為程序名的長度一般夠了。其實(shí),更好的辦法是不修改數(shù)據(jù)結(jié)構(gòu),而把32位的e_id用作字符串指針,而在原來的ACL后面增加一個(gè)字符串?dāng)?shù)組(二維字符數(shù)組)。但是此種實(shí)現(xiàn)細(xì)節(jié)并不影響本發(fā)明所述方法的實(shí)質(zhì)。
至于e_perm,即允許的訪問權(quán)限位圖,一般就是讀、寫、執(zhí)行,但是也可以加上“問了再讀”、“問了再寫”、“問了再執(zhí)行”等等,先在顯示屏上跳出一個(gè)窗口,告訴使用者哪一個(gè)進(jìn)程企圖對(duì)哪一個(gè)文件進(jìn)行何種操作,由使用者選擇是否允許。
2.規(guī)則的設(shè)置Linux為ACL的設(shè)置和處理提供了若干系統(tǒng)調(diào)用,用于從用戶空間讀取/寫入某個(gè)目標(biāo)文件的ACL。其中g(shù)etxattr()用于讀取,setxattr()用于寫入。此外還有l(wèi)getxattr()和fgetxattr(),以及l(fā)setxattr()和fsetxattr(),其基本功能與前二者相同,只是使用的條件和環(huán)境有所不同。
系統(tǒng)調(diào)用getxattr()和setxattr()的操作對(duì)象是整個(gè)ACL。以setxattr()為例,應(yīng)用軟件應(yīng)該在用戶空間的緩沖區(qū)中準(zhǔn)備好整個(gè)ACL,即posix_acl數(shù)據(jù)結(jié)構(gòu),然后調(diào)用setxattr()。
內(nèi)核中與之對(duì)應(yīng)的程序入口是sys_setxattr()。雖然ACL是作為一個(gè)整體讀寫的,但是內(nèi)核中還是會(huì)接觸具體的ACE,原因是整數(shù)的存儲(chǔ)方式有“Big Ending”和“Little Ending”之分,這使得磁盤上存儲(chǔ)的格式與程序中使用的格式不同,內(nèi)核需要加以來回轉(zhuǎn)換。內(nèi)核中有三個(gè)函數(shù)涉及這種轉(zhuǎn)換,這就是posix_acl_from_xattr()、posix_acl_valid()、ext2_acl_to_disk()。下面以ext2_acl_to_disk()為例說明為了實(shí)施本發(fā)明而需要的修改。
<pre id="pre0001" xml:space="preserve" listing-type="sequence">static void * ext2_acl_to_disk(const struct posix_acl *acl,size_t *size){</pre><pre id="pre0002" xml:space="preserve" listing-type="sequence">......for (n=0;n<acl->a_count;n++) { ext2_acl_entry *entry=(ext2_acl_entry *)e; entry->e_tag=cpu_to_le16(acl->a_entries[n].e_tag); entry->e_perm=cpu_to_le16(acl->a_entries[n].e_perm); switch(acl->a_entries[n].e_tag){ case ACL_USER: case ACL_GROUP: entry->e_id= cpu_to_le32(acl->a_entries[n].e_id); e+=sizeof(ext2_acl_entry); break; ...... default: goto fail;}}return(char *)ext_acl:}</pre>這些代碼是ext2_acl_to_disk()的關(guān)鍵部分。這里的指針acl指向一個(gè)ACL數(shù)據(jù)結(jié)構(gòu)、即其緩沖區(qū),而指針entry則指向另一個(gè)ACL緩沖區(qū)中的一個(gè)ACE,整個(gè)程序的目的是要生成一個(gè)內(nèi)容相同而格式不同的副本。
程序中的for循環(huán)對(duì)ACL中的每個(gè)ACE進(jìn)行操作。首先通過cpu_to_le16()變換ACE屬性和權(quán)限位圖兩個(gè)16位整數(shù)的格式,這對(duì)于所有的ACE都是一樣。下面,如果ACE屬性為ACL_USER或ACL_GROUP,則通過cpu_to_le32()轉(zhuǎn)換e_id的數(shù)值,因?yàn)榇藭r(shí)的e_id是32位整數(shù)。但是,這里有幾個(gè)問題●首先,由于ACE數(shù)據(jù)結(jié)構(gòu)的定義已經(jīng)改變,程序中凡是要引用e_id字段的地方都要作相應(yīng)的改變,例如entry->e_id應(yīng)改作entry->u.e_id,acl->a_entries[n].e_id應(yīng)改作acl->a_entries[n].u.e_id,如此等等。
●程序中的case語句中沒有涉及新增加的ACE屬性ACL_EXECUTED,所以應(yīng)該加上。
●當(dāng)屬性為ACL_EXECUTED時(shí),e_id是個(gè)字符數(shù)組,所以不需要格式轉(zhuǎn)換。但是字符數(shù)組不能像整數(shù)那樣賦值,而需要作字符數(shù)組的復(fù)制。
所以,需要在上面的代碼中的“default”前面插入以下代碼case ACL_EXECUTED:
strncpy(entry->u.prog,acl->a_entries[n].u.prog,16)e+=sizeof(ext2_acl_entry);
break;
這樣,對(duì)于屬性為“曾經(jīng)執(zhí)行”的ACE,就把用于程序名的字符數(shù)組復(fù)制過去了。復(fù)制的長度為16,這是前面定下的。
對(duì)于其它兩個(gè)函數(shù)的修改與此相似,可以類推。
至于用戶空間的處理,即通過人機(jī)交互形成一個(gè)ACL(數(shù)據(jù)結(jié)構(gòu)),那就簡單了,任何一個(gè)略有經(jīng)驗(yàn)的程序員都可以毫不費(fèi)力地加以實(shí)現(xiàn)。具體的人機(jī)交互方式可以是菜單式的、表格式的,也可以是命令行方式的,還可以使用Web網(wǎng)頁。形成了一個(gè)文件的ACL以后,就可以通過系統(tǒng)調(diào)用setxattr()把它設(shè)置到內(nèi)核中去。
雖然有關(guān)系統(tǒng)調(diào)用是為整個(gè)ACL而設(shè)的,但也很容易在此基礎(chǔ)上實(shí)現(xiàn)單項(xiàng)ACE的增添和修改,例如,要在ACL中增加一項(xiàng)屬性為“曾經(jīng)執(zhí)行”的ACE,就可以這樣操作先通過系統(tǒng)調(diào)用getxattr()從內(nèi)核獲取目標(biāo)文件的ACL;通過鍵盤、表格、Web頁面等等手段和來源獲取用戶輸入的ACE屬性和程序名;在ACL中比對(duì),看是否已經(jīng)有屬性相同而且程序名也相同的ACE存在;如果已經(jīng)存在,則提醒用戶,并詢問是否需要修改成新的訪問權(quán)限;如果不是,就結(jié)束操作,不寫回ACL;如果是,就修改已有的ACE;如果不存在,就擴(kuò)大ACL的長度,根據(jù)用戶輸入的信息在ACL中增加一個(gè)ACE;最后通過系統(tǒng)調(diào)用setxattr()把整個(gè)ACL寫回內(nèi)核。
3.規(guī)則的運(yùn)用2.6.14版Linux代碼中有個(gè)函數(shù)permission(),每當(dāng)需要打開一個(gè)文件或目錄時(shí)都要先調(diào)用這個(gè)函數(shù),檢測(cè)是否允許當(dāng)前進(jìn)程按所要求的模式(讀/寫/執(zhí)行等等)打開目標(biāo)文件。而permission(),則根據(jù)目標(biāo)文件所在文件系統(tǒng)的種類調(diào)用該文件系統(tǒng)為此而提供的檢測(cè)函數(shù),對(duì)于ext2文件系統(tǒng),這個(gè)檢測(cè)函數(shù)是ext2_permission()。它又輾轉(zhuǎn)調(diào)用一個(gè)函數(shù)ext2_check_acl(),這就是具體察看ACL的函數(shù)了。目前ext2文件系統(tǒng)采用的是傳統(tǒng)POSIX的訪問控制,所以最后調(diào)用posix_acl_permission()逐項(xiàng)比對(duì)ACL中的每個(gè)ACE,其偽代碼描述如下posix_acl_permission(){對(duì)于ACL中的每個(gè)ACE{如果ACE屬性為ACL_USER如果當(dāng)前進(jìn)程所屬的用戶與ACE所述用戶相符,并且所要求的訪問模式與ACE所允許的模式相符,就允許;如果ACE屬性為ACL_GROUP如果當(dāng)前進(jìn)程所屬用戶在ACE所述的組內(nèi),并且所要求的訪問模式與ACE所允許的模式相符,就允許;如果ACE屬性.........
}否則拒絕;}
注意這些函數(shù)都在Linux操作系統(tǒng)的內(nèi)核中。
要在Ext2文件系統(tǒng)中實(shí)施本發(fā)明所述的方法,只要在posix_acl_permission()這個(gè)函數(shù)中增加一個(gè)條件就可以了如果ACE屬性為ACL_EXECUTED如果當(dāng)前進(jìn)程沒有曾經(jīng)執(zhí)行ACE所述的程序,并且所要求的訪問模式與ACE所允許的模式相符,就允許;對(duì)于當(dāng)前進(jìn)程是否曾經(jīng)執(zhí)行ACE所述的程序,可以寫一個(gè)函數(shù)once_executed(),使其根據(jù)檢測(cè)結(jié)果而返回“是”或“否”,其偽代碼描述如下boolean once_executed(...){以當(dāng)前進(jìn)程為目標(biāo)進(jìn)程,找到其進(jìn)程控制塊;while(目標(biāo)進(jìn)程不是原始空轉(zhuǎn)進(jìn)程){查看進(jìn)程控制塊中的程序名,與ACE中的程序名進(jìn)行比對(duì);如果發(fā)現(xiàn)相符就返回“是”,否則{從進(jìn)程控制塊中獲取父進(jìn)程的進(jìn)程號(hào);根據(jù)父進(jìn)程的進(jìn)程號(hào)找到父進(jìn)程的進(jìn)程控制塊,以父進(jìn)程為目標(biāo)進(jìn)程;}}返回“否”;}這個(gè)函數(shù)從當(dāng)前進(jìn)程開始上溯,從當(dāng)前進(jìn)程開始檢查,直到上溯到系統(tǒng)中的“始祖”進(jìn)程,由此而得到的進(jìn)程鏈就是當(dāng)前進(jìn)程的由來,只要在其中的某一步上所執(zhí)行的是ACE所述的程序(例如telnet),就說明曾經(jīng)執(zhí)行過這個(gè)程序。換言之,當(dāng)前進(jìn)程就是在執(zhí)行這個(gè)程序,或者是由這個(gè)程序直接或間接派生下來的。
注意在上述算法中比對(duì)的是進(jìn)程控制塊中的程序名,因?yàn)長inux的進(jìn)程控制塊只提供程序名。但是Linux也提供用來獲取一個(gè)進(jìn)程的完整命令行的手段,即函數(shù)proc_pid_cmdline(),通過這個(gè)函數(shù)就可以獲取指定進(jìn)程的命令行。如果是使用命令行比對(duì),那就是在命令行中搜索,看是否出現(xiàn)ACE中指定的程序名。如前所述,使用命令行比對(duì)更為可靠。
以上敘述說明了在Linux操作系統(tǒng)中如何針對(duì)ext2文件系統(tǒng)實(shí)施本發(fā)明。
對(duì)于別的文件系統(tǒng),雖然有關(guān)的函數(shù)和代碼可能有所不同,但它們的邏輯和實(shí)質(zhì)是相同的,所以這并不影響本發(fā)明的實(shí)質(zhì)。
實(shí)施例二、在Windows操作系統(tǒng)中的實(shí)施本發(fā)明所述方法也適用于Windows,在實(shí)施中可以參考上述的Linux實(shí)施例。
在Windows系統(tǒng)中,每個(gè)用戶都有一個(gè)“證件(Token)”,凡是屬于這個(gè)用戶的進(jìn)程都使用這個(gè)證件。而每一個(gè)受保護(hù)的“對(duì)象”,則都有一個(gè)“安全描述項(xiàng)(Security Descriptor)”,ACL就是其中的一部分。讓每個(gè)用戶都有個(gè)證件實(shí)際上并不是特別有新意的概念,因?yàn)樽C件中的信息也只是與身份有關(guān)的信息,例如用戶名、所屬的組等等,而沒有與行為和歷史有關(guān)的信息。其好處只是在于例如用戶名可以用字符串、而不必像在Linux中那樣只能使用數(shù)值形式的用戶號(hào)。Linux雖然沒有“證件”的概念,但是有關(guān)的信息記錄在每個(gè)進(jìn)程的控制塊中,實(shí)質(zhì)上還是一樣。Windows的ACL稱為DACL(還有個(gè)SACL,用于不同目的),DACL的數(shù)據(jù)結(jié)構(gòu)等等定義當(dāng)然與Linux中的不同,但是基本的原理和過程都是一樣的,在“方法”的層次上并沒有什么不同。
但是有兩個(gè)例外的因素要考慮。
首先,在Linux操作系統(tǒng)中,進(jìn)程控制塊中所記載的“父進(jìn)程”是本進(jìn)程的“生父”、即創(chuàng)建者。在這個(gè)條件下,從一個(gè)進(jìn)程上溯所得到的是一個(gè)進(jìn)程創(chuàng)建鏈,它真實(shí)地反映了使用者(到這個(gè)進(jìn)程為止)的行為歷史、或精心安排。但是,Windows操作系統(tǒng)的進(jìn)程控制塊中所記載的“父進(jìn)程”卻有所不同,它所記載的是本進(jìn)程的“養(yǎng)父”,本進(jìn)程從這個(gè)父進(jìn)程繼承資源(例如已打開文件),但卻未必是這個(gè)進(jìn)程所創(chuàng)建。這是因?yàn)椋赪indows操作系統(tǒng)中一個(gè)進(jìn)程可以替另一個(gè)進(jìn)程創(chuàng)建子進(jìn)程。這樣,心存叵測(cè)的進(jìn)程(軟件)A就可以創(chuàng)建一個(gè)子進(jìn)程B、讓它去干壞事,但是卻說這是另一個(gè)(正派的)進(jìn)程C的子進(jìn)程,而在B的進(jìn)程控制塊中則記載其父進(jìn)程為C。于是,如果從這個(gè)子進(jìn)程B上溯,A就不出現(xiàn)在其家世中,因而其家世、實(shí)際上是使用者的行為歷史、就被“漂白”了。
要克服這個(gè)問題,需要在Windows的進(jìn)程控制塊中增加一個(gè)新的字段,例如“創(chuàng)建者進(jìn)程”。然后,每當(dāng)創(chuàng)建一個(gè)新進(jìn)程的時(shí)候,除保持把指定的“父進(jìn)程”記載在進(jìn)程控制塊中的“父進(jìn)程”字段中外,還要把創(chuàng)建者、即當(dāng)前進(jìn)程記載在“創(chuàng)建者進(jìn)程”字段中。
另一方面,Windows操作系統(tǒng)把“文件”的概念擴(kuò)充到了包括文件、進(jìn)程、線程在內(nèi)的“對(duì)象”。這樣,受“訪問控制名單”ACL機(jī)制保護(hù)的目標(biāo)也得到了擴(kuò)展。但是,進(jìn)程和線程不像文件那樣在文件系統(tǒng)的某個(gè)目錄中有個(gè)相對(duì)穩(wěn)定的項(xiàng)目,而是在動(dòng)態(tài)地變化,所以一個(gè)進(jìn)程的ACL是在創(chuàng)建該進(jìn)程的時(shí)候作為參數(shù)傳遞給它的。所以,程序員在編寫程序時(shí)要為所創(chuàng)建的進(jìn)程準(zhǔn)備好一個(gè)ACL。對(duì)于線程也是一樣。
其余就跟在Linux操作系統(tǒng)中的實(shí)施一樣了。
由于微軟不公開其Windows操作系統(tǒng)的源代碼,實(shí)際上只有微軟自己才有可能來實(shí)施本發(fā)明所述的方法,但是這并不影響本發(fā)明作為一種方法、即根據(jù)用戶的宏觀行為歷史控制文件訪問和對(duì)象訪問的實(shí)質(zhì)。
同樣,對(duì)于別的操作系統(tǒng),其(文件)訪問控制名單機(jī)制以及進(jìn)程管理機(jī)制的實(shí)現(xiàn)多少有些不同,但是它們的邏輯和實(shí)質(zhì)是相同的,所以這并不影響本發(fā)明根據(jù)用戶的宏觀行為歷史控制文件訪問的實(shí)質(zhì)。
注意本發(fā)明的效果只是在一定程度上提高了操作系統(tǒng)的安全性。在系統(tǒng)安全領(lǐng)域,沒有一種方法可以一勞永逸地解決問題,也沒有一種方法單獨(dú)就可以解決問題。所以,每一種能夠使系統(tǒng)安全性有所提高的方法和措施都是有意義、有價(jià)值的,實(shí)際使用中則應(yīng)該綜合使用各種有益的方法和措施。
權(quán)利要求
1.一種在操作系統(tǒng)中根據(jù)用戶行為歷史來控制文件訪問的方法,其特征是主要包括如下步驟,1.1)在原有的“訪問控制名單”ACL機(jī)制中增加一種訪問控制項(xiàng)(ACE),該訪問控制項(xiàng)的屬性為“曾經(jīng)執(zhí)行”,內(nèi)容包括一個(gè)訪問者的ID和對(duì)于訪問權(quán)限的規(guī)定,其中訪問者的ID為程序文件名;如果要求訪問目標(biāo)文件的用戶曾經(jīng)執(zhí)行過這個(gè)程序,即說明訪問目標(biāo)文件的當(dāng)前進(jìn)程由該程序派生而來,并適用該ACE所規(guī)定的訪問權(quán)限;1.2)系統(tǒng)管理員為需要保護(hù)的文件設(shè)置ACL,在ACL中針對(duì)需要防備的每個(gè)程序都配備一個(gè)屬性為“曾經(jīng)執(zhí)行”的ACE,在ACE中規(guī)定具體的訪問權(quán)限,訪問者的ID設(shè)置成需要防備的程序文件名;1.3)當(dāng)某個(gè)進(jìn)程要求訪問一個(gè)文件時(shí),操作系統(tǒng)依次查看該文件的“訪問控制名單”ACL中的每一個(gè)訪問控制項(xiàng),即ACE,對(duì)于屬性不是“曾經(jīng)執(zhí)行”的訪問控制項(xiàng)按ACL機(jī)制原有的方式處理;1.4)對(duì)于屬性為“曾經(jīng)執(zhí)行”的訪問控制項(xiàng),操作系統(tǒng)通過考察當(dāng)前進(jìn)程的“進(jìn)程控制塊”中提供的程序名確定當(dāng)前進(jìn)程是否正在執(zhí)行該ACE所指定的程序;如果是,就按該ACE所規(guī)定的訪問權(quán)限控制當(dāng)前進(jìn)程對(duì)文件的訪問,拒絕越權(quán)的訪問;如果否,操作系統(tǒng)就從當(dāng)前進(jìn)程開始上溯,根據(jù)“進(jìn)程控制塊”中的“父進(jìn)程”字段逐步考察所涉及的每個(gè)進(jìn)程的父進(jìn)程,根據(jù)其“進(jìn)程控制塊”中提供的程序名確定該進(jìn)程是否正在執(zhí)行具體ACE所指定的程序,如果是就按該ACE所規(guī)定的訪問權(quán)限控制當(dāng)前進(jìn)程對(duì)文件的訪問,拒絕越權(quán)的訪問。
2.根據(jù)權(quán)利要求1所述的在操作系統(tǒng)中根據(jù)用戶行為歷史來控制文件訪問的方法,其特征是2.1)在Windows操作系統(tǒng)的進(jìn)程控制塊中增設(shè)代表著實(shí)際創(chuàng)建者的“創(chuàng)建者進(jìn)程”字段,創(chuàng)建一個(gè)新進(jìn)程的時(shí)候,除保持把指定的“父進(jìn)程”記載在進(jìn)程控制塊中的“父進(jìn)程”字段中外,還要把創(chuàng)建者、即當(dāng)前進(jìn)程記載在“創(chuàng)建者進(jìn)程”字段中。2.2)在Windows操作系統(tǒng)中,受“訪問控制名單”ACL機(jī)制保護(hù)的目標(biāo)是操作系統(tǒng)中包括文件和進(jìn)程及線程在內(nèi)的“對(duì)象”。
3.根據(jù)權(quán)利要求1所述的在操作系統(tǒng)中根據(jù)用戶行為歷史來控制文件訪問的方法,其特征是根據(jù)“進(jìn)程控制塊”中提供的“命令行”確定一個(gè)進(jìn)程是否正在執(zhí)行具體ACE所指定的程序。
4.根據(jù)權(quán)利要求1所述的在操作系統(tǒng)中根據(jù)用戶行為歷史來控制文件訪問的方法,其特征是通過操作系統(tǒng)提供的手段獲取一個(gè)進(jìn)程的“命令行”,并根據(jù)該“命令行”確定一個(gè)進(jìn)程是否正在執(zhí)行具體ACE所指定的程序。
5.根據(jù)權(quán)利要求1所述的在操作系統(tǒng)中根據(jù)用戶行為歷史來控制文件訪問的方法,其特征是在拒絕越權(quán)訪問的同時(shí)將此越權(quán)訪問的企圖作為入侵報(bào)警信息記錄下來。
全文摘要
本發(fā)明涉及一種在操作系統(tǒng)中根據(jù)用戶行為歷史來控制文件訪問的方法,主要包括如下步驟,為需要保護(hù)的文件設(shè)置ACL,在ACL中針對(duì)需要防備的每個(gè)程序都配備一個(gè)屬性為“曾經(jīng)執(zhí)行”的訪問控制項(xiàng),在ACE中規(guī)定具體的訪問權(quán)限,訪問者的ID設(shè)置成需要防備的程序文件名;當(dāng)某個(gè)進(jìn)程要求訪問一個(gè)文件時(shí),操作系統(tǒng)依次查看該文件的“訪問控制名單”ACL中的每一個(gè)訪問控制項(xiàng),對(duì)于屬性為“曾經(jīng)執(zhí)行”的訪問控制項(xiàng),操作系統(tǒng)通過考察當(dāng)前進(jìn)程的“進(jìn)程控制塊”中提供的程序名確定當(dāng)前進(jìn)程是否正在執(zhí)行該ACE所指定的程序。本發(fā)明優(yōu)點(diǎn)是把對(duì)于使用者行為歷史的考察納入ACL機(jī)制,防止惡意用戶通過網(wǎng)絡(luò)不適當(dāng)?shù)卦L問目標(biāo)文件,其效果是提高了操作系統(tǒng)的安全性。
文檔編號(hào)G06F21/22GK1936915SQ20061005355
公開日2007年3月28日 申請(qǐng)日期2006年9月15日 優(yōu)先權(quán)日2006年9月15日
發(fā)明者毛德操 申請(qǐng)人:毛德操, 浙江浙大網(wǎng)新科技股份有限公司