发明内容
鉴于上述问题,提出了一种克服上述问题或者至少部分地解决上述问题的双系统的容器间安全策略隔离方法、电子设备及存储介质。
本发明的一个目的是实现对宿主机和各个容器的隔离控制。
根据本发明的一方面,本发明提供了一种双系统的容器间安全策略隔离方法,应用于具有至少一个容器的宿主机上,包括:
在宿主机启动过程中,判断最终隔离文件是否已存在,其中所述最终隔离文件由所述宿主机和各容器的系统安全策略源文件经对所述宿主机和各所述容器各自对应的中间隔离文件编译生成;
若所述最终隔离文件存在,则判断所述宿主机和各所述容器各自对应的所述中间隔离文件是否存在;
若所述中间隔离文件存在,则校验每个所述中间隔离文件;
若所有所述中间隔离文件均通过校验,则加载所述最终隔离文件;
若存在所述中间隔离文件未通过校验,则根据所述宿主机和各所述容器各自对应的所述中间隔离文件编译出新的所述最终隔离文件,并加载新的所述最终隔离文件;
启动系统安全策略,根据加载的所述最终隔离文件对所述宿主机和各所述容器进行隔离控制。
可选地,在判断出所述最终隔离文件不存在时,执行所述根据所述宿主机和各所述容器各自对应的所述中间隔离文件编译出新的所述最终隔离文件,并加载新的所述最终隔离文件的步骤。
可选地,所述校验每个所述中间隔离文件的步骤包括:
对于每个所述中间隔离文件,比较所述中间隔离文件的校验码与预先生成的校验码汇总文件中的对应的记录值是否一致;
若一致,则确定所述中间隔离文件通过校验。
可选地,若存在所述中间隔离文件未通过校验,则在加载新的所述最终隔离文件之前,还包括:
删除所述校验码汇总文件,根据所述宿主机和各所述容器各自对应的所述中间隔离文件生成新的校验码汇总文件;或
将所述中间隔离文件的校验码更新到所述校验码汇总文件中以覆盖对应的记录值。
可选地,所述比较所述中间隔离文件的校验码与预先生成的校验码汇总文件中的对应的记录值是否一致的步骤包括:
比较所述中间隔离文件的镜像文件中的校验码与所述校验码汇总文件中的对应的记录值是否一致,其中,所述中间隔离文件的镜像文件中的校验码是在预先编译所述宿主机和各容器的系统安全策略源文件生成所述中间隔离文件的过程中获得并写入所述镜像文件中的。
可选地,所述最终隔离文件为二进制格式的文件,所述中间隔离文件为文本格式的文件。
可选地,在判断出所述宿主机和各所述容器各自对应的所述中间隔离文件不存在时,则确定所述中间隔离文件被损坏,结束本次流程。
可选地,所述中间隔离文件是通过M4工具对所述宿主机和各所述容器的系统安全策略源文件预先进行编译后生成的;
所述最终隔离文件是通过secilc工具对所述宿主机和各所述容器各自对应的所述中间隔离文件进行编译生成的。
根据本发明的另一方面,本发明还提供了一种电子设备,包括:
存储器和处理器,所述存储器内存储有控制程序,所述控制程序被所述处理器执行时用于实现上述任一项所述的双系统的容器间安全策略隔离方法。
根据本发明的又一方面,本发明还提供了一种计算机的存储介质,所述存储介质存储有计算机程序代码,当所述计算机程序代码在计算设备上运行时,导致所述计算设备执行上述任一项所述的双系统的容器间安全策略隔离方法。
在本发明的双系统的容器间安全策略隔离方法中,在宿主机启动过程中,判断最终隔离文件是否已存在,若最终隔离文件存在,则判断宿主机和各容器各自对应的中间隔离文件是否存在;若中间隔离文件存在,则校验每个中间隔离文件;若所有中间隔离文件均通过校验,则加载最终隔离文件;若存在中间隔离文件未通过校验,则根据宿主机和各容器各自对应的中间隔离文件编译出新的最终隔离文件,并加载新的最终隔离文件;启动系统安全策略,根据加载的最终隔离文件对宿主机和各容器进行隔离控制。上述方式中,宿主机和各容器的系统安全策略源文件经预先编译后生成宿主机和各容器各自对应的独立的中间隔离文件,可以对各个中间隔离文件进行独立的校验,使宿主机和不同容器间的访问策略的更新互不影响,在启动系统安全策略后,根据加载的最终隔离文件对宿主机和各容器进行隔离控制,实现宿主机和不同容器间的独立升级。
根据下文结合附图对本发明具体实施例的详细描述,本领域技术人员将会更加明了本发明的上述以及其他目的、优点和特征。
具体实施方式
目前,宿主机和各个容器之间的安全策略隔离并没有实现,具体地,例如,无法对宿主机和各个容器分别进行独立的升级,在多次加宿主机和各个容器的策略(如SEPolicy策略)后,也容易导致丢失历史策略。若无法实现宿主机和各个容器之间的安全策略隔离,则无法使充分共享车辆上的车载系统之间的资源,如车辆上的车载娱乐系统和仪表系统互相独立,导致两者的硬件资源无法得到充分利用,不仅增加了成本,也降低了两者的通信效率。
针对上述问题,本发明实施例提供了一种双系统的容器间安全策略隔离方法。该方法最终可以实现车载系统之间的独立升级。该安全策略隔离可以为SELinux(SecurityEnhanced Linux)策略隔离。SELinux拥有一个灵活而强制性的访问控制结构,可以提高Linux系统的安全性,防御未知攻击,其安全性能相当于B1级的军事安全性能。Android系统对系统安全要求更高,因此SELinux技术在Android系统也得到了广泛应用。
图1是根据本发明一个实施例的双系统的容器间安全策略隔离方法的流程图。该容器间安全策略隔离方法可应用于具有至少一个容器的宿主机上。本方法适用于宿主机系统中存活多个虚拟系统的SELinux访问策略隔离的场景。其中宿主机系统就是主机系统,“宿主”名词来源于虚拟机系统运行在主机系统内部。虚拟机系统可以运行在容器内部,系统可以为Linux系统,亦可以为Android系统,容器间彼此隔离。容器通过利用像cgroup、内核命名空间和SELinux这样的内核技术来实现隔离,容器内部是一些轻量化组件的应用集或者是整个主机系统的应用集,运行这些应用集的进程所依赖的文件由容器镜像提供。然后将这些应用集运行在一个隔离的环境之中,这个隔离的环境又是运行在传统操作系统(宿主机)之上的。参见图1,双系统的容器间安全策略隔离方法可包括以下步骤S102至步骤S110。
步骤S102:在宿主机启动过程中,判断最终隔离文件是否已存在。其中最终隔离文件由宿主机和各容器的系统安全策略源文件经对宿主机和各容器各自对应的中间隔离文件编译生成。
系统安全策略源文件是各种系统安全访问策略的集合。在宿主机的内核启动就绪,init进程完成早期初始化工作后,准备加载系统安全访问策略。系统安全访问策略可以定义为系统安全强力访问控制下,配置source域访问target域的某种类型的权限,如:allow domain-A domain-B:file { open read write }表示Linux系统允许domain-A打开或者读写domain-B的文件。中间隔离文件可以是通过M4工具对宿主机和各容器的系统安全策略源文件预先进行编译后生成的。最终隔离文件可以是通过secilc工具对宿主机和各容器各自对应的中间隔离文件进行编译生成的,编译过程可以参照图2。图2中示意了宿主机、容器A以及容器B,当然,还可以包括其他容器。M4工具对宿主机、容器A以及容器B的系统安全策略源文件编译后生成了宿主机中间隔离文件、容器A中间隔离文件以及容器B中间隔离文件。系统安全策略源文件和各个中间隔离文件为文本格式的文件,但是系统安全策略源文件和中间隔离文件的文本格式存在差异。中间隔离文件为CIL文件。最终隔离文件为二进制格式的文件。一般情况下,可以将最终隔离文件命名为precompiled_sepolicy。
若最终隔离文件存在,执行步骤S104:则判断宿主机和各容器各自对应的中间隔离文件是否存在。
若中间隔离文件存在,执行步骤S106:则校验每个中间隔离文件。
若所有中间隔离文件均通过校验,执行步骤S108:则加载最终隔离文件。
若存在中间隔离文件未通过校验,执行步骤S110:则根据宿主机和各容器各自对应的中间隔离文件编译出新的最终隔离文件,并加载新的最终隔离文件。
步骤S112:启动系统安全策略,根据加载的最终隔离文件对宿主机和各容器进行隔离控制。在启动系统安全策略前,系统只能提供基本的验证,即处于自主访问控制(DAC,Discretionary Access control)状态,完整的访问控制由开发者自己控制。启动系统安全策略后,系统进入强制性访问控制(MAC,Mandatory Access control)状态。
在本实施例中,在宿主机启动过程中,判断最终隔离文件是否已存在,若最终隔离文件存在,则判断宿主机和各容器各自对应的中间隔离文件是否存在;若中间隔离文件存在,则校验每个中间隔离文件;若所有中间隔离文件均通过校验,则加载最终隔离文件;若存在中间隔离文件未通过校验,则根据宿主机和各容器各自对应的中间隔离文件编译出新的最终隔离文件,并加载新的最终隔离文件;启动系统安全策略,根据加载的最终隔离文件对宿主机和各容器进行隔离控制。上述方式中,宿主机和各容器的系统安全策略源文件经预先编译后生成宿主机和各容器各自对应的独立的中间隔离文件,可以对各个中间隔离文件进行独立的校验,使宿主机和不同容器间的访问策略的更新互不影响,在启动系统安全策略后,根据加载的最终隔离文件对宿主机和各容器进行隔离控制,实现宿主机和不同容器间的独立升级。
在本发明的一个实施例中,在判断出最终隔离文件不存在时,执行根据宿主机和各容器各自对应的中间隔离文件编译出新的最终隔离文件,并加载新的最终隔离文件的步骤。
在本实施例中,若最终隔离文件不存在,则可以说明这次的宿主机启动为单板烧录镜像后的第一次启动,因此,判断最终隔离文件是否已存在,若不存在,根据宿主机和各容器各自对应的中间隔离文件编译出新的最终隔离文件,可以减少加载最终隔离文件失败的可能性。
在本发明一个实施例中,步骤S106可包括:对于每个中间隔离文件,比较中间隔离文件的校验码与预先生成的校验码汇总文件中的对应的记录值是否一致。若一致,则确定中间隔离文件通过校验。
具体地,比较中间隔离文件的校验码与预先生成的校验码汇总文件中的对应的记录值是否一致的步骤可包括:比较中间隔离文件的镜像文件中的校验码与校验码汇总文件中的对应的记录值是否一致,其中,中间隔离文件的镜像文件中的校验码是在预先编译宿主机和各容器的系统安全策略源文件生成中间隔离文件的过程中获得并写入镜像文件中的。
在本实施例中,在预先编译宿主机和各容器的系统安全策略源文件生成中间隔离文件的过程中,可以通过sha256sum工具获得中间隔离文件的SHA256值并在镜像烧录过程中一并写入相同目录下。逐个校验容器镜像文件中记录的SHA256值和SHA256校验码汇总文件的记录值。中间隔离文件若全部校验通过,说明本次启动为单板非烧录镜像情况下的正常上下电场景下的启动;若未全部通过,说明本次启动为升级场景,需要对未通过的中间隔离文件进行升级。各个中间隔离文件校验过程中,部分校验不通过的原因可以是该中间隔离文件对应的镜像发生了变化。
在本发明一个实施例中,若存在中间隔离文件未通过校验,则在加载新的最终隔离文件之前,还可包括:删除校验码汇总文件,根据宿主机和各容器各自对应的中间隔离文件生成新的校验码汇总文件;或将中间隔离文件的校验码更新到校验码汇总文件中以覆盖对应的记录值。
在本实施例中,将中间隔离文件的校验码更新到校验码汇总文件中以覆盖对应的记录值时,只需要将校验未通过的中间隔离文件的校验码更新到校验码汇总文件即可,这样可以提高更新的效率。
在本发明一个实施例中,在判断出宿主机和各容器各自对应的中间隔离文件不存在时,则确定中间隔离文件被损坏,结束本次流程。因为各个中间隔离文件是在单板烧录镜像的时候打包写入磁盘介质,掉电不会消失,若中间隔离文件不存在,说明该磁盘存储的中间隔离文件被写坏。
图3是根据本发明另一个实施例的双系统的容器间安全策略隔离方法的流程图,包括步骤S302至步骤S316。
步骤S302:在宿主机启动过程中,判断最终隔离文件是否已存在。其中最终隔离文件由宿主机和各容器的系统安全策略源文件经对宿主机和各容器各自对应的中间隔离文件编译生成。
若最终隔离文件存在,执行步骤S304;若不存在,执行步骤S312。
步骤S304:判断宿主机和各容器各自对应的中间隔离文件是否存在。
若中间隔离文件存在,执行步骤S306;若不存在,执行步骤316。
步骤S306:校验每个中间隔离文件。
若所有中间隔离文件均通过校验,执行步骤S308;若未全部通过,执行步骤S310。
步骤S308:加载最终隔离文件。之后,执行步骤S314。
步骤S310:删除校验码汇总文件。
步骤S312:根据宿主机和各容器各自对应的中间隔离文件生成新的校验码汇总文件,根据宿主机和各容器各自对应的中间隔离文件编译出新的最终隔离文件,并加载新的最终隔离文件。
步骤S314:启动系统安全策略,根据加载的最终隔离文件对宿主机和各容器进行隔离控制。
步骤S316:确定中间隔离文件被损坏,结束流程。
参见图4,基于同一构思,本发明还提供了一种电子设备400。电子设备400可包括存储器401和处理器402。存储器401内存储有控制程序。控制程序被处理器402执行时用于实现根据上述任一项实施例的双系统的容器间安全策略隔离方法。
基于同一构思,本发明还提供了一种计算机的存储介质。存储介质存储有计算机程序代码。当计算机程序代码在计算设备上运行时,导致计算设备执行根据上述任一项实施例的双系统的容器间安全策略隔离方法。
上述各个实施例可以任意组合,根据上述任意一个优选实施例或多个优选实施例的组合,本发明实施例能够达到如下有益效果:
在宿主机启动过程中,判断最终隔离文件是否已存在,若最终隔离文件存在,判断宿主机和各容器各自对应的中间隔离文件是否存在,若中间隔离文件存在,校验每个中间隔离文件,若存在中间隔离文件未通过校验,根据宿主机和各容器各自对应的中间隔离文件编译出新的最终隔离文件,并加载新的最终隔离文件,启动系统安全策略,根据加载的最终隔离文件对宿主机和各容器进行隔离控制。上述方式中,宿主机和各容器的系统安全策略源文件经预先编译后生成宿主机和各容器各自对应的独立的中间隔离文件,可以对各个中间隔离文件进行独立的校验,使宿主机和不同容器间的访问策略的更新互不影响,在启动系统安全策略后,根据加载的最终隔离文件对宿主机和各容器进行隔离控制,实现宿主机和不同容器间的独立升级。
至此,本领域技术人员应认识到,虽然本文已详尽示出和描述了本发明的多个示例性实施例,但是,在不脱离本发明精神和范围的情况下,仍可根据本发明公开的内容直接确定或推导出符合本发明原理的许多其他变型或修改。因此,本发明的范围应被理解和认定为覆盖了所有这些其他变型或修改。