国产精品1024永久观看,大尺度欧美暖暖视频在线观看,亚洲宅男精品一区在线观看,欧美日韩一区二区三区视频,2021中文字幕在线观看

  • <option id="fbvk0"></option>
    1. <rt id="fbvk0"><tr id="fbvk0"></tr></rt>
      <center id="fbvk0"><optgroup id="fbvk0"></optgroup></center>
      <center id="fbvk0"></center>

      <li id="fbvk0"><abbr id="fbvk0"><dl id="fbvk0"></dl></abbr></li>

      SELinux策略的編譯方法及系統(tǒng)的制作方法

      文檔序號(hào):10654284閱讀:502來源:國(guó)知局
      SELinux策略的編譯方法及系統(tǒng)的制作方法
      【專利摘要】本申請(qǐng)公開了一種SELinux策略的編譯方法及系統(tǒng),涉及移動(dòng)安全操作系統(tǒng)技術(shù)。該方法包括:讀取SELinux策略文件,根據(jù)預(yù)設(shè)的解析策略解析所述SELinux策略文件,獲得主體、客體及主體和客體之間的關(guān)系的數(shù)據(jù);將所述主體、客體及主體和客體之間的關(guān)系的數(shù)據(jù)導(dǎo)入一策略存儲(chǔ)系統(tǒng)中;調(diào)用SELinux策略的編譯工具,將從所述策略存儲(chǔ)系統(tǒng)中提取的數(shù)據(jù)編譯成SELinux策略二進(jìn)制包。該方法通過解析SELinux策略文件并保存,可以極大地提高SELinux策略的編譯速度。
      【專利說明】
      SEL i nux策略的編譯方法及系統(tǒng)
      技術(shù)領(lǐng)域
      [〇〇〇1]本發(fā)明涉及移動(dòng)安全操作系統(tǒng)技術(shù)領(lǐng)域,具體而言,涉及一種SELinux策略的編譯方法及系統(tǒng)?!颈尘凹夹g(shù)】
      [0002]雖然Linux比起Windows來說,它的可靠性和穩(wěn)定性要好得多,但是它也和其它的 UNIX—樣,有以下這些不足之處:存在特權(quán)用戶root,任何人只要得到root的權(quán)限,對(duì)于整個(gè)系統(tǒng)都可以為所欲為;對(duì)于文件的訪問權(quán)的劃分不夠細(xì),在Linux系統(tǒng)里,對(duì)于文件的操作,只有“所有者”,“所有組”,“其他”這3類的劃分。對(duì)于以上這些的不足,防火墻,入侵檢測(cè)系統(tǒng)都是無能為力的。在這種背景下,對(duì)于訪問權(quán)限大幅度強(qiáng)化的SELinux來說,它的優(yōu)點(diǎn)是顯著的。
      [0003]SELinux(Security-Enhanced Linux),它是NSA(The Nat1nal Security Agency,美國(guó)國(guó)家安全局)和SCC(Secure Computing Corporat1n)開發(fā)的Linux的一個(gè)擴(kuò)張MAC(Mandatory Access Control,強(qiáng)制訪問控制)安全模塊,是對(duì)于強(qiáng)制訪問控制的實(shí)現(xiàn)。在這種訪問控制體系的限制下,進(jìn)程只能訪問那些在他的任務(wù)中所需要文件。SELinux 在類型強(qiáng)制服務(wù)器中合并了多級(jí)安全性或一種可選的多類策略,并采用了基于角色的訪問控制概念。
      [0004]當(dāng)移動(dòng)設(shè)備加載SELinux后,移動(dòng)操作系統(tǒng)的安全等級(jí)將極大的提高。SELinux策略是移動(dòng)系統(tǒng)SELinux強(qiáng)制訪問控制的重要組成部分。SELinux策略包含了系統(tǒng)中所有需要配置的應(yīng)用和服務(wù)訪問的訪問控制語(yǔ)句,并需要把所有的訪問控制語(yǔ)句編譯成系統(tǒng)內(nèi)核能夠識(shí)別的策略二進(jìn)制包。
      [0005]SELinux策略大部分都是一套聲明和規(guī)則一起定義的類型強(qiáng)制(TE: Type Enforcement)策略,一個(gè)定義良好、嚴(yán)格的TE策略包括的TE規(guī)則數(shù)量巨大,因?yàn)樗鼈儽磉_(dá)了所有由內(nèi)核暴露出的允許對(duì)資源的訪問權(quán),這就意味著每個(gè)進(jìn)程對(duì)每個(gè)資源的訪問嘗試都必須至少要有一條允許的TE訪問規(guī)則。
      [0006]由于現(xiàn)有的編譯方法需要每次編譯時(shí)將所有的SELinux策略文件一一解析對(duì)應(yīng)的關(guān)系,而系統(tǒng)中SELinux策略文件對(duì)應(yīng)的策略大概包含有幾萬條策略,這將是一個(gè)很復(fù)雜和耗時(shí)間的工作。
      [0007]因此,需要一種新的SELinux策略的編譯方法及系統(tǒng)。
      [0008]在所述【背景技術(shù)】部分公開的上述信息僅用于加強(qiáng)對(duì)本公開的背景的理解,因此它可以包括不構(gòu)成對(duì)本領(lǐng)域普通技術(shù)人員已知的現(xiàn)有技術(shù)的信息。
      【發(fā)明內(nèi)容】

      [0009]本發(fā)明提供一種SELinux策略的編譯方法及系統(tǒng),能夠提高SELinux策略二進(jìn)制包的編譯效率。
      [0010]本發(fā)明的其他特性和優(yōu)點(diǎn)將通過下面的詳細(xì)描述變得顯然,或部分地通過本發(fā)明的實(shí)踐而習(xí)得。[0〇11]根據(jù)本發(fā)明的一方面,提供了一種SELinux策略的編譯方法,包括:讀取SELinux策略文件,根據(jù)預(yù)設(shè)的解析策略解析所述SELinux策略文件,獲得主體、客體及主體和客體之間的關(guān)系的數(shù)據(jù);將所述主體、客體及主體和客體之間的關(guān)系的數(shù)據(jù)導(dǎo)入一策略存儲(chǔ)系統(tǒng)中;調(diào)用SELinux策略的編譯工具,將從所述策略存儲(chǔ)系統(tǒng)中提取的數(shù)據(jù)編譯成SELinux策略二進(jìn)制包。[〇〇12]根據(jù)本發(fā)明的一實(shí)施方式,其中所述預(yù)設(shè)的解析策略為根據(jù)SELinux語(yǔ)法包含的用戶、規(guī)則、類型及各自包含的子類型自動(dòng)解析所述SELinux策略文件的策略語(yǔ)句中的字段。[0〇13]根據(jù)本發(fā)明的一實(shí)施方式,其中所述SELinux策略文件包括基礎(chǔ)策略文件和應(yīng)用策略文件。
      [0014]根據(jù)本發(fā)明的一實(shí)施方式,其中所述策略存儲(chǔ)系統(tǒng)為預(yù)先創(chuàng)建的一關(guān)系型數(shù)據(jù)庫(kù)、xml文件或文本文件。
      [0015]根據(jù)本發(fā)明的一實(shí)施方式,其中所述調(diào)用SELinux策略的編譯工具,將從所述策略存儲(chǔ)系統(tǒng)中提取的數(shù)據(jù)編譯成SELinux策略二進(jìn)制包包括:更改所述編譯工具的編譯來源為所述策略存儲(chǔ)系統(tǒng);以及提取所述策略存儲(chǔ)系統(tǒng)中存儲(chǔ)的數(shù)據(jù),并將所述數(shù)據(jù)編譯成 SELinux策略二進(jìn)制包;其中所述SELinux策略二進(jìn)制包包括分別與所述基礎(chǔ)策略文件和應(yīng)用策略文件對(duì)應(yīng)的基礎(chǔ)策略包和應(yīng)用策略包。[〇〇16]根據(jù)本發(fā)明的一實(shí)施方式,還包括:檢測(cè)所述SELinux策略文件是否發(fā)生變更;當(dāng)所述SELinux策略文件發(fā)生變更時(shí),解析出該變更的SELinux策略文件中的主體、客體及主體和客體之間的關(guān)系的數(shù)據(jù);在所述策略存儲(chǔ)系統(tǒng)中更新相應(yīng)的主體、客體及主體和客體之間的關(guān)系的數(shù)據(jù);調(diào)用所述編譯工具,將所述策略存儲(chǔ)系統(tǒng)中該更新的主體、客體及主體和客體之間的關(guān)系的數(shù)據(jù)編譯成變更后的SELinux策略二進(jìn)制包。[〇〇17]根據(jù)本發(fā)明的另一方面,提供了一種SELinux策略的編譯方法,包括:在一策略存儲(chǔ)系統(tǒng)中按照預(yù)設(shè)規(guī)則配置所述SELinux策略;調(diào)用SELinux策略的編譯工具,將從所述策略存儲(chǔ)系統(tǒng)中提取的數(shù)據(jù)編譯成SELinux策略二進(jìn)制包。[〇〇18]根據(jù)本發(fā)明的再一方面,提供了一種SELinux策略的編譯系統(tǒng),包括:解析模塊,其用于讀取SELinux策略文件,根據(jù)預(yù)設(shè)的解析策略解析所述SELinux策略文件,獲得主體、客體及主體和客體之間的關(guān)系的數(shù)據(jù);策略存儲(chǔ)系統(tǒng),其用于存儲(chǔ)所述主體、客體及主體和客體之間的關(guān)系的數(shù)據(jù);SELinux策略的編譯模塊,其用于將從所述策略存儲(chǔ)系統(tǒng)中提取的數(shù)據(jù)編譯成SELinux策略二進(jìn)制包。[〇〇19]根據(jù)本發(fā)明的一實(shí)施方式,其中所述策略存儲(chǔ)系統(tǒng)為預(yù)先創(chuàng)建的一關(guān)系型數(shù)據(jù)庫(kù)、xml文件或文本文件。
      [0020]根據(jù)本發(fā)明的一實(shí)施方式,還包括:檢測(cè)模塊,其用于檢測(cè)所述SELinux策略文件是否發(fā)生變更;其中,當(dāng)所述SELinux策略文件發(fā)生變更時(shí),調(diào)用所述解析模塊解析出該變更的SELinux策略文件中的主體、客體及主體和客體之間的關(guān)系的數(shù)據(jù),并在所述策略存儲(chǔ)系統(tǒng)中更新相應(yīng)的主體、客體及主體和客體之間的關(guān)系的數(shù)據(jù),調(diào)用所述編譯工具,將所述策略存儲(chǔ)系統(tǒng)中該更新的主體、客體及主體和客體之間的關(guān)系的數(shù)據(jù)編譯成變更后的 SELinux策略二進(jìn)制包。
      [0021]根據(jù)本發(fā)明的SELinux策略的編譯方法及系統(tǒng),通過編寫自動(dòng)化解析工具將 SELinux策略文件預(yù)先解析并存儲(chǔ),之后再將存儲(chǔ)的數(shù)據(jù)編譯為SELinux策略二進(jìn)制包,這樣可以通過一次創(chuàng)建策略存儲(chǔ)系統(tǒng)達(dá)到反復(fù)使用的效果,極大地提高了 SELinux策略的編譯速度和效率。
      [0022]另外,根據(jù)本發(fā)明的SELinux策略的編譯方法及系統(tǒng),還能夠?qū)崿F(xiàn)在策略存儲(chǔ)系統(tǒng)中配置SELinux策略,進(jìn)一步提高了SELinux策略的編譯速度和效率。
      [0023]應(yīng)當(dāng)理解的是,以上的一般描述和后文的細(xì)節(jié)描述僅是示例性的,并不能限制本發(fā)明?!靖綀D說明】
      [0024]通過參照附圖詳細(xì)描述其示例實(shí)施例,本發(fā)明的上述和其它目標(biāo)、特征及優(yōu)點(diǎn)將變得更加顯而易見。[〇〇25]圖1是根據(jù)一示例性實(shí)施方式示出的一種SELinux策略的編譯方法的流程圖。[〇〇26]圖2是根據(jù)一示例性實(shí)施方式示出的另一種SELinux策略的編譯方法的流程圖。 [〇〇27]圖3是根據(jù)一示例性實(shí)施方式示出的另一種SELinux策略的編譯方法的流程圖。 [0〇28]圖4是根據(jù)一不例性實(shí)施方式不出的一種SELinux策略的編譯系統(tǒng)的框圖?!揪唧w實(shí)施方式】
      [0029]現(xiàn)在將參考附圖更全面地描述示例實(shí)施方式。然而,示例實(shí)施方式能夠以多種形式實(shí)施,且不應(yīng)被理解為限于在此闡述的范例;相反,提供這些實(shí)施方式使得本發(fā)明將更加全面和完整,并將示例實(shí)施方式的構(gòu)思全面地傳達(dá)給本領(lǐng)域的技術(shù)人員。附圖僅為本發(fā)明的示意性圖解,并非一定是按比例繪制。圖中相同的附圖標(biāo)記表示相同或類似的部分,因而將省略對(duì)它們的重復(fù)描述。
      [0030]此外,所描述的特征、結(jié)構(gòu)或特性可以以任何合適的方式結(jié)合在一個(gè)或更多實(shí)施方式中。在下面的描述中,提供許多具體細(xì)節(jié)從而給出對(duì)本發(fā)明的實(shí)施方式的充分理解。然而,本領(lǐng)域技術(shù)人員將意識(shí)到,可以實(shí)踐本發(fā)明的技術(shù)方案而省略所述特定細(xì)節(jié)中的一個(gè)或更多,或者可以采用其它的方法、組元、裝置、步驟等。在其它情況下,不詳細(xì)示出或描述公知結(jié)構(gòu)、方法、裝置、實(shí)現(xiàn)或者操作以避免喧賓奪主而使得本發(fā)明的各方面變得模糊。 [0〇31 ] SELinux是一種基于域類型模型(domain-type)的強(qiáng)制訪問控制安全系統(tǒng),它由 NSA編寫并設(shè)計(jì)成內(nèi)核模塊包含到內(nèi)核中,相應(yīng)的某些安全相關(guān)的應(yīng)用也被打了SELinux的補(bǔ)丁,最后還有一個(gè)相應(yīng)的安全策略。SELinux提供了比傳統(tǒng)的UNIX權(quán)限更好的訪問控制。 SELinux系統(tǒng)比起通常的Linux系統(tǒng)來,安全性能要高的多,它通過對(duì)于用戶、進(jìn)程權(quán)限的最小化,即使受到攻擊,進(jìn)程或者用戶權(quán)限被奪去,也不會(huì)對(duì)整個(gè)系統(tǒng)造成重大影響。SELinux 由以下兩部分組成:l)Kernel SELinux模塊(/kernel/security/selinux) ;2)用戶態(tài)工具。 [〇〇32] SELinux定義了系統(tǒng)中每個(gè)用戶、進(jìn)程、應(yīng)用和文件的訪問和轉(zhuǎn)變的權(quán)限,然后它使用一個(gè)安全策略來控制這些實(shí)體(用戶、進(jìn)程、應(yīng)用和文件)之間的交互,安全策略指定如何嚴(yán)格或?qū)捤傻剡M(jìn)行檢查。策略可以根據(jù)需要是嚴(yán)格的或?qū)捤傻?。只有同時(shí)滿足了 “標(biāo)準(zhǔn) Linux訪問控制”和“SELinux訪問控制”時(shí),主體才能訪問客體。[〇〇33]圖1是根據(jù)一示例性實(shí)施方式示出的一種SELinux策略的編譯方法的流程圖。
      [0034]如圖1所示,在步驟SI 10,讀取SELinux策略文件,根據(jù)預(yù)設(shè)的解析策略解析所述 SELinux策略文件,獲得主體、客體及主體和客體之間的關(guān)系的數(shù)據(jù)。[〇〇35]在示例性實(shí)施例,其中所述預(yù)設(shè)的解析策略為根據(jù)SELinux語(yǔ)法包含的用戶 (USER)、規(guī)則(ROLE)、類型(Type)及各自包含的子類型自動(dòng)解析所述SELinux策略文件的策略語(yǔ)句中的字段。[〇〇36] 其中,SELinux的策略類型說明如下:
      [0037]1.USER:用戶
      [0038]l)user identity:類似Linux系統(tǒng)中的UID(User Identificat1n,用戶身份證明),提供身份識(shí)別,用來記錄身份;安全上下文(SELinux security context)的一部分; [〇〇39]在SELinux中,訪問控制屬性總是安全上下文三人組(用戶:角色:類型)形式,所有客體和主體都有一個(gè)關(guān)聯(lián)的安全上下文。需要特別指出的是,因?yàn)镾ELinux的主要訪問控制特性是類型強(qiáng)制,安全上下文中的類型標(biāo)識(shí)符決定了訪問權(quán)。
      [0040]2)三種常見的user:
      [0041]user_u:普通用戶登錄系統(tǒng)后的預(yù)設(shè);[0〇42] system_u:開機(jī)過程中系統(tǒng)進(jìn)程的預(yù)設(shè);
      [0043]root:root登錄后的預(yù)設(shè);
      [0044]3)所有預(yù)設(shè)的SELinux Users都是以“_u”結(jié)尾的,root除外。
      [0045]2.ROLE:規(guī)則
      [0046]1)文件、目錄和設(shè)備的role:通常是object_r;
      [0047]2)程序的 role:通常是 system_r;
      [0048]3)用戶的role:targeted policy為system_r;strict policy^sysadm_rnstaff_ r、user_r〇
      [0049]其中,用戶的role,類似系統(tǒng)中的GID(Group Identificat1n,群體身份,指共享資源系統(tǒng)使用者的身份),不同角色具備不同的權(quán)限;用戶可以具備多個(gè)role,但是同一時(shí)間內(nèi)只能使用一個(gè)role。使用基于RBAC(Roles Based Access Control,基于角色的訪問控制)的strict和MLS(Mult1-Level Security,多級(jí)安全)策略中,用來存儲(chǔ)角色信息。[〇〇5〇] 其中,SELinux中的多級(jí)安全,類型強(qiáng)制(Type Enforcement,TE)是SELinux引入的最重要的強(qiáng)制訪問控制機(jī)制。在某些情況下,主要是保密控制應(yīng)用程序的一個(gè)子集,多級(jí)安全強(qiáng)制訪問控制機(jī)制與類型強(qiáng)制一起使用顯得更有價(jià)值。對(duì)大多數(shù)安全應(yīng)用程序而言,包括許多非保密數(shù)據(jù)應(yīng)用程序,類型強(qiáng)制是最適合的安全增強(qiáng)的機(jī)制,盡管如此,MLS對(duì)部分應(yīng)用程序還是增強(qiáng)了安全性。[0051 ] SELinux是在標(biāo)準(zhǔn)Linux基礎(chǔ)上增加了類型強(qiáng)制,這就意味著標(biāo)準(zhǔn)Linux和SELinux 訪問控制都必須滿足先要能訪問一個(gè)客體,例如:如果對(duì)某個(gè)文件有SELinux寫入權(quán)限,但沒有該文件的w許可,那么也不能寫該文件。
      [0052]3.Type:類型
      [0053]Type用來將主體(subject,例如進(jìn)程)和客體(object,例如文件、端口)劃分為不同的組,給每個(gè)主體和系統(tǒng)中的客體定義了一個(gè)類型;為進(jìn)程運(yùn)行提供最低的權(quán)限環(huán)境;當(dāng)一個(gè)類型與執(zhí)行中的進(jìn)程相關(guān)聯(lián)時(shí),其type也稱為domain; type是SELinux security context中最重要的部位,相當(dāng)于SELinux Type Enforcement的心臟,預(yù)設(shè)值以t結(jié)尾。[0〇54]類型是構(gòu)成TE規(guī)則的最小單位,SELinux主要就是使用類型來確定什么訪問是被允許的。在使用類型前,必須使用type語(yǔ)句明確地聲明一個(gè)類型標(biāo)識(shí)符,SELinux沒有預(yù)定義類型,必須自行聲明,例如:假設(shè)想聲明一個(gè)類型(httpd_t),并打算將其作為Web服務(wù)器的域類型,而另一個(gè)類型(http_User_C〇ntent_t)準(zhǔn)備應(yīng)用于用戶數(shù)據(jù)文件,S卩Web服務(wù)器顯示內(nèi)容的文件,使用type語(yǔ)句進(jìn)行聲明,如下:
      [0055]type httpd_t;
      [0056]type http_user_content_t;[〇〇57]聲明了類型后就可以在安全上下文、TE規(guī)則和其它策略語(yǔ)句中使用它們了。一個(gè)大型的,復(fù)雜的策略可能包括上萬個(gè)代表系統(tǒng)上不同資源的類型。
      [0058]所有操作系統(tǒng)訪問控制都是以關(guān)聯(lián)的客體和主體的某種類型的訪問控制屬性為基礎(chǔ)的。在SELinux中,訪問控制屬性叫做安全上下文。所有客體(文件、進(jìn)程間通訊通道、套接字、網(wǎng)絡(luò)主機(jī)等)和主體(進(jìn)程)都有與其關(guān)聯(lián)的安全上下文,一個(gè)安全上下文由三部分組成:用戶、角色和類型標(biāo)識(shí)符。常常用下面的格式指定或顯示安全上下文:
      [0059]USER:ROLE:TYPE[LEVEL[:CATEGORY]][〇〇6〇] 其中,LEVEL和CATEGORY用于定義層次和分類,只用于MLS策略中。LEVEL代表安全等級(jí),目前已經(jīng)定義的安全等級(jí)為s〇-sl5,等級(jí)越來越高;CATEGORY代表分類,目前已經(jīng)定義的分類為c〇-cl023。[0061 ]安全上下文是一個(gè)簡(jiǎn)單的、一致的訪問控制屬性,在SELinux中,類型標(biāo)識(shí)符是安全上下文的主要組成部分,一個(gè)進(jìn)程的類型通常被稱為一個(gè)域(domain),通常,認(rèn)為域、域類型、主體類型和進(jìn)程類型都是同義的,即都是安全上下文中的“TYPE”。[〇〇62] SELinux訪問控制是基于與所有系統(tǒng)資源(包括進(jìn)程)關(guān)聯(lián)的安全上下文的,安全上下文包括三個(gè)組件:用戶、角色和類型標(biāo)識(shí)符。類型標(biāo)識(shí)符是訪問控制的主要基礎(chǔ)。
      [0063]系統(tǒng)中每個(gè)文件、目錄、網(wǎng)絡(luò)端口等都被指定一個(gè)安全上下文,policy(策略)則給出各安全上下文之間的作用規(guī)則;SELinux根據(jù)policy及security context規(guī)則來決定存取行為是否可執(zhí)行;Subject (主體),系統(tǒng)進(jìn)程,比如Aisr/sbin/httpd; Object (客體),被存取的項(xiàng)目,比如?;116、0;[代(31:(^7、1?、3〇。1^1:等。
      [0064]在示例性實(shí)施例,其中所述SELinux策略文件包括基礎(chǔ)策略文件和應(yīng)用策略文件。 通常的,將SELinux配置文件(configurat1n)或策略文件(policy)位于/etc/目錄下,是一些源代碼文件,系統(tǒng)內(nèi)核不能直接識(shí)別。
      [0065]在示例性實(shí)施例,所述主體通常指用戶,或代表用戶意圖運(yùn)行進(jìn)程或設(shè)備。主體是訪問操作的主動(dòng)發(fā)起者,它是系統(tǒng)中信息流的啟動(dòng)者,可以使信息流在實(shí)體之間流動(dòng)。
      [0066]所述客體通常是指信息的載體或從其他主體或客體接收信息的實(shí)體。主體有時(shí)也會(huì)成為訪問或受控的對(duì)象,如一個(gè)主體可以向另一個(gè)主體授權(quán),一個(gè)進(jìn)程可能控制幾個(gè)子進(jìn)程等情況,這時(shí)受控的主體或子進(jìn)程也是一種客體??腕w不受它們所依存的系統(tǒng)的限制, 可以包括記錄、數(shù)據(jù)塊、存儲(chǔ)頁(yè)、存儲(chǔ)段、文件、目錄、目錄樹、庫(kù)表、郵箱、消息、程序等,還可以包括比特位、字節(jié)、字、字段、變量、處理器、通信信道、時(shí)鐘、網(wǎng)絡(luò)結(jié)點(diǎn)等。
      [0067]所述主體和客體之間的關(guān)系包括主體對(duì)客體的訪問,例如讀,寫,可執(zhí)行,socket 訪問等。[〇〇68] 類型強(qiáng)制(TE)訪問控制,在SELinux中,所有訪問都必須明確授權(quán),SELinux默認(rèn)不允許任何訪問,不管Linux用戶/組ID是什么。這就意味著在SELinux中,沒有默認(rèn)的超級(jí)用戶了,與標(biāo)準(zhǔn)Linux中的root不一樣,通過指定主體類型(即域)和客體類型使用allow規(guī)則授予訪問權(quán)限,al low規(guī)則由四部分組成:[〇〇69] 源類型(Source type(S)),通常是嘗試訪問的進(jìn)程的域類型;[0〇7〇]目標(biāo)類型(Target type(s)),被進(jìn)程訪問的客體的類型;
      [0071]客體類別(Object class(es)),指定允許訪問的客體的類型;[〇〇72] 許可(Permiss1n(s)),象征目標(biāo)類型允許源類型訪問客體類型的訪問種類。[〇〇73]在示例性實(shí)施例,根據(jù)對(duì)SELinux的語(yǔ)法的分析,編寫了自動(dòng)化解析工具,該自動(dòng)化解析工具的具體實(shí)現(xiàn)如下:[0〇74] 首先讀取位于se 1 inux-policy目錄下的SELinux策略文件,解析策略語(yǔ)句,例如:
      [0075]allow user—t bin—t:file read;
      [0076]這里的策略語(yǔ)句的主體具有user_t標(biāo)簽,客體具有bin_t標(biāo)簽,主客體關(guān)系為 class file可讀。即為允許具有user_t#簽的主體讀取標(biāo)簽為客體的內(nèi)容。[0〇77] 然后把解析出的allow,user_t,bin_t,file read字段,寫到所述策略存儲(chǔ)系統(tǒng)中。[〇〇78]再例如,也可以是下面的形式:
      [0079]allow user_t bin_t:file{read execute getattr};
      [0080]這個(gè)例子顯示了TE allow規(guī)則的基礎(chǔ)語(yǔ)法,這個(gè)規(guī)則包含了兩個(gè)類型標(biāo)識(shí)符:源類型(或主體類型或域)user_t,目標(biāo)類型(或客體類型)bin_t。標(biāo)識(shí)符f i le是定義在策略中的客體類別名稱(在這里,表示一個(gè)普通的文件),大括號(hào)中包括的許可是文件客體類別有效許可的一個(gè)子集,這個(gè)規(guī)則解釋如下:擁有域類型uSer_t的進(jìn)程可以讀/執(zhí)行或獲取具有 b in_t類型的文件客體的屬性。[〇〇81]需要說明的是,具體的SELinux策略文件是特別復(fù)雜的,在這里只是舉例說明下。 [〇〇82]在步驟S120,將所述主體、客體及主體和客體之間的關(guān)系的數(shù)據(jù)導(dǎo)入一策略存儲(chǔ)系統(tǒng)中。[〇〇83]預(yù)先根據(jù)SELinux策略上述的各種類型創(chuàng)建關(guān)系型數(shù)據(jù)庫(kù),把自動(dòng)化解析工具解析的主體、客體及主客體之間的關(guān)系的數(shù)據(jù)導(dǎo)入該關(guān)系型數(shù)據(jù)庫(kù)。
      [0084]在示例性實(shí)施例,其中所述策略存儲(chǔ)系統(tǒng)為預(yù)先創(chuàng)建的一關(guān)系型數(shù)據(jù)庫(kù)、xml文件或文本文件。當(dāng)然,本發(fā)明不限于所例舉的這三種存儲(chǔ)形式,只要是適合存儲(chǔ)所述主體、客體及主客體之間的關(guān)系的數(shù)據(jù)的任意形式均可以用于本發(fā)明。
      [0085]在示例性實(shí)施例,所述策略存儲(chǔ)系統(tǒng)為關(guān)系型數(shù)據(jù)庫(kù),可以建立主體相關(guān)數(shù)據(jù)的一個(gè)表格,建立客體相關(guān)數(shù)據(jù)的一個(gè)表格,建立主客體之間訪問關(guān)系的一個(gè)表格,把SQL語(yǔ)句重新轉(zhuǎn)換為上述的字段,然后調(diào)用SELinux的編譯工具編譯成策略二進(jìn)制包,所以需要在自動(dòng)化解析工具中把所述關(guān)系型數(shù)據(jù)庫(kù)中的數(shù)據(jù)讀取成編譯工具可識(shí)別的。
      [0086]本發(fā)明的數(shù)據(jù)存儲(chǔ)并不限于數(shù)據(jù)庫(kù)的形式,可以使用其他文件如xml或文本文件等存儲(chǔ)。當(dāng)使用其他文件存儲(chǔ)數(shù)據(jù)時(shí),需要相應(yīng)的改變所述自動(dòng)化解析工具的讀寫文件的接口。例如,xml需要使用libxml的庫(kù),文本文件同樣可以。[〇〇87]在步驟S130,調(diào)用SELinux策略的編譯工具,將從所述策略存儲(chǔ)系統(tǒng)中提取的數(shù)據(jù)編譯成SELinux策略二進(jìn)制包。
      [0088]在示例性實(shí)施例,其中所述調(diào)用SELinux策略的編譯工具,將從所述策略存儲(chǔ)系統(tǒng)中提取的數(shù)據(jù)編譯成SELinux策略二進(jìn)制包包括:更改所述編譯工具的編譯來源為所述策略存儲(chǔ)系統(tǒng);以及提取所述策略存儲(chǔ)系統(tǒng)中存儲(chǔ)的數(shù)據(jù),并將所述數(shù)據(jù)編譯成SELinux策略二進(jìn)制包;其中所述SELinux策略二進(jìn)制包包括分別與所述基礎(chǔ)策略文件和應(yīng)用策略文件對(duì)應(yīng)的基礎(chǔ)策略包和應(yīng)用策略包。[〇〇89]例如,重新寫SELinux策略的makefile文件,把編譯來源改為所述關(guān)系型數(shù)據(jù)庫(kù); 通過編譯SELinux的編譯語(yǔ)言把從所述關(guān)系型數(shù)據(jù)庫(kù)提取的數(shù)據(jù)編譯成SELinux策略二進(jìn)制包。而現(xiàn)有的編譯來源是每次編譯都要把數(shù)量較多的所有的策略文件重新解析一遍,重新編譯速度比較慢。[0〇9〇] 本發(fā)明實(shí)施方式所公開的SELinux策略的編譯方法,通過對(duì)SELinux語(yǔ)法的分析, 通過編寫一個(gè)自動(dòng)解析SELinux策略文件的工具,解析已有的SELinux策略文件中的主體和客體及主體和客體之間的關(guān)系的各種數(shù)據(jù),根據(jù)SELinux語(yǔ)法包含的USER,R0LE,TYPE類型及各自包含的子類型建表,創(chuàng)建一個(gè)關(guān)系型數(shù)據(jù)庫(kù),然后修改SELinux本身的編譯工具,從關(guān)系型數(shù)據(jù)庫(kù)提取數(shù)據(jù),因?yàn)樵撽P(guān)系型數(shù)據(jù)庫(kù)已經(jīng)解析好了各種主體和客體及主客體之間的關(guān)系,所以只需要直接把各自的對(duì)應(yīng)關(guān)系編譯轉(zhuǎn)換成二進(jìn)制的策略包,編譯速度將變得很快。本發(fā)明的編譯方法正是基于現(xiàn)有技術(shù)中編譯SELinux策略包需要很長(zhǎng)時(shí)間,而提出一種快速編譯的SELinux策略包的方法,將大大節(jié)省編譯SELinux策略包的時(shí)間,提高編譯效率。[〇〇91]應(yīng)清楚地理解,本發(fā)明描述了如何形成和使用特定示例,但本發(fā)明的原理不限于這些示例的任何細(xì)節(jié)。相反,基于本發(fā)明公開的內(nèi)容的教導(dǎo),這些原理能夠應(yīng)用于許多其它實(shí)施方式。[〇〇92]圖2是根據(jù)一示例性實(shí)施方式示出的另一種SELinux策略的編譯方法的流程圖。
      [0093]如圖2所示,以所述策略存儲(chǔ)系統(tǒng)為關(guān)系型數(shù)據(jù)庫(kù)為例進(jìn)行說明。[〇〇94] 在步驟S210,完成SELinux策略編譯的初始化。[〇〇95]在示例性實(shí)施例,所述編譯方法主要包括兩個(gè)流程:一個(gè)是初始化SELinux關(guān)系型數(shù)據(jù)庫(kù),編譯策略二進(jìn)制包流程,此流程速度會(huì)相對(duì)慢點(diǎn);一個(gè)是SELinux初始化完成后的策略變更時(shí)候的流程,這個(gè)編譯流程將會(huì)速度很快。[〇〇96]在步驟S220,檢測(cè)所述SELinux策略文件是否發(fā)生變更(例如,增加,修改,刪除 SELinux策略文件);當(dāng)所述SELinux策略文件發(fā)生變更時(shí),進(jìn)入下一步;反之,繼續(xù)判斷所述 SELinux策略文件是否發(fā)生變更。[〇〇97] 在步驟S230,解析出該變更的SELinux策略文件中的主體、客體及主體和客體之間的關(guān)系的數(shù)據(jù)。
      [0098]這里,可以通過上述的自動(dòng)化解析工具自動(dòng)掃描或者指定的變更策略文件,解析出主體、客體及主客體之間的關(guān)系的數(shù)據(jù)。
      [0099]在步驟S240,在所述策略存儲(chǔ)系統(tǒng)中更新相應(yīng)的主體、客體及主體和客體之間的關(guān)系的數(shù)據(jù)。
      [0100]根據(jù)變更的數(shù)據(jù)更新所述關(guān)系型數(shù)據(jù)庫(kù),例如,將一個(gè)應(yīng)用原來由于SELinux策略的限制無法進(jìn)行讀寫的一個(gè)文件,現(xiàn)在變更SELinux策略開啟該應(yīng)用對(duì)該文件的讀寫訪問。
      [0101]在步驟S250,調(diào)用所述編譯工具,將所述策略存儲(chǔ)系統(tǒng)中該更新的主體、客體及主體和客體之間的關(guān)系的數(shù)據(jù)編譯成變更后的SELinux策略二進(jìn)制包。[〇1〇2] 這里,可以使用上述已經(jīng)變更編譯來源的makefile文件可以快速的編譯SELinux 的策略二進(jìn)制包。[〇1〇3]在示例性實(shí)施例,所述SELinux策略文件分為基礎(chǔ)策略文件(例如,可以命名為 files.te)和針對(duì)各個(gè)應(yīng)用的應(yīng)用策略文件(例如,可以命名為applicat1n.te),相應(yīng)的策略二進(jìn)制包也包括基礎(chǔ)策略包和針對(duì)各個(gè)應(yīng)用的應(yīng)用策略包。當(dāng)所述基礎(chǔ)策略文件發(fā)生變更時(shí),需要對(duì)整個(gè)基礎(chǔ)策略包進(jìn)行重新編譯,類似的,當(dāng)針對(duì)某個(gè)特定的應(yīng)用的應(yīng)用策略文件發(fā)生變更時(shí),需要對(duì)該應(yīng)用對(duì)應(yīng)的應(yīng)用策略包進(jìn)行重新編譯。[〇1〇4]本發(fā)明實(shí)施方式公開的SELinux策略的編譯方法,當(dāng)SELinux策略文件發(fā)生變更時(shí),通過自動(dòng)化解析工具解析變更后的SELinux策略文件,在關(guān)系型數(shù)據(jù)庫(kù)中更新相應(yīng)的主客體之間的訪問關(guān)系的數(shù)據(jù),再編譯成策略二進(jìn)制包,將極大的提高編譯速度。克服了現(xiàn)有的編譯需要每次編譯時(shí)把所有的策略文件一一解析對(duì)應(yīng)的關(guān)系,而本發(fā)明可以做到一次創(chuàng)建數(shù)據(jù)庫(kù)、反復(fù)使用的效果,以后編譯策略只需要從關(guān)系型數(shù)據(jù)庫(kù)中提取不同的策略,編譯改變后的策略,從而達(dá)到提高編譯速度的效果。
      [0105]本發(fā)明實(shí)施例中的其它內(nèi)容參考上述發(fā)明實(shí)施例,在此不再贅述。
      [0106]圖3是根據(jù)一示例性實(shí)施方式示出的另一種SELinux策略的編譯方法的流程圖。
      [0107]如圖3所示,在步驟S310,在一策略存儲(chǔ)系統(tǒng)中按照預(yù)設(shè)規(guī)則配置所述SELinux策略。
      [0108]在步驟S320,調(diào)用SELinux策略的編譯工具,將從所述策略存儲(chǔ)系統(tǒng)中提取的數(shù)據(jù)編譯成SELinux策略二進(jìn)制包。
      [0109]在示例性實(shí)施例,其中所述策略存儲(chǔ)系統(tǒng)為預(yù)先創(chuàng)建的一關(guān)系型數(shù)據(jù)庫(kù)、xml文件或文本文件。下面以所述策略存儲(chǔ)系統(tǒng)為關(guān)系型數(shù)據(jù)庫(kù)為例進(jìn)行說明。
      [0110]在示例性實(shí)施例,該方法還包括:在所述自動(dòng)化解析工具中添加一個(gè)功能,即在所述策略存儲(chǔ)系統(tǒng)中有新添加的SELinux策略時(shí),生成一個(gè)新的SELinux策略文件寫入原本的策略源碼目錄中。
      [0111]本發(fā)明實(shí)施方式公開的SELinux策略的編譯方法可以不需要SELinux策略文件,策略配置人員直接將SELinux策略配置到關(guān)系型數(shù)據(jù)庫(kù)中,然后從該關(guān)系型數(shù)據(jù)庫(kù)中讀取數(shù)據(jù)進(jìn)行編譯即可,可以進(jìn)一步提高SELinux策略編譯的速度和效率。
      [0112]本發(fā)明實(shí)施例中的其它內(nèi)容參考上述發(fā)明實(shí)施例,在此不再贅述。[〇113]本領(lǐng)域技術(shù)人員可以理解實(shí)現(xiàn)上述實(shí)施方式的全部或部分步驟被實(shí)現(xiàn)為由CPU執(zhí)行的計(jì)算機(jī)程序。在該計(jì)算機(jī)程序被CHJ執(zhí)行時(shí),執(zhí)行本發(fā)明提供的上述方法所限定的上述功能。所述的程序可以存儲(chǔ)于一種計(jì)算機(jī)可讀存儲(chǔ)介質(zhì)中,該存儲(chǔ)介質(zhì)可以是只讀存儲(chǔ)器, 磁盤或光盤等。
      [0114]此外,需要注意的是,上述附圖僅是根據(jù)本發(fā)明示例性實(shí)施方式的方法所包括的處理的示意性說明,而不是限制目的。易于理解,上述附圖所示的處理并不表明或限制這些處理的時(shí)間順序。另外,也易于理解,這些處理可以是例如在多個(gè)模塊中同步或異步執(zhí)行的。
      [0115]下述為本發(fā)明系統(tǒng)實(shí)施例,可以用于執(zhí)行本發(fā)明方法實(shí)施例。對(duì)于本發(fā)明系統(tǒng)實(shí)施例中未披露的細(xì)節(jié),請(qǐng)參照本發(fā)明方法實(shí)施例。[〇116]圖4是根據(jù)一不例性實(shí)施方式不出的一種SELinux策略的編譯系統(tǒng)的框圖。
      [0117]如圖4所示,該系統(tǒng)包括:解析模塊410,其用于讀取SELinux策略文件,根據(jù)預(yù)設(shè)的解析策略解析所述SELinux策略文件,獲得主體、客體及主體和客體之間的關(guān)系的數(shù)據(jù);策略存儲(chǔ)系統(tǒng)420,其用于存儲(chǔ)所述主體、客體及主體和客體之間的關(guān)系的數(shù)據(jù);SELinux策略的編譯模塊430,其用于將從所述策略存儲(chǔ)系統(tǒng)中提取的數(shù)據(jù)編譯成SELinux策略二進(jìn)制包。
      [0118]在示例性實(shí)施例,其中所述策略存儲(chǔ)系統(tǒng)為預(yù)先創(chuàng)建的一關(guān)系型數(shù)據(jù)庫(kù)、xml文件或文本文件。
      [0119]在示例性實(shí)施例,還包括:檢測(cè)模塊,其用于檢測(cè)所述SELinux策略文件是否發(fā)生變更。其中,當(dāng)所述SELinux策略文件發(fā)生變更時(shí),調(diào)用所述解析模塊解析出該變更的 SELinux策略文件中的主體、客體及主體和客體之間的關(guān)系的數(shù)據(jù),并在所述策略存儲(chǔ)系統(tǒng)中更新相應(yīng)的主體、客體及主體和客體之間的關(guān)系的數(shù)據(jù),調(diào)用所述編譯工具,將所述策略存儲(chǔ)系統(tǒng)中該更新的主體、客體及主體和客體之間的關(guān)系的數(shù)據(jù)編譯成變更后的SELinux 策略二進(jìn)制包。
      [0120]本發(fā)明實(shí)施例中的其它內(nèi)容參考上述發(fā)明實(shí)施例,在此不再贅述。[〇121]需要注意的是,上述附圖中所示的框圖是功能實(shí)體,不一定必須與物理或邏輯上獨(dú)立的實(shí)體相對(duì)應(yīng)??梢圆捎密浖问絹韺?shí)現(xiàn)這些功能實(shí)體,或在一個(gè)或多個(gè)硬件模塊或集成電路中實(shí)現(xiàn)這些功能實(shí)體,或在不同網(wǎng)絡(luò)和/或處理器裝置和/或微控制器裝置中實(shí)現(xiàn)這些功能實(shí)體。
      [0122]本發(fā)明提供的SELinux策略的編譯方法及系統(tǒng),通過對(duì)SELinux語(yǔ)法的分析,編寫了解析SELinux策略文件的自動(dòng)化工具解析出SELinux策略文件中的主體、客體及主客體之間的關(guān)系的數(shù)據(jù),并將該數(shù)據(jù)進(jìn)行非易失性存儲(chǔ),在編譯策略二進(jìn)制包時(shí)可以直接從存儲(chǔ)設(shè)備中提取相應(yīng)的數(shù)據(jù)進(jìn)行編譯即可,極大的提高了 SELinux策略包的編譯速度和效率。
      [0123]通過以上的實(shí)施方式的描述,本領(lǐng)域的技術(shù)人員易于理解,這里描述的示例實(shí)施方式可以通過軟件實(shí)現(xiàn),也可以通過軟件結(jié)合必要的硬件的方式來實(shí)現(xiàn)。因此,根據(jù)本發(fā)明實(shí)施方式的技術(shù)方案可以以軟件產(chǎn)品的形式體現(xiàn)出來,該軟件產(chǎn)品可以存儲(chǔ)在一個(gè)非易失性存儲(chǔ)介質(zhì)(可以是CD-ROM,U盤,移動(dòng)硬盤等)中或網(wǎng)絡(luò)上,包括若干指令以使得一臺(tái)計(jì)算設(shè)備(可以是個(gè)人計(jì)算機(jī)、服務(wù)器、移動(dòng)終端、或者網(wǎng)絡(luò)設(shè)備等)執(zhí)行根據(jù)本發(fā)明實(shí)施方式的方法。
      [0124]以上具體地示出和描述了本發(fā)明的示例性實(shí)施方式。應(yīng)可理解的是,本發(fā)明不限于這里描述的詳細(xì)結(jié)構(gòu)、設(shè)置方式或?qū)崿F(xiàn)方法;相反,本發(fā)明意圖涵蓋包含在所附權(quán)利要求的精神和范圍內(nèi)的各種修改和等效設(shè)置。
      【主權(quán)項(xiàng)】
      1.一種SELinux策略的編譯方法,其特征在于,包括:讀取SELinux策略文件,根據(jù)預(yù)設(shè)的解析策略解析所述SELinux策略文件,獲得主體、客 體及主體和客體之間的關(guān)系的數(shù)據(jù);將所述主體、客體及主體和客體之間的關(guān)系的數(shù)據(jù)導(dǎo)入一策略存儲(chǔ)系統(tǒng)中;調(diào)用SELinux策略的編譯工具,將從所述策略存儲(chǔ)系統(tǒng)中提取的數(shù)據(jù)編譯成SELinux策略二進(jìn)制包。2.根據(jù)權(quán)利要求1所述的方法,其特征在于,其中所述預(yù)設(shè)的解析策略為根據(jù)SELinux 語(yǔ)法包含的用戶、規(guī)則、類型及各自包含的子類型自動(dòng)解析所述SELinux策略文件的策略語(yǔ) 句中的字段。3.根據(jù)權(quán)利要求1所述的方法,其特征在于,其中所述SELinux策略文件包括基礎(chǔ)策略 文件和應(yīng)用策略文件。4.根據(jù)權(quán)利要求1所述的方法,其特征在于,其中所述策略存儲(chǔ)系統(tǒng)為預(yù)先創(chuàng)建的一關(guān) 系型數(shù)據(jù)庫(kù)、xml文件或文本文件。5.根據(jù)權(quán)利要求3所述的方法,其特征在于,其中所述調(diào)用SELinux策略的編譯工具,將 從所述策略存儲(chǔ)系統(tǒng)中提取的數(shù)據(jù)編譯成SELinux策略二進(jìn)制包包括:更改所述編譯工具的編譯來源為所述策略存儲(chǔ)系統(tǒng);以及提取所述策略存儲(chǔ)系統(tǒng)中存儲(chǔ)的數(shù)據(jù),并將所述數(shù)據(jù)編譯成SELinux策略二進(jìn)制包;其中所述SELinux策略二進(jìn)制包包括分別與所述基礎(chǔ)策略文件和應(yīng)用策略文件對(duì)應(yīng)的 基礎(chǔ)策略包和應(yīng)用策略包。6.根據(jù)權(quán)利要求1所述的方法,其特征在于,還包括:檢測(cè)所述SELinux策略文件是否發(fā)生變更;當(dāng)所述SELinux策略文件發(fā)生變更時(shí),解析出該變更的SELinux策略文件中的主體、客 體及主體和客體之間的關(guān)系的數(shù)據(jù);在所述策略存儲(chǔ)系統(tǒng)中更新相應(yīng)的主體、客體及主體和客體之間的關(guān)系的數(shù)據(jù);調(diào)用所述編譯工具,將所述策略存儲(chǔ)系統(tǒng)中該更新的主體、客體及主體和客體之間的 關(guān)系的數(shù)據(jù)編譯成變更后的SELinux策略二進(jìn)制包。7.—種SELinux策略的編譯方法,其特征在于,包括:在一策略存儲(chǔ)系統(tǒng)中按照預(yù)設(shè)規(guī)則配置所述SELinux策略;調(diào)用SELinux策略的編譯工具,將從所述策略存儲(chǔ)系統(tǒng)中提取的數(shù)據(jù)編譯成SELinux策略二進(jìn)制包。8.—種SELinux策略的編譯系統(tǒng),其特征在于,包括:解析模塊,其用于讀取SELinux策略文件,根據(jù)預(yù)設(shè)的解析策略解析所述SELinux策略 文件,獲得主體、客體及主體和客體之間的關(guān)系的數(shù)據(jù);策略存儲(chǔ)系統(tǒng),其用于存儲(chǔ)所述主體、客體及主體和客體之間的關(guān)系的數(shù)據(jù);SELinux策略的編譯模塊,其用于將從所述策略存儲(chǔ)系統(tǒng)中提取的數(shù)據(jù)編譯成SELinux策略二進(jìn)制包。9.根據(jù)權(quán)利要求8所述的系統(tǒng),其特征在于,其中所述策略存儲(chǔ)系統(tǒng)為預(yù)先創(chuàng)建的一關(guān) 系型數(shù)據(jù)庫(kù)、xml文件或文本文件。10.根據(jù)權(quán)利要求8所述的系統(tǒng),其特征在于,還包括:檢測(cè)模塊,其用于檢測(cè)所述SELinux策略文件是否發(fā)生變更;其中,當(dāng)所述SELinux策略文件發(fā)生變更時(shí),調(diào)用所述解析模塊解析出該變更的 SELinux策略文件中的主體、客體及主體和客體之間的關(guān)系的數(shù)據(jù),并在所述策略存儲(chǔ)系統(tǒng) 中更新相應(yīng)的主體、客體及主體和客體之間的關(guān)系的數(shù)據(jù),調(diào)用所述編譯工具,將所述策略 存儲(chǔ)系統(tǒng)中該更新的主體、客體及主體和客體之間的關(guān)系的數(shù)據(jù)編譯成變更后的SELinux 策略二進(jìn)制包。
      【文檔編號(hào)】G06F9/45GK106020923SQ201610388230
      【公開日】2016年10月12日
      【申請(qǐng)日】2016年6月2日
      【發(fā)明人】蘭書俊
      【申請(qǐng)人】北京元心科技有限公司
      網(wǎng)友詢問留言 已有0條留言
      • 還沒有人留言評(píng)論。精彩留言會(huì)獲得點(diǎn)贊!
      1