用(系統(tǒng)調(diào)用號(hào)在Linux中為188)將安全標(biāo)簽嵌入到上傳的網(wǎng)絡(luò)文件中,具體是嵌入到擴(kuò)展文件屬性“user”命名空間中。安全標(biāo)簽的數(shù)值可以在網(wǎng)絡(luò)腳本中直接指定,也可以在沒有指定的情況下使用存儲(chǔ)在腳本引擎配置文件中的默認(rèn)值。
[0022]步驟104,腳本引擎將嵌有安全標(biāo)簽的文件寫入網(wǎng)絡(luò)服務(wù)器本地文件系統(tǒng),至此通過腳本引擎將安全標(biāo)簽嵌入網(wǎng)絡(luò)文件并存儲(chǔ)在網(wǎng)絡(luò)服務(wù)器本地文件系統(tǒng)中的流程完成。
[0023]第二情況B:通過其他協(xié)議上傳至網(wǎng)絡(luò)服務(wù)器的網(wǎng)絡(luò)文件在輔助工具的協(xié)助下嵌入安全標(biāo)簽。
[0024]步驟105,網(wǎng)絡(luò)管理員通過FTP協(xié)議或SSH協(xié)議將網(wǎng)絡(luò)文件上傳至網(wǎng)絡(luò)服務(wù)器并將其寫入網(wǎng)絡(luò)服務(wù)器本地文件系統(tǒng)。此時(shí)的網(wǎng)絡(luò)文件并不含有任何安全標(biāo)簽。
[0025]步驟106,網(wǎng)絡(luò)管理員調(diào)用輔助工具將安全標(biāo)簽嵌入到網(wǎng)絡(luò)服務(wù)器本地文件系統(tǒng)上存儲(chǔ)的指定文件中。本發(fā)明中,該輔助工具包含的主要功能是將安全標(biāo)簽(可以由網(wǎng)絡(luò)管理員指定也可以是腳本引擎配置文件中的默認(rèn)值)嵌入到已經(jīng)存儲(chǔ)在本地文件系統(tǒng)上的網(wǎng)絡(luò)文件中。輔助工具可以對(duì)指定的文件通過系統(tǒng)調(diào)用寫入符合安全標(biāo)簽存儲(chǔ)規(guī)范的數(shù)值到文件擴(kuò)展屬性中,從而可以在不通過腳本引擎上傳的網(wǎng)絡(luò)文件中嵌入安全標(biāo)簽。
[0026]步驟107,網(wǎng)絡(luò)管理員可以指定要寫入的安全標(biāo)簽的數(shù)值,或者直接使用默認(rèn)值。
[0027]步驟108,輔助工具通過系統(tǒng)調(diào)用將安全標(biāo)簽嵌入到存儲(chǔ)在網(wǎng)絡(luò)服務(wù)器本地文件系統(tǒng)中的網(wǎng)絡(luò)文件,具體是嵌入到網(wǎng)絡(luò)文件的擴(kuò)展文件屬性“user”命名空間中。
[0028]第二部分,腳本引擎根據(jù)安全標(biāo)簽對(duì)網(wǎng)絡(luò)文件進(jìn)行強(qiáng)制訪問控制,具體如下:
步驟109,遠(yuǎn)程網(wǎng)絡(luò)用戶通過訪問網(wǎng)絡(luò)腳本下載指定的網(wǎng)絡(luò)文件。網(wǎng)絡(luò)用戶可以通過網(wǎng)絡(luò)腳本的參數(shù)指定他們需要下載的網(wǎng)絡(luò)文件的文件名以及在必要的情況下指定網(wǎng)絡(luò)文件的存儲(chǔ)路徑。這里,惡意的網(wǎng)絡(luò)用戶(即攻擊者)將可以任意指定文件名和文件路徑來試圖非法下載網(wǎng)絡(luò)服務(wù)器上他們感興趣的機(jī)密文件。在腳本引擎中所有涉及讀文件操作的函數(shù)調(diào)用后插入讀文件擴(kuò)展屬性的系統(tǒng)調(diào)用,從而使腳本引擎可以獲取文件的安全標(biāo)簽從而對(duì)文件的后續(xù)操作進(jìn)行訪問控制。
[0029]步驟110,網(wǎng)絡(luò)腳本通過腳本引擎從網(wǎng)絡(luò)服務(wù)器本地文件系統(tǒng)中讀取指定的文件,具體是腳本引擎將根據(jù)遠(yuǎn)程網(wǎng)絡(luò)用戶指定的文件名和存儲(chǔ)路徑從網(wǎng)絡(luò)服務(wù)器本地文件系統(tǒng)中讀取指定的文件。該文件的內(nèi)容以及所有結(jié)構(gòu)信息將被整體拷貝到腳本引擎的內(nèi)存空間。
[0030]步驟111,腳本引擎將通過系統(tǒng)調(diào)用讀取文件的擴(kuò)展文件屬性以讀取安全標(biāo)簽數(shù)值。安全標(biāo)簽將以 “SecurityLabel.XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX “的形式存儲(chǔ)在擴(kuò)展文件屬性“user”命名域中。
[0031]步驟112,腳本引擎根據(jù)安全標(biāo)簽的數(shù)值決定文件是否有權(quán)被傳送給網(wǎng)絡(luò)用戶,如果有權(quán)則執(zhí)行步驟114 ;如果無權(quán)則執(zhí)行步驟113。腳本引擎將根據(jù)讀出的文件安全標(biāo)簽進(jìn)行強(qiáng)制訪問控制,具體的訪問控制規(guī)則是,如果文件的安全標(biāo)簽數(shù)值和網(wǎng)絡(luò)腳本指定的安全標(biāo)簽數(shù)值(可以是由腳本程序員以參數(shù)的形式寫在腳本中也可以是腳本引擎配置文件中指定的默認(rèn)值)相等,則該文件有權(quán)被腳本引擎讀取并回傳給遠(yuǎn)程網(wǎng)絡(luò)用戶(允許訪問);否則,腳本引擎無權(quán)讀取該文件并回傳給遠(yuǎn)程網(wǎng)絡(luò)用戶(禁止訪問)。這一規(guī)則不但能禁止網(wǎng)絡(luò)服務(wù)器上存儲(chǔ)的本地文件被非法下載,同時(shí)還能控制網(wǎng)絡(luò)文件只能通過其隸屬的網(wǎng)絡(luò)腳本下載。腳本引擎開放的讀文件API函數(shù)加入一個(gè)參數(shù)項(xiàng),使得腳本程序員可以在調(diào)用這些函數(shù)時(shí)指定安全標(biāo)簽的數(shù)值,從而限定包含哪種安全標(biāo)簽數(shù)值的文件可以被腳本讀取。如果沒有指定,安全標(biāo)簽的數(shù)值將為存儲(chǔ)在腳本引擎配置文件中的默認(rèn)值。
[0032]步驟113,由于無權(quán)讀取相應(yīng)的文件,腳本引擎將刪除其內(nèi)存空間中文件的拷貝并直接返回。
[0033]步驟114,腳本引擎有權(quán)讀取相應(yīng)的文件。因此,腳本引擎將首先刪除文件中嵌入的安全標(biāo)簽,即刪除其內(nèi)存空間中文件的安全屬性,從而擦除本發(fā)明對(duì)文件做的更改,然后將該文件通過網(wǎng)絡(luò)服務(wù)器回傳給遠(yuǎn)程網(wǎng)絡(luò)用戶。刪除安全標(biāo)簽通過系統(tǒng)調(diào)用完成。
[0034]第一部分的具體實(shí)例如下:第一情況A,如果網(wǎng)絡(luò)文件是通過腳本引擎寫入網(wǎng)絡(luò)服務(wù)器本地文件系統(tǒng)的,安全標(biāo)簽將通過腳本引擎直接嵌入到網(wǎng)絡(luò)文件中。具體的做法是在腳本引擎中所有的寫文件函數(shù)前調(diào)用安全標(biāo)簽的嵌入操作。標(biāo)簽的內(nèi)容是一個(gè)32位的16進(jìn)制數(shù)。具體數(shù)值可以由腳本程序員在調(diào)用腳本引擎對(duì)外開放的API(即應(yīng)用程序接口)時(shí)通過參數(shù)指定,也可以在不指定的情況下由腳本引擎使用默認(rèn)值。默認(rèn)值一般是腳本引擎安裝時(shí)隨機(jī)生成并保存在腳本引擎的配置文件中。當(dāng)使用默認(rèn)值時(shí),安全標(biāo)簽的嵌入工作對(duì)腳本程序員來說是完全透明的,因此對(duì)腳本程序員的人力成本消耗為零。安全標(biāo)簽的默認(rèn)值可以將網(wǎng)絡(luò)文件和本地文件(本地文件的安全標(biāo)簽為空)進(jìn)行精確隔離。當(dāng)使用指定值時(shí),腳本程序員可以在其調(diào)用的寫文件API函數(shù)中以參數(shù)的形式指定具體的標(biāo)簽內(nèi)容,這一過程需要消耗一定的人力成本。但這種消耗與實(shí)現(xiàn)完整的文件名過濾算法相比較,幾乎可以忽略不計(jì)。安全標(biāo)簽的指定值不但可以將網(wǎng)絡(luò)文件和本地文件進(jìn)行精確隔離,還可以對(duì)隸屬于不同網(wǎng)絡(luò)服務(wù)的網(wǎng)絡(luò)文件加以區(qū)分,從而實(shí)現(xiàn)基于文件的訪問控制,其訪問控制的精確度大大優(yōu)于現(xiàn)有的基于文件夾或操作系統(tǒng)固有訪問控制體系的方法。同時(shí),由于安全標(biāo)簽的誤寫最多只會(huì)造成正常的網(wǎng)絡(luò)文件不能被下載,而并不會(huì)導(dǎo)致任何的機(jī)密文件被非法下載,因此本發(fā)明提出的方法能實(shí)現(xiàn)可靠的網(wǎng)絡(luò)文件訪問控制。具體的實(shí)施步驟如下:腳本引擎安裝程序生成一個(gè)32位的16進(jìn)制數(shù)作為默認(rèn)的安全標(biāo)簽保存在腳本引擎安裝好后的配置文件中。改寫腳本引擎中所有涉及文件寫入功能的API函數(shù),在文件寫入文件系統(tǒng)前實(shí)現(xiàn)安全標(biāo)簽的嵌入功能。在涉及文件寫入功能的API函數(shù)中預(yù)留一個(gè)新的參數(shù)項(xiàng),以供腳本程序員在需要的情況下指定安全標(biāo)簽的數(shù)值。第二情況B,對(duì)于那些不是通過腳本殷勤寫入網(wǎng)絡(luò)服務(wù)器本地文件系統(tǒng)的網(wǎng)絡(luò)文件(比如通過FTP服務(wù)或SSH服務(wù)被批量寫入網(wǎng)絡(luò)服務(wù)器的網(wǎng)絡(luò)文件等),網(wǎng)絡(luò)服務(wù)器管理員需要借助輔助工具將安全標(biāo)簽嵌入到這類網(wǎng)絡(luò)文件中。這類輔助工具將調(diào)用和實(shí)現(xiàn)在腳本引擎中一樣的函數(shù)完成對(duì)安全標(biāo)簽的寫入,標(biāo)簽的內(nèi)容可以從腳本引擎配置文件(默認(rèn)值)或腳本源文件(指定值)讀取。雖然在這種情況下需要消耗一定的網(wǎng)絡(luò)服務(wù)器管理員的人力成本,但是相比于對(duì)所有下載腳本實(shí)現(xiàn)下載文件名的過濾算法,這種人力成本的開銷并不是很大。更關(guān)鍵的是,不同于文件名過濾算法中任何人的失誤都將導(dǎo)致文件包含漏洞的產(chǎn)生,安全標(biāo)簽的遺漏只會(huì)導(dǎo)致正常的網(wǎng)絡(luò)文件不能被下載,因?yàn)楸景l(fā)明對(duì)不含安全標(biāo)簽的文件的下載是直接拒絕的。換言之,本發(fā)明可以在犧牲一定網(wǎng)絡(luò)下載服務(wù)易用性的前提下確保網(wǎng)絡(luò)文件下載的安全性。具體的實(shí)施步驟如下:安全標(biāo)簽的數(shù)值可由管理員輸入輔助工具或從腳本引擎配置文件中讀取。輔助工具從本地文件系統(tǒng)中讀取網(wǎng)絡(luò)文件,在嵌入安全標(biāo)簽后將文件寫回本地文件系統(tǒng)。
[0035]第二部分的具體實(shí)例如下:當(dāng)網(wǎng)絡(luò)服務(wù)器上運(yùn)行的文件下載腳本接收到遠(yuǎn)程網(wǎng)絡(luò)用戶文件下載命令時(shí),腳本引擎將從本地文件系統(tǒng)中讀取相應(yīng)的文件并通過網(wǎng)絡(luò)回傳給遠(yuǎn)程網(wǎng)絡(luò)用戶。本發(fā)明將在腳本引擎把文件從本地文件系統(tǒng)中讀出后、并且文件被通過網(wǎng)絡(luò)回傳給遠(yuǎn)程網(wǎng)絡(luò)用戶前對(duì)文件進(jìn)行強(qiáng)制訪問控制。訪問控制的具體策略將根據(jù)文件的安全標(biāo)簽進(jìn)行:如果文件沒有安全標(biāo)簽,該文件將被禁止回傳給遠(yuǎn)程網(wǎng)絡(luò)用戶(即訪問權(quán)限最小化原則);如果文件含有安全標(biāo)簽,腳本引擎將會(huì)對(duì)比文件中安全標(biāo)簽的數(shù)值和腳本中調(diào)用的API文件讀取函數(shù)傳來的安全標(biāo)簽的數(shù)值,如果一樣,則回傳文件,否則,將禁止回傳。所有腳本引擎對(duì)外開放的文件讀取API函數(shù)將引入一個(gè)新的變量用以指定安全標(biāo)簽的數(shù)值。若該變量為空,則使用安全標(biāo)簽的默認(rèn)值對(duì)文件進(jìn)行讀取。這里需要腳本程序員通過