SELinux策略的编译方法及系统的制作方法

文档序号:10654284阅读:449来源:国知局
SELinux策略的编译方法及系统的制作方法
【专利摘要】本申请公开了一种SELinux策略的编译方法及系统,涉及移动安全操作系统技术。该方法包括:读取SELinux策略文件,根据预设的解析策略解析所述SELinux策略文件,获得主体、客体及主体和客体之间的关系的数据;将所述主体、客体及主体和客体之间的关系的数据导入一策略存储系统中;调用SELinux策略的编译工具,将从所述策略存储系统中提取的数据编译成SELinux策略二进制包。该方法通过解析SELinux策略文件并保存,可以极大地提高SELinux策略的编译速度。
【专利说明】
SEL i nux策略的编译方法及系统
技术领域
[〇〇〇1]本发明涉及移动安全操作系统技术领域,具体而言,涉及一种SELinux策略的编译方法及系统。【背景技术】
[0002]虽然Linux比起Windows来说,它的可靠性和稳定性要好得多,但是它也和其它的 UNIX—样,有以下这些不足之处:存在特权用户root,任何人只要得到root的权限,对于整个系统都可以为所欲为;对于文件的访问权的划分不够细,在Linux系统里,对于文件的操作,只有“所有者”,“所有组”,“其他”这3类的划分。对于以上这些的不足,防火墙,入侵检测系统都是无能为力的。在这种背景下,对于访问权限大幅度强化的SELinux来说,它的优点是显著的。
[0003]SELinux(Security-Enhanced Linux),它是NSA(The Nat1nal Security Agency,美国国家安全局)和SCC(Secure Computing Corporat1n)开发的Linux的一个扩张MAC(Mandatory Access Control,强制访问控制)安全模块,是对于强制访问控制的实现。在这种访问控制体系的限制下,进程只能访问那些在他的任务中所需要文件。SELinux 在类型强制服务器中合并了多级安全性或一种可选的多类策略,并采用了基于角色的访问控制概念。
[0004]当移动设备加载SELinux后,移动操作系统的安全等级将极大的提高。SELinux策略是移动系统SELinux强制访问控制的重要组成部分。SELinux策略包含了系统中所有需要配置的应用和服务访问的访问控制语句,并需要把所有的访问控制语句编译成系统内核能够识别的策略二进制包。
[0005]SELinux策略大部分都是一套声明和规则一起定义的类型强制(TE: Type Enforcement)策略,一个定义良好、严格的TE策略包括的TE规则数量巨大,因为它们表达了所有由内核暴露出的允许对资源的访问权,这就意味着每个进程对每个资源的访问尝试都必须至少要有一条允许的TE访问规则。
[0006]由于现有的编译方法需要每次编译时将所有的SELinux策略文件一一解析对应的关系,而系统中SELinux策略文件对应的策略大概包含有几万条策略,这将是一个很复杂和耗时间的工作。
[0007]因此,需要一种新的SELinux策略的编译方法及系统。
[0008]在所述【背景技术】部分公开的上述信息仅用于加强对本公开的背景的理解,因此它可以包括不构成对本领域普通技术人员已知的现有技术的信息。
【发明内容】

[0009]本发明提供一种SELinux策略的编译方法及系统,能够提高SELinux策略二进制包的编译效率。
[0010]本发明的其他特性和优点将通过下面的详细描述变得显然,或部分地通过本发明的实践而习得。[0〇11]根据本发明的一方面,提供了一种SELinux策略的编译方法,包括:读取SELinux策略文件,根据预设的解析策略解析所述SELinux策略文件,获得主体、客体及主体和客体之间的关系的数据;将所述主体、客体及主体和客体之间的关系的数据导入一策略存储系统中;调用SELinux策略的编译工具,将从所述策略存储系统中提取的数据编译成SELinux策略二进制包。[〇〇12]根据本发明的一实施方式,其中所述预设的解析策略为根据SELinux语法包含的用户、规则、类型及各自包含的子类型自动解析所述SELinux策略文件的策略语句中的字段。[0〇13]根据本发明的一实施方式,其中所述SELinux策略文件包括基础策略文件和应用策略文件。
[0014]根据本发明的一实施方式,其中所述策略存储系统为预先创建的一关系型数据库、xml文件或文本文件。
[0015]根据本发明的一实施方式,其中所述调用SELinux策略的编译工具,将从所述策略存储系统中提取的数据编译成SELinux策略二进制包包括:更改所述编译工具的编译来源为所述策略存储系统;以及提取所述策略存储系统中存储的数据,并将所述数据编译成 SELinux策略二进制包;其中所述SELinux策略二进制包包括分别与所述基础策略文件和应用策略文件对应的基础策略包和应用策略包。[〇〇16]根据本发明的一实施方式,还包括:检测所述SELinux策略文件是否发生变更;当所述SELinux策略文件发生变更时,解析出该变更的SELinux策略文件中的主体、客体及主体和客体之间的关系的数据;在所述策略存储系统中更新相应的主体、客体及主体和客体之间的关系的数据;调用所述编译工具,将所述策略存储系统中该更新的主体、客体及主体和客体之间的关系的数据编译成变更后的SELinux策略二进制包。[〇〇17]根据本发明的另一方面,提供了一种SELinux策略的编译方法,包括:在一策略存储系统中按照预设规则配置所述SELinux策略;调用SELinux策略的编译工具,将从所述策略存储系统中提取的数据编译成SELinux策略二进制包。[〇〇18]根据本发明的再一方面,提供了一种SELinux策略的编译系统,包括:解析模块,其用于读取SELinux策略文件,根据预设的解析策略解析所述SELinux策略文件,获得主体、客体及主体和客体之间的关系的数据;策略存储系统,其用于存储所述主体、客体及主体和客体之间的关系的数据;SELinux策略的编译模块,其用于将从所述策略存储系统中提取的数据编译成SELinux策略二进制包。[〇〇19]根据本发明的一实施方式,其中所述策略存储系统为预先创建的一关系型数据库、xml文件或文本文件。
[0020]根据本发明的一实施方式,还包括:检测模块,其用于检测所述SELinux策略文件是否发生变更;其中,当所述SELinux策略文件发生变更时,调用所述解析模块解析出该变更的SELinux策略文件中的主体、客体及主体和客体之间的关系的数据,并在所述策略存储系统中更新相应的主体、客体及主体和客体之间的关系的数据,调用所述编译工具,将所述策略存储系统中该更新的主体、客体及主体和客体之间的关系的数据编译成变更后的 SELinux策略二进制包。
[0021]根据本发明的SELinux策略的编译方法及系统,通过编写自动化解析工具将 SELinux策略文件预先解析并存储,之后再将存储的数据编译为SELinux策略二进制包,这样可以通过一次创建策略存储系统达到反复使用的效果,极大地提高了 SELinux策略的编译速度和效率。
[0022]另外,根据本发明的SELinux策略的编译方法及系统,还能够实现在策略存储系统中配置SELinux策略,进一步提高了SELinux策略的编译速度和效率。
[0023]应当理解的是,以上的一般描述和后文的细节描述仅是示例性的,并不能限制本发明。【附图说明】
[0024]通过参照附图详细描述其示例实施例,本发明的上述和其它目标、特征及优点将变得更加显而易见。[〇〇25]图1是根据一示例性实施方式示出的一种SELinux策略的编译方法的流程图。[〇〇26]图2是根据一示例性实施方式示出的另一种SELinux策略的编译方法的流程图。 [〇〇27]图3是根据一示例性实施方式示出的另一种SELinux策略的编译方法的流程图。 [0〇28]图4是根据一不例性实施方式不出的一种SELinux策略的编译系统的框图。【具体实施方式】
[0029]现在将参考附图更全面地描述示例实施方式。然而,示例实施方式能够以多种形式实施,且不应被理解为限于在此阐述的范例;相反,提供这些实施方式使得本发明将更加全面和完整,并将示例实施方式的构思全面地传达给本领域的技术人员。附图仅为本发明的示意性图解,并非一定是按比例绘制。图中相同的附图标记表示相同或类似的部分,因而将省略对它们的重复描述。
[0030]此外,所描述的特征、结构或特性可以以任何合适的方式结合在一个或更多实施方式中。在下面的描述中,提供许多具体细节从而给出对本发明的实施方式的充分理解。然而,本领域技术人员将意识到,可以实践本发明的技术方案而省略所述特定细节中的一个或更多,或者可以采用其它的方法、组元、装置、步骤等。在其它情况下,不详细示出或描述公知结构、方法、装置、实现或者操作以避免喧宾夺主而使得本发明的各方面变得模糊。 [0〇31 ] SELinux是一种基于域类型模型(domain-type)的强制访问控制安全系统,它由 NSA编写并设计成内核模块包含到内核中,相应的某些安全相关的应用也被打了SELinux的补丁,最后还有一个相应的安全策略。SELinux提供了比传统的UNIX权限更好的访问控制。 SELinux系统比起通常的Linux系统来,安全性能要高的多,它通过对于用户、进程权限的最小化,即使受到攻击,进程或者用户权限被夺去,也不会对整个系统造成重大影响。SELinux 由以下两部分组成:l)Kernel SELinux模块(/kernel/security/selinux) ;2)用户态工具。 [〇〇32] SELinux定义了系统中每个用户、进程、应用和文件的访问和转变的权限,然后它使用一个安全策略来控制这些实体(用户、进程、应用和文件)之间的交互,安全策略指定如何严格或宽松地进行检查。策略可以根据需要是严格的或宽松的。只有同时满足了 “标准 Linux访问控制”和“SELinux访问控制”时,主体才能访问客体。[〇〇33]图1是根据一示例性实施方式示出的一种SELinux策略的编译方法的流程图。
[0034]如图1所示,在步骤SI 10,读取SELinux策略文件,根据预设的解析策略解析所述 SELinux策略文件,获得主体、客体及主体和客体之间的关系的数据。[〇〇35]在示例性实施例,其中所述预设的解析策略为根据SELinux语法包含的用户 (USER)、规则(ROLE)、类型(Type)及各自包含的子类型自动解析所述SELinux策略文件的策略语句中的字段。[〇〇36] 其中,SELinux的策略类型说明如下:
[0037]1.USER:用户
[0038]l)user identity:类似Linux系统中的UID(User Identificat1n,用户身份证明),提供身份识别,用来记录身份;安全上下文(SELinux security context)的一部分; [〇〇39]在SELinux中,访问控制属性总是安全上下文三人组(用户:角色:类型)形式,所有客体和主体都有一个关联的安全上下文。需要特别指出的是,因为SELinux的主要访问控制特性是类型强制,安全上下文中的类型标识符决定了访问权。
[0040]2)三种常见的user:
[0041]user_u:普通用户登录系统后的预设;[0〇42] system_u:开机过程中系统进程的预设;
[0043]root:root登录后的预设;
[0044]3)所有预设的SELinux Users都是以“_u”结尾的,root除外。
[0045]2.ROLE:规则
[0046]1)文件、目录和设备的role:通常是object_r;
[0047]2)程序的 role:通常是 system_r;
[0048]3)用户的role:targeted policy为system_r;strict policy^sysadm_rnstaff_ r、user_r〇
[0049]其中,用户的role,类似系统中的GID(Group Identificat1n,群体身份,指共享资源系统使用者的身份),不同角色具备不同的权限;用户可以具备多个role,但是同一时间内只能使用一个role。使用基于RBAC(Roles Based Access Control,基于角色的访问控制)的strict和MLS(Mult1-Level Security,多级安全)策略中,用来存储角色信息。[〇〇5〇] 其中,SELinux中的多级安全,类型强制(Type Enforcement,TE)是SELinux引入的最重要的强制访问控制机制。在某些情况下,主要是保密控制应用程序的一个子集,多级安全强制访问控制机制与类型强制一起使用显得更有价值。对大多数安全应用程序而言,包括许多非保密数据应用程序,类型强制是最适合的安全增强的机制,尽管如此,MLS对部分应用程序还是增强了安全性。[0051 ] SELinux是在标准Linux基础上增加了类型强制,这就意味着标准Linux和SELinux 访问控制都必须满足先要能访问一个客体,例如:如果对某个文件有SELinux写入权限,但没有该文件的w许可,那么也不能写该文件。
[0052]3.Type:类型
[0053]Type用来将主体(subject,例如进程)和客体(object,例如文件、端口)划分为不同的组,给每个主体和系统中的客体定义了一个类型;为进程运行提供最低的权限环境;当一个类型与执行中的进程相关联时,其type也称为domain; type是SELinux security context中最重要的部位,相当于SELinux Type Enforcement的心脏,预设值以t结尾。[0〇54]类型是构成TE规则的最小单位,SELinux主要就是使用类型来确定什么访问是被允许的。在使用类型前,必须使用type语句明确地声明一个类型标识符,SELinux没有预定义类型,必须自行声明,例如:假设想声明一个类型(httpd_t),并打算将其作为Web服务器的域类型,而另一个类型(http_User_C〇ntent_t)准备应用于用户数据文件,S卩Web服务器显示内容的文件,使用type语句进行声明,如下:
[0055]type httpd_t;
[0056]type http_user_content_t;[〇〇57]声明了类型后就可以在安全上下文、TE规则和其它策略语句中使用它们了。一个大型的,复杂的策略可能包括上万个代表系统上不同资源的类型。
[0058]所有操作系统访问控制都是以关联的客体和主体的某种类型的访问控制属性为基础的。在SELinux中,访问控制属性叫做安全上下文。所有客体(文件、进程间通讯通道、套接字、网络主机等)和主体(进程)都有与其关联的安全上下文,一个安全上下文由三部分组成:用户、角色和类型标识符。常常用下面的格式指定或显示安全上下文:
[0059]USER:ROLE:TYPE[LEVEL[:CATEGORY]][〇〇6〇] 其中,LEVEL和CATEGORY用于定义层次和分类,只用于MLS策略中。LEVEL代表安全等级,目前已经定义的安全等级为s〇-sl5,等级越来越高;CATEGORY代表分类,目前已经定义的分类为c〇-cl023。[0061 ]安全上下文是一个简单的、一致的访问控制属性,在SELinux中,类型标识符是安全上下文的主要组成部分,一个进程的类型通常被称为一个域(domain),通常,认为域、域类型、主体类型和进程类型都是同义的,即都是安全上下文中的“TYPE”。[〇〇62] SELinux访问控制是基于与所有系统资源(包括进程)关联的安全上下文的,安全上下文包括三个组件:用户、角色和类型标识符。类型标识符是访问控制的主要基础。
[0063]系统中每个文件、目录、网络端口等都被指定一个安全上下文,policy(策略)则给出各安全上下文之间的作用规则;SELinux根据policy及security context规则来决定存取行为是否可执行;Subject (主体),系统进程,比如Aisr/sbin/httpd; Object (客体),被存取的项目,比如?;116、0;[代(31:(^7、1?、3〇。1^1:等。
[0064]在示例性实施例,其中所述SELinux策略文件包括基础策略文件和应用策略文件。 通常的,将SELinux配置文件(configurat1n)或策略文件(policy)位于/etc/目录下,是一些源代码文件,系统内核不能直接识别。
[0065]在示例性实施例,所述主体通常指用户,或代表用户意图运行进程或设备。主体是访问操作的主动发起者,它是系统中信息流的启动者,可以使信息流在实体之间流动。
[0066]所述客体通常是指信息的载体或从其他主体或客体接收信息的实体。主体有时也会成为访问或受控的对象,如一个主体可以向另一个主体授权,一个进程可能控制几个子进程等情况,这时受控的主体或子进程也是一种客体。客体不受它们所依存的系统的限制, 可以包括记录、数据块、存储页、存储段、文件、目录、目录树、库表、邮箱、消息、程序等,还可以包括比特位、字节、字、字段、变量、处理器、通信信道、时钟、网络结点等。
[0067]所述主体和客体之间的关系包括主体对客体的访问,例如读,写,可执行,socket 访问等。[〇〇68] 类型强制(TE)访问控制,在SELinux中,所有访问都必须明确授权,SELinux默认不允许任何访问,不管Linux用户/组ID是什么。这就意味着在SELinux中,没有默认的超级用户了,与标准Linux中的root不一样,通过指定主体类型(即域)和客体类型使用allow规则授予访问权限,al low规则由四部分组成:[〇〇69] 源类型(Source type(S)),通常是尝试访问的进程的域类型;[0〇7〇]目标类型(Target type(s)),被进程访问的客体的类型;
[0071]客体类别(Object class(es)),指定允许访问的客体的类型;[〇〇72] 许可(Permiss1n(s)),象征目标类型允许源类型访问客体类型的访问种类。[〇〇73]在示例性实施例,根据对SELinux的语法的分析,编写了自动化解析工具,该自动化解析工具的具体实现如下:[0〇74] 首先读取位于se 1 inux-policy目录下的SELinux策略文件,解析策略语句,例如:
[0075]allow user—t bin—t:file read;
[0076]这里的策略语句的主体具有user_t标签,客体具有bin_t标签,主客体关系为 class file可读。即为允许具有user_t#签的主体读取标签为客体的内容。[0〇77] 然后把解析出的allow,user_t,bin_t,file read字段,写到所述策略存储系统中。[〇〇78]再例如,也可以是下面的形式:
[0079]allow user_t bin_t:file{read execute getattr};
[0080]这个例子显示了TE allow规则的基础语法,这个规则包含了两个类型标识符:源类型(或主体类型或域)user_t,目标类型(或客体类型)bin_t。标识符f i le是定义在策略中的客体类别名称(在这里,表示一个普通的文件),大括号中包括的许可是文件客体类别有效许可的一个子集,这个规则解释如下:拥有域类型uSer_t的进程可以读/执行或获取具有 b in_t类型的文件客体的属性。[〇〇81]需要说明的是,具体的SELinux策略文件是特别复杂的,在这里只是举例说明下。 [〇〇82]在步骤S120,将所述主体、客体及主体和客体之间的关系的数据导入一策略存储系统中。[〇〇83]预先根据SELinux策略上述的各种类型创建关系型数据库,把自动化解析工具解析的主体、客体及主客体之间的关系的数据导入该关系型数据库。
[0084]在示例性实施例,其中所述策略存储系统为预先创建的一关系型数据库、xml文件或文本文件。当然,本发明不限于所例举的这三种存储形式,只要是适合存储所述主体、客体及主客体之间的关系的数据的任意形式均可以用于本发明。
[0085]在示例性实施例,所述策略存储系统为关系型数据库,可以建立主体相关数据的一个表格,建立客体相关数据的一个表格,建立主客体之间访问关系的一个表格,把SQL语句重新转换为上述的字段,然后调用SELinux的编译工具编译成策略二进制包,所以需要在自动化解析工具中把所述关系型数据库中的数据读取成编译工具可识别的。
[0086]本发明的数据存储并不限于数据库的形式,可以使用其他文件如xml或文本文件等存储。当使用其他文件存储数据时,需要相应的改变所述自动化解析工具的读写文件的接口。例如,xml需要使用libxml的库,文本文件同样可以。[〇〇87]在步骤S130,调用SELinux策略的编译工具,将从所述策略存储系统中提取的数据编译成SELinux策略二进制包。
[0088]在示例性实施例,其中所述调用SELinux策略的编译工具,将从所述策略存储系统中提取的数据编译成SELinux策略二进制包包括:更改所述编译工具的编译来源为所述策略存储系统;以及提取所述策略存储系统中存储的数据,并将所述数据编译成SELinux策略二进制包;其中所述SELinux策略二进制包包括分别与所述基础策略文件和应用策略文件对应的基础策略包和应用策略包。[〇〇89]例如,重新写SELinux策略的makefile文件,把编译来源改为所述关系型数据库; 通过编译SELinux的编译语言把从所述关系型数据库提取的数据编译成SELinux策略二进制包。而现有的编译来源是每次编译都要把数量较多的所有的策略文件重新解析一遍,重新编译速度比较慢。[0〇9〇] 本发明实施方式所公开的SELinux策略的编译方法,通过对SELinux语法的分析, 通过编写一个自动解析SELinux策略文件的工具,解析已有的SELinux策略文件中的主体和客体及主体和客体之间的关系的各种数据,根据SELinux语法包含的USER,R0LE,TYPE类型及各自包含的子类型建表,创建一个关系型数据库,然后修改SELinux本身的编译工具,从关系型数据库提取数据,因为该关系型数据库已经解析好了各种主体和客体及主客体之间的关系,所以只需要直接把各自的对应关系编译转换成二进制的策略包,编译速度将变得很快。本发明的编译方法正是基于现有技术中编译SELinux策略包需要很长时间,而提出一种快速编译的SELinux策略包的方法,将大大节省编译SELinux策略包的时间,提高编译效率。[〇〇91]应清楚地理解,本发明描述了如何形成和使用特定示例,但本发明的原理不限于这些示例的任何细节。相反,基于本发明公开的内容的教导,这些原理能够应用于许多其它实施方式。[〇〇92]图2是根据一示例性实施方式示出的另一种SELinux策略的编译方法的流程图。
[0093]如图2所示,以所述策略存储系统为关系型数据库为例进行说明。[〇〇94] 在步骤S210,完成SELinux策略编译的初始化。[〇〇95]在示例性实施例,所述编译方法主要包括两个流程:一个是初始化SELinux关系型数据库,编译策略二进制包流程,此流程速度会相对慢点;一个是SELinux初始化完成后的策略变更时候的流程,这个编译流程将会速度很快。[〇〇96]在步骤S220,检测所述SELinux策略文件是否发生变更(例如,增加,修改,删除 SELinux策略文件);当所述SELinux策略文件发生变更时,进入下一步;反之,继续判断所述 SELinux策略文件是否发生变更。[〇〇97] 在步骤S230,解析出该变更的SELinux策略文件中的主体、客体及主体和客体之间的关系的数据。
[0098]这里,可以通过上述的自动化解析工具自动扫描或者指定的变更策略文件,解析出主体、客体及主客体之间的关系的数据。
[0099]在步骤S240,在所述策略存储系统中更新相应的主体、客体及主体和客体之间的关系的数据。
[0100]根据变更的数据更新所述关系型数据库,例如,将一个应用原来由于SELinux策略的限制无法进行读写的一个文件,现在变更SELinux策略开启该应用对该文件的读写访问。
[0101]在步骤S250,调用所述编译工具,将所述策略存储系统中该更新的主体、客体及主体和客体之间的关系的数据编译成变更后的SELinux策略二进制包。[〇1〇2] 这里,可以使用上述已经变更编译来源的makefile文件可以快速的编译SELinux 的策略二进制包。[〇1〇3]在示例性实施例,所述SELinux策略文件分为基础策略文件(例如,可以命名为 files.te)和针对各个应用的应用策略文件(例如,可以命名为applicat1n.te),相应的策略二进制包也包括基础策略包和针对各个应用的应用策略包。当所述基础策略文件发生变更时,需要对整个基础策略包进行重新编译,类似的,当针对某个特定的应用的应用策略文件发生变更时,需要对该应用对应的应用策略包进行重新编译。[〇1〇4]本发明实施方式公开的SELinux策略的编译方法,当SELinux策略文件发生变更时,通过自动化解析工具解析变更后的SELinux策略文件,在关系型数据库中更新相应的主客体之间的访问关系的数据,再编译成策略二进制包,将极大的提高编译速度。克服了现有的编译需要每次编译时把所有的策略文件一一解析对应的关系,而本发明可以做到一次创建数据库、反复使用的效果,以后编译策略只需要从关系型数据库中提取不同的策略,编译改变后的策略,从而达到提高编译速度的效果。
[0105]本发明实施例中的其它内容参考上述发明实施例,在此不再赘述。
[0106]图3是根据一示例性实施方式示出的另一种SELinux策略的编译方法的流程图。
[0107]如图3所示,在步骤S310,在一策略存储系统中按照预设规则配置所述SELinux策略。
[0108]在步骤S320,调用SELinux策略的编译工具,将从所述策略存储系统中提取的数据编译成SELinux策略二进制包。
[0109]在示例性实施例,其中所述策略存储系统为预先创建的一关系型数据库、xml文件或文本文件。下面以所述策略存储系统为关系型数据库为例进行说明。
[0110]在示例性实施例,该方法还包括:在所述自动化解析工具中添加一个功能,即在所述策略存储系统中有新添加的SELinux策略时,生成一个新的SELinux策略文件写入原本的策略源码目录中。
[0111]本发明实施方式公开的SELinux策略的编译方法可以不需要SELinux策略文件,策略配置人员直接将SELinux策略配置到关系型数据库中,然后从该关系型数据库中读取数据进行编译即可,可以进一步提高SELinux策略编译的速度和效率。
[0112]本发明实施例中的其它内容参考上述发明实施例,在此不再赘述。[〇113]本领域技术人员可以理解实现上述实施方式的全部或部分步骤被实现为由CPU执行的计算机程序。在该计算机程序被CHJ执行时,执行本发明提供的上述方法所限定的上述功能。所述的程序可以存储于一种计算机可读存储介质中,该存储介质可以是只读存储器, 磁盘或光盘等。
[0114]此外,需要注意的是,上述附图仅是根据本发明示例性实施方式的方法所包括的处理的示意性说明,而不是限制目的。易于理解,上述附图所示的处理并不表明或限制这些处理的时间顺序。另外,也易于理解,这些处理可以是例如在多个模块中同步或异步执行的。
[0115]下述为本发明系统实施例,可以用于执行本发明方法实施例。对于本发明系统实施例中未披露的细节,请参照本发明方法实施例。[〇116]图4是根据一不例性实施方式不出的一种SELinux策略的编译系统的框图。
[0117]如图4所示,该系统包括:解析模块410,其用于读取SELinux策略文件,根据预设的解析策略解析所述SELinux策略文件,获得主体、客体及主体和客体之间的关系的数据;策略存储系统420,其用于存储所述主体、客体及主体和客体之间的关系的数据;SELinux策略的编译模块430,其用于将从所述策略存储系统中提取的数据编译成SELinux策略二进制包。
[0118]在示例性实施例,其中所述策略存储系统为预先创建的一关系型数据库、xml文件或文本文件。
[0119]在示例性实施例,还包括:检测模块,其用于检测所述SELinux策略文件是否发生变更。其中,当所述SELinux策略文件发生变更时,调用所述解析模块解析出该变更的 SELinux策略文件中的主体、客体及主体和客体之间的关系的数据,并在所述策略存储系统中更新相应的主体、客体及主体和客体之间的关系的数据,调用所述编译工具,将所述策略存储系统中该更新的主体、客体及主体和客体之间的关系的数据编译成变更后的SELinux 策略二进制包。
[0120]本发明实施例中的其它内容参考上述发明实施例,在此不再赘述。[〇121]需要注意的是,上述附图中所示的框图是功能实体,不一定必须与物理或逻辑上独立的实体相对应。可以采用软件形式来实现这些功能实体,或在一个或多个硬件模块或集成电路中实现这些功能实体,或在不同网络和/或处理器装置和/或微控制器装置中实现这些功能实体。
[0122]本发明提供的SELinux策略的编译方法及系统,通过对SELinux语法的分析,编写了解析SELinux策略文件的自动化工具解析出SELinux策略文件中的主体、客体及主客体之间的关系的数据,并将该数据进行非易失性存储,在编译策略二进制包时可以直接从存储设备中提取相应的数据进行编译即可,极大的提高了 SELinux策略包的编译速度和效率。
[0123]通过以上的实施方式的描述,本领域的技术人员易于理解,这里描述的示例实施方式可以通过软件实现,也可以通过软件结合必要的硬件的方式来实现。因此,根据本发明实施方式的技术方案可以以软件产品的形式体现出来,该软件产品可以存储在一个非易失性存储介质(可以是CD-ROM,U盘,移动硬盘等)中或网络上,包括若干指令以使得一台计算设备(可以是个人计算机、服务器、移动终端、或者网络设备等)执行根据本发明实施方式的方法。
[0124]以上具体地示出和描述了本发明的示例性实施方式。应可理解的是,本发明不限于这里描述的详细结构、设置方式或实现方法;相反,本发明意图涵盖包含在所附权利要求的精神和范围内的各种修改和等效设置。
【主权项】
1.一种SELinux策略的编译方法,其特征在于,包括:读取SELinux策略文件,根据预设的解析策略解析所述SELinux策略文件,获得主体、客 体及主体和客体之间的关系的数据;将所述主体、客体及主体和客体之间的关系的数据导入一策略存储系统中;调用SELinux策略的编译工具,将从所述策略存储系统中提取的数据编译成SELinux策略二进制包。2.根据权利要求1所述的方法,其特征在于,其中所述预设的解析策略为根据SELinux 语法包含的用户、规则、类型及各自包含的子类型自动解析所述SELinux策略文件的策略语 句中的字段。3.根据权利要求1所述的方法,其特征在于,其中所述SELinux策略文件包括基础策略 文件和应用策略文件。4.根据权利要求1所述的方法,其特征在于,其中所述策略存储系统为预先创建的一关 系型数据库、xml文件或文本文件。5.根据权利要求3所述的方法,其特征在于,其中所述调用SELinux策略的编译工具,将 从所述策略存储系统中提取的数据编译成SELinux策略二进制包包括:更改所述编译工具的编译来源为所述策略存储系统;以及提取所述策略存储系统中存储的数据,并将所述数据编译成SELinux策略二进制包;其中所述SELinux策略二进制包包括分别与所述基础策略文件和应用策略文件对应的 基础策略包和应用策略包。6.根据权利要求1所述的方法,其特征在于,还包括:检测所述SELinux策略文件是否发生变更;当所述SELinux策略文件发生变更时,解析出该变更的SELinux策略文件中的主体、客 体及主体和客体之间的关系的数据;在所述策略存储系统中更新相应的主体、客体及主体和客体之间的关系的数据;调用所述编译工具,将所述策略存储系统中该更新的主体、客体及主体和客体之间的 关系的数据编译成变更后的SELinux策略二进制包。7.—种SELinux策略的编译方法,其特征在于,包括:在一策略存储系统中按照预设规则配置所述SELinux策略;调用SELinux策略的编译工具,将从所述策略存储系统中提取的数据编译成SELinux策略二进制包。8.—种SELinux策略的编译系统,其特征在于,包括:解析模块,其用于读取SELinux策略文件,根据预设的解析策略解析所述SELinux策略 文件,获得主体、客体及主体和客体之间的关系的数据;策略存储系统,其用于存储所述主体、客体及主体和客体之间的关系的数据;SELinux策略的编译模块,其用于将从所述策略存储系统中提取的数据编译成SELinux策略二进制包。9.根据权利要求8所述的系统,其特征在于,其中所述策略存储系统为预先创建的一关 系型数据库、xml文件或文本文件。10.根据权利要求8所述的系统,其特征在于,还包括:检测模块,其用于检测所述SELinux策略文件是否发生变更;其中,当所述SELinux策略文件发生变更时,调用所述解析模块解析出该变更的 SELinux策略文件中的主体、客体及主体和客体之间的关系的数据,并在所述策略存储系统 中更新相应的主体、客体及主体和客体之间的关系的数据,调用所述编译工具,将所述策略 存储系统中该更新的主体、客体及主体和客体之间的关系的数据编译成变更后的SELinux 策略二进制包。
【文档编号】G06F9/45GK106020923SQ201610388230
【公开日】2016年10月12日
【申请日】2016年6月2日
【发明人】兰书俊
【申请人】北京元心科技有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1