本發(fā)明涉及訪問權(quán)限管理技術(shù)領(lǐng)域,特別是涉及一種基于文件描述符和會話的權(quán)限控制方法和系統(tǒng)。
背景技術(shù):
隨著科學(xué)技術(shù)的發(fā)展,越來越多的互聯(lián)網(wǎng)用戶通過遠(yuǎn)程訪問的方式來獲取外部網(wǎng)絡(luò)的共享資源。想要實(shí)現(xiàn)遠(yuǎn)程訪問,就需要用戶的客戶端通過遠(yuǎn)程登錄的方式連接到服務(wù)器,然后由服務(wù)器調(diào)取數(shù)據(jù)庫中的相應(yīng)信息返回至客戶端。
然而,在互聯(lián)網(wǎng)應(yīng)用中,服務(wù)器為不同的用戶提供不同的服務(wù),即不同的客戶端具有不同的相應(yīng)訪問權(quán)限。各客戶端只能在自身的訪問權(quán)限范圍內(nèi)獲取數(shù)據(jù)庫中的信息。通常情況下,當(dāng)用戶在進(jìn)行遠(yuǎn)程訪問時,服務(wù)器進(jìn)行系統(tǒng)調(diào)用權(quán)限的判斷,通常情況下直接作用于文件系統(tǒng)的數(shù)據(jù)(文件和目錄)和數(shù)據(jù)庫連接,所謂的系統(tǒng)調(diào)用指的是進(jìn)程陷入操作系統(tǒng)內(nèi)核執(zhí)行系統(tǒng)功能的調(diào)用,如創(chuàng)建文件、修改文件和執(zhí)行程序。而系統(tǒng)權(quán)限通常指的是系統(tǒng)調(diào)用時的權(quán)限,典型情況下,權(quán)限通常由文件屬性和進(jìn)程運(yùn)行的所屬用戶組決定。當(dāng)進(jìn)程執(zhí)行系統(tǒng)調(diào)用時就會受到進(jìn)程用戶和文件的屬性的局限。
因而,如何實(shí)現(xiàn)當(dāng)進(jìn)程執(zhí)行系統(tǒng)調(diào)用時不局限于進(jìn)程用戶和文件的屬性而進(jìn)行權(quán)限的控制,是本領(lǐng)域技術(shù)人員目前需要解決的技術(shù)問題。
技術(shù)實(shí)現(xiàn)要素:
本發(fā)明的目的是提供一種基于文件描述符和會話的權(quán)限控制方法和系統(tǒng),可以實(shí)現(xiàn)當(dāng)進(jìn)程執(zhí)行系統(tǒng)調(diào)用時不局限于進(jìn)程用戶和文件的屬性而進(jìn)行權(quán)限的控制。
為解決上述技術(shù)問題,本發(fā)明提供了如下技術(shù)方案:
一種基于文件描述符和會話的權(quán)限控制方法,包括:
預(yù)先在接收系統(tǒng)調(diào)用的新連接信息時,建立與該新連接信息關(guān)聯(lián)的連接文件描述符和會話,并通過該連接文件描述符對該會話進(jìn)行標(biāo)記;
在應(yīng)用程序的進(jìn)程進(jìn)行系統(tǒng)調(diào)用時,根據(jù)相應(yīng)的連接文件描述符對所述系統(tǒng)調(diào)用按會話進(jìn)行識別;
對所述系統(tǒng)調(diào)用的所屬當(dāng)前會話的會話權(quán)限進(jìn)行識別;
根據(jù)所述當(dāng)前會話對應(yīng)的會話權(quán)限控制當(dāng)前系統(tǒng)調(diào)用。
優(yōu)選地,所述預(yù)先在接收系統(tǒng)調(diào)用的新連接信息時,建立與該新連接信息關(guān)聯(lián)的連接文件描述符和會話,并通過該連接文件描述符對該會話進(jìn)行標(biāo)記,包括:
預(yù)先在接收系統(tǒng)調(diào)用的新連接信息時,建立與該新連接信息關(guān)聯(lián)的連接文件描述符;
建立與所述新連接信息關(guān)聯(lián)的會話;
將各所述連接文件描述符一一映射到一個會話或者空會話中。
優(yōu)選地,所述在應(yīng)用程序的進(jìn)程進(jìn)行系統(tǒng)調(diào)用時,根據(jù)相應(yīng)的連接文件描述符對所述系統(tǒng)調(diào)用按會話進(jìn)行識別,包括:
在應(yīng)用程序的進(jìn)程進(jìn)行系統(tǒng)調(diào)用時,判斷當(dāng)前系統(tǒng)調(diào)用是否包含預(yù)設(shè)的連接文件描述符;
若是,則更新所述系統(tǒng)調(diào)用所屬的當(dāng)前會話為該預(yù)設(shè)的連接文件描述符所映射的會話;
執(zhí)行當(dāng)前系統(tǒng)調(diào)用;
判斷當(dāng)前系統(tǒng)調(diào)用是否產(chǎn)生了異于所述預(yù)設(shè)的連接文件描述符的新連接文件描述符;
若是,則將該新連接文件描述符映射到當(dāng)前會話。
優(yōu)選地,所述對所述系統(tǒng)調(diào)用的所屬當(dāng)前會話的會話權(quán)限進(jìn)行識別,包括:
獲取所述系統(tǒng)調(diào)用的所述當(dāng)前會話的發(fā)起終端的ip地址;
根據(jù)所述ip地址和預(yù)設(shè)的角色配置信息,識別所述當(dāng)前會話的所屬角色;
根據(jù)所述當(dāng)前會話的所屬角色,調(diào)取該角色對應(yīng)的會話權(quán)限配置。
優(yōu)選地,所述對所述系統(tǒng)調(diào)用的所屬當(dāng)前會話的會話權(quán)限進(jìn)行識別,包括:
判斷所述當(dāng)前會話的會話信息中是否包含預(yù)設(shè)的會話角色認(rèn)證信息;
若是,則獲取所述會話角色認(rèn)證信息,并根據(jù)所述會話角色認(rèn)證信息識別分析出該會話信息的發(fā)起終端的角色,獲取該角色的會話權(quán)限配置。
優(yōu)選地,所述對所述系統(tǒng)調(diào)用的所屬當(dāng)前會話的會話權(quán)限進(jìn)行識別,包括:
預(yù)先建立用于預(yù)設(shè)角色通訊的虛擬通訊網(wǎng)絡(luò)隧道;
對所述當(dāng)前會話的來源隧道進(jìn)行識別,以判斷所述當(dāng)前會話所屬的角色;
根據(jù)所述當(dāng)前會話所屬的角色調(diào)取對應(yīng)的會話權(quán)限配置。
一種基于文件描述符和會話的權(quán)限控制系統(tǒng),包括:
預(yù)處理模塊,用于預(yù)先在接收系統(tǒng)調(diào)用的新連接信息時,建立與該新連接信息關(guān)聯(lián)的連接文件描述符和會話,并通過該連接文件描述符對該會話進(jìn)行標(biāo)記;
識別模塊,用于在應(yīng)用程序的進(jìn)程進(jìn)行系統(tǒng)調(diào)用時,根據(jù)相應(yīng)的連接文件描述符對所述系統(tǒng)調(diào)用按會話進(jìn)行識別;
權(quán)限識別模塊,用于對所述系統(tǒng)調(diào)用的所屬當(dāng)前會話的會話權(quán)限進(jìn)行識別;
系統(tǒng)調(diào)用模塊,用于根據(jù)所述當(dāng)前會話對應(yīng)的會話權(quán)限控制當(dāng)前系統(tǒng)調(diào)用。
優(yōu)選地,所述預(yù)處理模塊包括:
描述符構(gòu)建單元,用于預(yù)先在接收系統(tǒng)調(diào)用的新連接信息時,建立與該新連接信息關(guān)聯(lián)的連接文件描述符;
會話構(gòu)建單元,用于建立與所述新連接信息關(guān)聯(lián)的會話;
第一映射單元,用于將各所述連接文件描述符一一映射到一個會話或者空會話中。
優(yōu)選地,所述識別模塊包括:
第一判斷單元,用于在應(yīng)用程序的進(jìn)程進(jìn)行系統(tǒng)調(diào)用時,判斷當(dāng)前系統(tǒng)調(diào)用是否包含預(yù)設(shè)的連接文件描述符;
會話更新單元,用于在判定當(dāng)前系統(tǒng)調(diào)用包含預(yù)設(shè)的連接文件描述符時,更新所述系統(tǒng)調(diào)用所屬的當(dāng)前會話為該預(yù)設(shè)的連接文件描述符所映射的會話;
執(zhí)行單元,用于執(zhí)行當(dāng)前系統(tǒng)調(diào)用;
第二判斷單元,用于判斷當(dāng)前系統(tǒng)調(diào)用是否產(chǎn)生了異于所述預(yù)設(shè)的連接文件描述符的新連接文件描述符;
第二映射單元,則將該新連接文件描述符映射到當(dāng)前會話。
優(yōu)選地,所述權(quán)限識別模塊包括:
第一獲取單元,用于獲取所述系統(tǒng)調(diào)用的所述當(dāng)前會話的發(fā)起終端的ip地址;
角色識別單元,用于根據(jù)所述ip地址和預(yù)設(shè)的角色配置信息,識別所述當(dāng)前會話的所屬角色;
第一權(quán)限調(diào)取單元,用于根據(jù)所述當(dāng)前會話的所屬角色,調(diào)取該角色對應(yīng)的會話權(quán)限配置。
優(yōu)選地,所述權(quán)限識別模塊包括:
第三判斷單元,用于判斷所述當(dāng)前會話的會話信息中是否包含預(yù)設(shè)的會話角色認(rèn)證信息;
第二獲取單元,用于在所述第三判斷單元判定所述當(dāng)前會話的會話信息中包含預(yù)設(shè)的會話角色認(rèn)證信息時,獲取所述會話角色認(rèn)證信息,并根據(jù)所述會話角色認(rèn)證信息識別分析出該會話信息的發(fā)起終端的角色,獲取該角色的會話權(quán)限配置。
優(yōu)選地,所述權(quán)限識別模塊包括:
通訊隧道建立單元,用于預(yù)先建立用于預(yù)設(shè)角色通訊的虛擬通訊網(wǎng)絡(luò)隧道;
來源隧道識別單元,用于對所述當(dāng)前會話的來源隧道進(jìn)行識別,以判斷所述當(dāng)前會話所屬的角色;
第二權(quán)限調(diào)取單元,用于根據(jù)所述當(dāng)前會話所屬的角色調(diào)取對應(yīng)的會話權(quán)限配置。
與現(xiàn)有技術(shù)相比,上述技術(shù)方案具有以下優(yōu)點(diǎn):
本發(fā)明實(shí)施例所提供的一種基于文件描述符和會話的權(quán)限控制方法,包括:預(yù)先在接收系統(tǒng)調(diào)用的新連接信息時,建立與該新連接信息關(guān)聯(lián)的連接文件描述符和會話,并通過該連接文件描述符對該會話進(jìn)行標(biāo)記;在應(yīng)用程序的進(jìn)程進(jìn)行系統(tǒng)調(diào)用時,根據(jù)相應(yīng)的連接文件描述符對系統(tǒng)調(diào)用按會話進(jìn)行識別;對系統(tǒng)調(diào)用的所屬當(dāng)前會話的會話權(quán)限進(jìn)行識別;根據(jù)當(dāng)前會話對應(yīng)的會話權(quán)限控制當(dāng)前系統(tǒng)調(diào)用。在服務(wù)進(jìn)程接收到新連接后,即接收到新的任務(wù)時,創(chuàng)建與該新連接關(guān)聯(lián)的連接文件描述符和會話,并通過該連接文件描述符標(biāo)記該會話,這樣,就可以對系統(tǒng)調(diào)用按會話進(jìn)行識別,并根據(jù)系統(tǒng)調(diào)用所涉及的連接文件描述符調(diào)整當(dāng)前會話,對當(dāng)前會話的會話權(quán)限進(jìn)行識別,根據(jù)當(dāng)前會話的會話權(quán)限控制當(dāng)前系統(tǒng)調(diào)用,可以實(shí)現(xiàn)當(dāng)進(jìn)程執(zhí)行系統(tǒng)調(diào)用時不局限于進(jìn)程用戶和文件的屬性而進(jìn)行權(quán)限的控制。
附圖說明
為了更清楚地說明本發(fā)明實(shí)施例或現(xiàn)有技術(shù)中的技術(shù)方案,下面將對實(shí)施例或現(xiàn)有技術(shù)描述中所需要使用的附圖作簡單地介紹,顯而易見地,下面描述中的附圖是本發(fā)明的一些實(shí)施例,對于本領(lǐng)域普通技術(shù)人員來講,在不付出創(chuàng)造性勞動的前提下,還可以根據(jù)這些附圖獲得其他的附圖。
圖1為本發(fā)明一種具體實(shí)施方式所提供的基于文件描述符和會話的權(quán)限控制方法流程圖;
圖2為本發(fā)明一種實(shí)施方式所提供的會話識別方法流程圖;
圖3為本發(fā)明一種具體實(shí)施方式所提供的基于文件描述符和會話的權(quán)限控制系統(tǒng)結(jié)構(gòu)示意圖。
具體實(shí)施方式
本發(fā)明的核心是提供一種基于文件描述符和會話的權(quán)限控制方法和系統(tǒng),可以實(shí)現(xiàn)當(dāng)進(jìn)程執(zhí)行系統(tǒng)調(diào)用時不局限于進(jìn)程用戶和文件的屬性而進(jìn)行權(quán)限的控制。
為了使本發(fā)明的上述目的、特征和優(yōu)點(diǎn)能夠更為明顯易懂,下面結(jié)合附圖對本發(fā)明的具體實(shí)施方式做詳細(xì)的說明。
在以下描述中闡述了具體細(xì)節(jié)以便于充分理解本發(fā)明。但是本發(fā)明能夠以多種不同于在此描述的其它方式來實(shí)施,本領(lǐng)域技術(shù)人員可以在不違背本發(fā)明內(nèi)涵的情況下做類似推廣。因此本發(fā)明不受下面公開的具體實(shí)施方式的限制。
請參考圖1,圖1為本發(fā)明一種具體實(shí)施方式所提供的基于文件描述符和會話的權(quán)限控制方法流程圖。
本發(fā)明的一種具體實(shí)施方式提供了一種基于文件描述符和會話的權(quán)限控制方法,包括:
s11:預(yù)先在接收系統(tǒng)調(diào)用的新連接信息時,建立與該新連接信息關(guān)聯(lián)的連接文件描述符和會話,并通過該連接文件描述符對該會話進(jìn)行標(biāo)記。
在本發(fā)明的一種實(shí)施方式中,預(yù)先在接收系統(tǒng)調(diào)用的新連接信息時,建立與該新連接信息關(guān)聯(lián)的連接文件描述符和會話,并通過該連接文件描述符對該會話進(jìn)行標(biāo)記,包括:預(yù)先在接收系統(tǒng)調(diào)用的新連接信息時,建立與該新連接信息關(guān)聯(lián)的連接文件描述符;建立與新連接信息關(guān)聯(lián)的會話;將各連接文件描述符一一映射到一個會話或者空會話中。
在本實(shí)施方式中,連接文件描述符指的是進(jìn)程或操作系統(tǒng)中標(biāo)示打開的文件或連接的一個數(shù)字標(biāo)識,或者稱為文件句柄。會話指的是在服務(wù)進(jìn)程接收新連接后,系統(tǒng)為其分配一個會話,該會話與連接進(jìn)行關(guān)聯(lián),所謂的連接指的是系統(tǒng)中的應(yīng)用程序和數(shù)據(jù)庫連接。將每個連接文件描述符都映射到一個會話或者空會話中,以表示當(dāng)前會話與會話關(guān)聯(lián)。
s12:在應(yīng)用程序的進(jìn)程進(jìn)行系統(tǒng)調(diào)用時,根據(jù)相應(yīng)的連接文件描述符對系統(tǒng)調(diào)用按會話進(jìn)行識別。
在應(yīng)用程序的進(jìn)程進(jìn)行系統(tǒng)調(diào)用時,根據(jù)相應(yīng)的連接文件描述符對系統(tǒng)調(diào)用按會話進(jìn)行識別,包括:在應(yīng)用程序的進(jìn)程進(jìn)行系統(tǒng)調(diào)用時,判斷當(dāng)前系統(tǒng)調(diào)用是否包含預(yù)設(shè)的連接文件描述符;若是,則更新系統(tǒng)調(diào)用所屬的當(dāng)前會話為該預(yù)設(shè)的連接文件描述符所映射的會話;執(zhí)行當(dāng)前系統(tǒng)調(diào)用;判斷當(dāng)前系統(tǒng)調(diào)用是否產(chǎn)生了異于預(yù)設(shè)的連接文件描述符的新連接文件描述符;若是,則將該新連接文件描述符映射到當(dāng)前會話。
需要說明的是,服務(wù)器根據(jù)服務(wù)進(jìn)程調(diào)用數(shù)據(jù)庫中的數(shù)據(jù),所謂的服務(wù)進(jìn)程指的是服務(wù)器的應(yīng)用系統(tǒng)中對外部監(jiān)聽端口接收新連接,并提供服務(wù)的進(jìn)程,如apache(www服務(wù)器),vsftpd(ftp服務(wù)器)。在服務(wù)進(jìn)程接收新連接后,系統(tǒng)會為其分配一個會話,該會話與連接進(jìn)行關(guān)聯(lián),以便通過會話的權(quán)限來對系統(tǒng)調(diào)用進(jìn)行控制。
在本實(shí)施方式中,以預(yù)設(shè)的連接文件描述符為描述符參數(shù)fd為例進(jìn)行說明。如圖2所示,圖2為本發(fā)明一種實(shí)施方式所提供的會話識別方法流程圖。在應(yīng)用程序的進(jìn)程進(jìn)行系統(tǒng)調(diào)用時,根據(jù)相應(yīng)的連接文件描述符對系統(tǒng)調(diào)用按會話進(jìn)行識別,包括:
s21:在進(jìn)行系統(tǒng)調(diào)用時,判斷系統(tǒng)當(dāng)前系統(tǒng)調(diào)用中是否包含文件描述符參數(shù)fd。
s22:若是,則更新當(dāng)前會話為fd映射的會話。
s23:執(zhí)行當(dāng)前系統(tǒng)調(diào)用。
s24:判斷系統(tǒng)調(diào)用是否產(chǎn)生了新的文件描述符參數(shù)fd-new。
s25:若是,則將fd-new映射到當(dāng)前會話。
之后,該系統(tǒng)調(diào)用結(jié)束。
在本實(shí)施方式中,根據(jù)連接文件描述符識進(jìn)行會話識別,會話識別不斷根據(jù)系統(tǒng)調(diào)用涉及的連接文件描述符調(diào)整當(dāng)前會話,并將新的文件描述符映射到當(dāng)前會話。當(dāng)創(chuàng)建子進(jìn)程時,子進(jìn)程繼承當(dāng)前會話。
s13:對系統(tǒng)調(diào)用的所屬當(dāng)前會話的會話權(quán)限進(jìn)行識別。
在本發(fā)明的一種實(shí)施方式中,對系統(tǒng)調(diào)用的所屬當(dāng)前會話的會話權(quán)限進(jìn)行識別,包括:獲取系統(tǒng)調(diào)用的當(dāng)前會話的發(fā)起終端的ip地址;根據(jù)ip地址和預(yù)設(shè)的角色配置信息,識別當(dāng)前會話的所屬角色;根據(jù)當(dāng)前會話的所屬角色,調(diào)取該角色對應(yīng)的會話權(quán)限配置。
在本實(shí)施方式中,角色即指用戶身份,在系統(tǒng)中一個身份擁有一組操作權(quán)限配置。要想知道客戶端(即會話的發(fā)起終端)的權(quán)限,在本實(shí)施方式中就通過客戶端建立的會話所屬的角色的身份信息,即識別發(fā)起該該會話的客戶端的身份,只有了解了該客戶端的身份,服務(wù)器才能賦予該客戶端對應(yīng)的權(quán)限來進(jìn)行系統(tǒng)調(diào)用。通過讀取會話的發(fā)起終端的ip地址來識別發(fā)起會話的客戶端的身份。如當(dāng)有兩個客戶端訪問服務(wù)器時,客戶端a的ip地址為192.168.1.1,其身份為管理員,預(yù)設(shè)的權(quán)限為“所有”;客戶端b的ip地址為123.45.67.89.其身份為普通用戶,預(yù)設(shè)的權(quán)限為“部分”。則當(dāng)某一客戶端訪問服務(wù)器并發(fā)起會話時,服務(wù)器讀取發(fā)起會話的客戶端的ip地址,根據(jù)其ip地址即可獲取該客戶端的身份信息,如讀取的是客戶端a的ip地址,則判定此時的客戶端為管理員,相應(yīng)地,即可服務(wù)該客戶端對應(yīng)的權(quán)限來控制當(dāng)前的系統(tǒng)調(diào)用。由于各客戶端均具有一個唯一的、不同于其他客戶端的ip地址,因此,通過識別發(fā)起會話的客戶端的ip地址,即可識別客戶端的身份,并調(diào)取對應(yīng)的權(quán)限來控制系統(tǒng)調(diào)用。
在本發(fā)明的另一種實(shí)施方式中,對系統(tǒng)調(diào)用的所屬當(dāng)前會話的會話權(quán)限進(jìn)行識別,包括:判斷當(dāng)前會話的會話信息中是否包含預(yù)設(shè)的會話角色認(rèn)證信息;若是,則獲取所述會話角色認(rèn)證信息,并根據(jù)所述會話角色認(rèn)證信息識別分析出該會話信息的發(fā)起終端的角色,獲取該角色的會話權(quán)限配置。
在本實(shí)施方式中,使用二次認(rèn)證來進(jìn)行角色的識別。在二次認(rèn)證中可以引入中間代理,使得所有到達(dá)服務(wù)器的數(shù)據(jù)先經(jīng)過中間代理,中間代理對連接進(jìn)行認(rèn)證后再傳遞給服務(wù)器進(jìn)行請求。
具體地,客戶端向中間代理發(fā)送請求內(nèi)容,中間代理判斷會話信息中是否包含預(yù)設(shè)的會話角色認(rèn)證信息,若沒有,則返回需要認(rèn)證的提示信息,客戶端再將帶認(rèn)證信息的請求內(nèi)容發(fā)送至中間代理,在中間代理通過認(rèn)證后,再將請求內(nèi)容和相關(guān)的角色信息發(fā)送至服務(wù)器,服務(wù)器將答復(fù)內(nèi)容返回至客戶端。在這個過程中,由中間代理來識別發(fā)起會話的客戶端的身份。
在本發(fā)明的另一種實(shí)施方式中,對系統(tǒng)調(diào)用的所屬當(dāng)前會話的會話權(quán)限進(jìn)行識別,包括:預(yù)先建立用于預(yù)設(shè)角色通訊的虛擬通訊網(wǎng)絡(luò)隧道;對當(dāng)前會話的來源隧道進(jìn)行識別,以判斷當(dāng)前會話所屬的角色;根據(jù)當(dāng)前會話所屬的角色調(diào)取對應(yīng)的會話權(quán)限配置。
在本實(shí)施方式中,采用隧道方式進(jìn)行角色識別。在該過程中,客戶端通過與服務(wù)器建立虛擬專用通訊網(wǎng)絡(luò)隧道,通過區(qū)分來源隧道來進(jìn)行角色的識別。如當(dāng)客戶端角色分為管理員和普通用戶時,管理員客戶端和服務(wù)器進(jìn)行通訊的隧道為虛擬專用通訊網(wǎng)絡(luò)隧道,而普通用戶客戶端和服務(wù)器進(jìn)行通訊的隧道為普通網(wǎng)絡(luò)訪問,這樣,當(dāng)客戶端和服務(wù)器建立會話時,只需識別會話的來源隧道即可判定會話所屬的角色的身份信息。
s14:根據(jù)當(dāng)前會話對應(yīng)的會話權(quán)限控制當(dāng)前系統(tǒng)調(diào)用。
進(jìn)一步地,還可以根據(jù)需要在根據(jù)會話權(quán)限控制當(dāng)前系統(tǒng)調(diào)用的基礎(chǔ)上,判斷系統(tǒng)調(diào)用是否符合系統(tǒng)的系統(tǒng)自身權(quán)限。在本文中,會話可以指示該會話屬于哪個角色,即該會話所屬的客戶端或者用戶,而不同的角色根據(jù)在系統(tǒng)中的身份擁有一組操作權(quán)限配置。不同的會話對應(yīng)各自的會話權(quán)限。當(dāng)用戶想要進(jìn)行系統(tǒng)調(diào)用時,就需要進(jìn)行會話權(quán)限的檢查,通過會話權(quán)限的檢查來判斷該會話對應(yīng)的角色的數(shù)據(jù)訪問權(quán)限,而系統(tǒng)自身訪問權(quán)限的檢查用來判斷系統(tǒng)可以提供給該角色的數(shù)據(jù)訪問權(quán)限,只有當(dāng)系統(tǒng)調(diào)用的數(shù)據(jù)能通過會話權(quán)限的檢查時才能夠執(zhí)行當(dāng)前系統(tǒng)調(diào)用。
在本實(shí)施方式中,以一個具體的實(shí)施例為例進(jìn)行說明。
設(shè)有一http服務(wù)器s,ip地址200.200.0.1,應(yīng)用了該基于文件描述符和會話的權(quán)限控制方法,指定了源ip地址192.168.0.1擁有管理員角色(對所有文件有可寫權(quán)限),其它來源地址為普通用戶角色(對所有文件只讀)
假設(shè)用戶從ip地址為192.168.0.2的一個終端發(fā)送http請求:post/changepasswd.php?user=test&pass=test,其目的是更改用戶test的密碼,程序的邏輯將打開磁盤上的文件并進(jìn)行修改。
其整個過程如下:
1.用戶從192.168.0.2發(fā)起了到200.200.0.1連接請求;
2.服務(wù)器接受了該連接請求,此時一個文件描述符被創(chuàng)建,相應(yīng)的會話信息也被創(chuàng)建,且該會話信息關(guān)聯(lián)了這個文件描述符;
3.會話根據(jù)用戶發(fā)起終端的ip地址查詢得到,這個用戶角色為普通用戶;
4.用戶發(fā)送post/changepasswd.php?user=test&pass=test,服務(wù)器程序開始執(zhí)行修改密碼邏輯;
5.服務(wù)器程序打開密碼文件,得到該密碼文件的文件描述符,依據(jù)本發(fā)明的方法,得知這個描述符同屬于用戶192.168.0.2的會話(步驟2中創(chuàng)建);
6.服務(wù)器程序?qū)γ艽a文件進(jìn)行寫入,這時檢查會話權(quán)限,得知該用戶不允許文件寫入;
7.返回服務(wù)器程序?qū)懭胧。瑱?quán)限不足的信息;
8.用戶修改密碼的嘗試失敗;
9.上面服務(wù)器程序以及用戶嘗試寫入密碼文件的過程被記錄至數(shù)據(jù)庫以用于后續(xù)的審計。
進(jìn)一步,管理員從192.168.0.1上登錄,則在步驟3中,用戶角色識別為管理員,則后續(xù)的操作都會被放行。
需要說明的是,當(dāng)用戶修改密碼失敗之后,若還想提權(quán)再執(zhí)行修改密碼操作的話,可以通過以下方式進(jìn)行:
a1:選擇遂道或二次認(rèn)證,這時發(fā)起的請求里帶有隧道或認(rèn)證信息,在步驟3中就會判斷為其它角色,其它角色如果配置為允許修改這個密碼文件,便能修改成功。
還需要說明的是,在提權(quán)之后主要是根據(jù)隧道或認(rèn)證信息查看權(quán)限配置,提權(quán)后可以重新選擇角色,該角色也可以是管理員。
其中,會話權(quán)限即表示了該會話對應(yīng)的角色的訪問權(quán)限,從而在判斷系統(tǒng)調(diào)用是否符合權(quán)限時,無需再去判斷系統(tǒng)調(diào)用的文件屬性和進(jìn)行運(yùn)行的所屬用戶的屬性,極大地簡化了權(quán)限的判斷過程。對于應(yīng)用程序的進(jìn)程對系統(tǒng)調(diào)用引入了會話權(quán)限的檢查來對于服務(wù)器中進(jìn)行系統(tǒng)調(diào)用時的權(quán)限進(jìn)行檢查校驗(yàn),以控制應(yīng)用程序的權(quán)限,實(shí)現(xiàn)了當(dāng)進(jìn)程執(zhí)行系統(tǒng)調(diào)用時不局限于進(jìn)程用戶和文件的屬性而進(jìn)行權(quán)限的控制。
需要說明的是,在本文中的整個通訊服務(wù)過程中,系統(tǒng)調(diào)用主要包括應(yīng)用程序?qū)Υ疟P文件系統(tǒng)進(jìn)行文件讀寫系統(tǒng)調(diào)用,和應(yīng)用程序?qū)?shù)據(jù)庫程序的數(shù)據(jù)庫連接讀寫的系統(tǒng)調(diào)用。在這兩種情況下進(jìn)行系統(tǒng)調(diào)用時進(jìn)行權(quán)限的檢查判斷。
還需要說明的是,系統(tǒng)調(diào)用還包括數(shù)據(jù)庫程序?qū)?shù)據(jù)庫數(shù)據(jù)進(jìn)行數(shù)據(jù)讀寫的系統(tǒng)調(diào)用,由于在技術(shù)上權(quán)限檢查的意義不大,因此,在本實(shí)施方式中,可以不對此處的系統(tǒng)調(diào)用進(jìn)行權(quán)限檢查判斷。
請參考圖3,圖3為本發(fā)明一種具體實(shí)施方式所提供的基于文件描述符和會話的權(quán)限控制系統(tǒng)結(jié)構(gòu)示意圖。
相應(yīng)地,本發(fā)明一種實(shí)施方式還提供了一種基于文件描述符和會話的權(quán)限控制系統(tǒng),包括:預(yù)處理模塊31,用于預(yù)先在接收系統(tǒng)調(diào)用的新連接信息時,建立與該新連接信息關(guān)聯(lián)的連接文件描述符和會話,并通過該連接文件描述符對該會話進(jìn)行標(biāo)記;識別模塊32,用于在應(yīng)用程序的進(jìn)程進(jìn)行系統(tǒng)調(diào)用時,根據(jù)相應(yīng)的連接文件描述符對系統(tǒng)調(diào)用按會話進(jìn)行識別;權(quán)限識別模塊33,用于對系統(tǒng)調(diào)用的所屬當(dāng)前會話的會話權(quán)限進(jìn)行識別;系統(tǒng)調(diào)用模塊34,用于根據(jù)當(dāng)前會話對應(yīng)的會話權(quán)限控制當(dāng)前系統(tǒng)調(diào)用。
進(jìn)一步地,預(yù)處理模塊包括:描述符構(gòu)建單元,用于預(yù)先在接收系統(tǒng)調(diào)用的新連接信息時,建立與該新連接信息關(guān)聯(lián)的連接文件描述符;會話構(gòu)建單元,用于建立與新連接信息關(guān)聯(lián)的會話;第一映射單元,用于將各連接文件描述符一一映射到一個會話或者空會話中。
識別模塊,包括:第一判斷單元,用于在應(yīng)用程序的進(jìn)程進(jìn)行系統(tǒng)調(diào)用時,判斷當(dāng)前系統(tǒng)調(diào)用是否包含預(yù)設(shè)的連接文件描述符;會話更新單元,用于在判定當(dāng)前系統(tǒng)調(diào)用包含預(yù)設(shè)的連接文件描述符時,更新系統(tǒng)調(diào)用所屬的當(dāng)前會話為該預(yù)設(shè)的連接文件描述符所映射的會話;執(zhí)行單元,用于執(zhí)行當(dāng)前系統(tǒng)調(diào)用;第二判斷單元,用于判斷當(dāng)前系統(tǒng)調(diào)用是否產(chǎn)生了異于預(yù)設(shè)的連接文件描述符的新連接文件描述符;第二映射單元,則將該新連接文件描述符映射到當(dāng)前會話。
在本發(fā)明的一種實(shí)施方式中,權(quán)限識別模塊包括:第一獲取單元,用于獲取系統(tǒng)調(diào)用的當(dāng)前會話的發(fā)起終端的ip地址;角色識別單元,用于根據(jù)ip地址和預(yù)設(shè)的角色配置信息,識別當(dāng)前會話的所屬角色;第一權(quán)限調(diào)取單元,用于根據(jù)當(dāng)前會話的所屬角色,調(diào)取該角色對應(yīng)的會話權(quán)限配置。
在本實(shí)施方式中,通過讀取會話的發(fā)起終端的ip地址來識別發(fā)起會話的客戶端的身份。如當(dāng)有兩個客戶端訪問服務(wù)器時,客戶端a的ip地址為192.168.1.1,其身份為管理員,預(yù)設(shè)的權(quán)限為“所有”;客戶端b的ip地址為123.45.67.89.其身份為普通用戶,預(yù)設(shè)的權(quán)限為“部分”。則當(dāng)某一客戶端訪問服務(wù)器并發(fā)起會話時,服務(wù)器讀取發(fā)起會話的客戶端的ip地址,根據(jù)其ip地址即可獲取該客戶端的身份信息,如讀取的是客戶端a的ip地址,則判定此時的客戶端為管理員,相應(yīng)地,即可服務(wù)該客戶端對應(yīng)的權(quán)限來控制當(dāng)前的系統(tǒng)調(diào)用。由于各客戶端均具有一個唯一的、不同于其他客戶端的ip地址,因此,通過識別發(fā)起會話的客戶端的ip地址,即可識別客戶端的身份,并調(diào)取對應(yīng)的權(quán)限來控制系統(tǒng)調(diào)用。
在本發(fā)明的另一種實(shí)施方式中,權(quán)限識別模塊包括:第三判斷單元,用于判斷當(dāng)前會話的會話信息中是否包含預(yù)設(shè)的會話角色認(rèn)證信息;第二獲取單元,用于在第三判斷單元判定當(dāng)前會話的會話信息中包含預(yù)設(shè)的會話角色認(rèn)證信息時,獲取所述會話角色認(rèn)證信息,并根據(jù)所述會話角色認(rèn)證信息識別分析出該會話信息的發(fā)起終端的角色,獲取該角色的會話權(quán)限配置。
在本實(shí)施方式中,使用二次認(rèn)證來進(jìn)行角色的識別。在二次認(rèn)證中可以引入中間代理,中間代理即上述的會話權(quán)限識別模塊,使得所有到達(dá)服務(wù)器的數(shù)據(jù)先經(jīng)過中間代理,中間代理對連接進(jìn)行認(rèn)證后再傳遞給服務(wù)器進(jìn)行請求。
具體地,客戶端向中間代理發(fā)送請求內(nèi)容,中間代理判斷會話信息中是否包含預(yù)設(shè)的會話角色認(rèn)證信息,若沒有,則返回需要認(rèn)證的提示信息,客戶端再將帶認(rèn)證信息的請求內(nèi)容發(fā)送至中間代理,在中間代理通過認(rèn)證后,再將請求內(nèi)容和相關(guān)的角色信息發(fā)送至服務(wù)器,服務(wù)器將答復(fù)內(nèi)容返回至客戶端。在這個過程中,由中間代理來識別發(fā)起會話的客戶端的身份。
在本發(fā)明的另一種實(shí)施方式中,權(quán)限識別模塊包括:通訊隧道建立單元,用于預(yù)先建立用于預(yù)設(shè)角色通訊的虛擬通訊網(wǎng)絡(luò)隧道;來源隧道識別單元,用于對當(dāng)前會話的來源隧道進(jìn)行識別,以判斷當(dāng)前會話所屬的角色;第二權(quán)限調(diào)取單元,用于根據(jù)當(dāng)前會話所屬的角色調(diào)取對應(yīng)的會話權(quán)限配置。
在本實(shí)施方式中,采用隧道方式進(jìn)行角色識別。在該過程中,客戶端通過與服務(wù)器建立虛擬專用通訊網(wǎng)絡(luò)隧道,通過區(qū)分來源隧道來進(jìn)行角色的識別。如當(dāng)客戶端角色分為管理員和普通用戶時,管理員客戶端和服務(wù)器進(jìn)行通訊的隧道為虛擬專用通訊網(wǎng)絡(luò)隧道,而普通用戶客戶端和服務(wù)器進(jìn)行通訊的隧道為普通網(wǎng)絡(luò)訪問,這樣,當(dāng)客戶端和服務(wù)器建立會話時,只需識別會話的來源隧道即可判定會話所屬的角色的身份信息。
在本實(shí)施方式中,在服務(wù)進(jìn)程接收到新連接后,即接收到新的任務(wù)時,創(chuàng)建與該新連接關(guān)聯(lián)的連接文件描述符和會話,并通過該連接文件描述符標(biāo)記該會話,這樣,就可以對系統(tǒng)調(diào)用按會話進(jìn)行識別,根據(jù)系統(tǒng)調(diào)用所涉及的連接文件描述符調(diào)整當(dāng)前會話,以進(jìn)行會話識別,根據(jù)識別的當(dāng)前會話的會話權(quán)限控制當(dāng)前系統(tǒng)調(diào)用。
在本文中,會話可以指示該會話屬于哪個角色,即該會話所屬的客戶端或者用戶,而不同的角色根據(jù)在系統(tǒng)中的身份擁有一組操作權(quán)限配置。不同的會話對應(yīng)各自的會話權(quán)限。當(dāng)用戶想要進(jìn)行系統(tǒng)調(diào)用時,就需要進(jìn)行會話權(quán)限的檢查,通過會話權(quán)限的檢查來判斷該會話對應(yīng)的角色的數(shù)據(jù)訪問權(quán)限,而系統(tǒng)自身訪問權(quán)限的檢查用來判斷系統(tǒng)可以提供給該角色的數(shù)據(jù)訪問權(quán)限,只有當(dāng)系統(tǒng)調(diào)用的數(shù)據(jù)能通過會話權(quán)限的檢查時才能夠執(zhí)行當(dāng)前系統(tǒng)調(diào)用。
其中,會話權(quán)限即表示了該會話對應(yīng)的角色的訪問權(quán)限,從而在判斷系統(tǒng)調(diào)用是否符合權(quán)限時,無需再去判斷系統(tǒng)調(diào)用的文件屬性和進(jìn)行運(yùn)行的所屬用戶的屬性,極大地簡化了權(quán)限的判斷過程。對于應(yīng)用程序的進(jìn)程對系統(tǒng)調(diào)用引入了會話權(quán)限的檢查來對于服務(wù)器中進(jìn)行系統(tǒng)調(diào)用時的權(quán)限進(jìn)行檢查校驗(yàn),以控制應(yīng)用程序的權(quán)限,實(shí)現(xiàn)了當(dāng)進(jìn)程執(zhí)行系統(tǒng)調(diào)用時不局限于進(jìn)程用戶和文件的屬性而進(jìn)行權(quán)限的控制。
綜上所述,本發(fā)明所提供的基于文件描述符和會話的權(quán)限控制方法和系統(tǒng),在服務(wù)進(jìn)程接收到新連接后,即接收到新的任務(wù)時,創(chuàng)建與該新連接關(guān)聯(lián)的連接文件描述符和會話,并通過該連接文件描述符標(biāo)記該會話,這樣,就可以對系統(tǒng)調(diào)用按會話進(jìn)行識別,根據(jù)系統(tǒng)調(diào)用所涉及的連接文件描述符調(diào)整當(dāng)前會話,以進(jìn)行會話識別,根據(jù)識別的當(dāng)前會話的會話權(quán)限控制當(dāng)前系統(tǒng)調(diào)用。會話權(quán)限即表示了該會話對應(yīng)的角色的訪問權(quán)限,從而在判斷系統(tǒng)調(diào)用是否符合權(quán)限時,無需再去判斷系統(tǒng)調(diào)用的文件屬性和進(jìn)行運(yùn)行的所屬用戶的屬性,極大地簡化了權(quán)限的判斷過程。對于應(yīng)用程序的進(jìn)程對系統(tǒng)調(diào)用引入了會話權(quán)限的檢查來對于服務(wù)器中進(jìn)行系統(tǒng)調(diào)用時的權(quán)限進(jìn)行檢查校驗(yàn),以控制應(yīng)用程序的權(quán)限,實(shí)現(xiàn)了當(dāng)進(jìn)程執(zhí)行系統(tǒng)調(diào)用時不局限于進(jìn)程用戶和文件的屬性而進(jìn)行權(quán)限的控制。
以上對本發(fā)明所提供一種基于文件描述符和會話的權(quán)限控制方法和系統(tǒng)進(jìn)行了詳細(xì)介紹。本文中應(yīng)用了具體個例對本發(fā)明的原理及實(shí)施方式進(jìn)行了闡述,以上實(shí)施例的說明只是用于幫助理解本發(fā)明及其核心思想。應(yīng)當(dāng)指出,對于本技術(shù)領(lǐng)域的普通技術(shù)人員來說,在不脫離本發(fā)明原理的前提下,還可以對本發(fā)明進(jìn)行若干改進(jìn)和修飾,這些改進(jìn)和修飾也落入本發(fā)明權(quán)利要求的保護(hù)范圍內(nèi)。