1.3.2 SELinuxSELinux是美国**局(NSA,National Security Agency)将Flask体系结构集成到Linux中产生的,对于其历史的详细介绍参见“Linux多安全策略和动态安全策略框架机制模块代码分析报告”一文,这里不再赘述,本小节主要对Flask体系结构在SELinux中的应用及其所使用的安全策略进行介绍。 1.3.2.1 SELinux的体系结构对于SELinux,其采用Flask体系结构。Flask体系结构是将DTOS(Distributed Trusted Operation System)集成到Fluke微内核操作系统时提出的,其实现了动态安全策略,可以灵活的支持多种安全策略,对于其详细介绍参见“Linux多安全策略和动态安全策略框架机制模块代码分析报告”一文。Flask体系结构明确的将策略决策和策略实施分为两个部分,其中策略逻辑和通用接口封装在一个称为安全服务器的内核子系统中,用于实现策略的决策;而安全策略的实施则交由客体管理器来完成,SELinux中除安全服务器之外的其他内核子系统如进程管理、文件系统等都是客体管理器。
图1-2 SELinux的Flask体系结构
如图1-2所示,对于安全服务器,其维护了系统的访问控制策略和SID(Security Identifiers)与安全上下文的映射关系,主要用于产生访问决策;对于客体管理器,其由三个要素组成:决策检索接口、访问向量缓存AVC(Access Vector Cache)和策略变化通知接口。其中决策检索接口用于访问决策、标记决策和多实例决策的检索;访问向量缓存用于存放从安全服务器获得的访问向量,从而有效提高客体管理器的执行效率,避免由于安全服务器的频繁访问而造成的性能下降;策略变化通知接口用于在策略变化时通知客体管理器,从而使其更新其中的内容。 对于Flask体系结构,其主要操作有三个:客体标记、决策检索和策略的更新。下面分别进行介绍: 1.客体的标记 在Flask体系结构中定义了两个与安全策略无关的数据类型用于客体的标记,分别为安全上下文和安全标识符SID。其中安全上下文是一个变长的字符串,其内容和格式依赖于安全服务器所实现的特定的安全模型,在SELinux中由若干个安全属性组成:用户、角色、类型和一个可选的安全级别;安全标识符是在安全服务器运行时映射到安全上下文的一个固定长度的整数,只能有安全服务器解释。当主体创建客体时,客体管理器会将创建客体的主体的SID、相关客体的SID和客体的类型传递给安全服务器,安全服务器在接收到这些数据后对其进行处理,从而为新建的客体生成一个安全上下文并将其转化为SID,然后将其返回给客体管理器,客体管理器获得该SID后将其与相应的客体进行绑定。 2.决策检索 当主体对客体进行访问时,客体管理器会收集主体的SID、客体的SID以及客体类别,并根据其在AVC中进行查找,如果找到,则根据相应的安全决策进行处理;反之客体管理器会将主体的SID、客体的SID以及客体的类别传递给安全服务器,安全服务器根据这些数据及相应的安全策略进行计算,得到相应的访问向量,然后将其返回给客体管理器,同时将该访问向量存放到AVC。 3.策略的更新 当SELinux动态改变安全策略时,在新的安全策略文件装载之后,安全服务器首先会更新相应的安全标记映射,使不再授权的安全标记失效,接着安全服务器会根据AVC提供的接口通知AVC。AVC在接收到策略变化的通知之后,首先更新其自身的状态,然后调用客体管理器注册的回调函数来更新客体管理器中当前状态下的所有许可。当客体管理器完成其状态的更新并确认策略已经变化之后,AVC通知安全服务器,完成到新策略的过渡。 1.3.2.2 SELinux的安全模型SELinux采用TE模型、RBAC模型、IBAC模型和一个可选的MLS模型组合而成的安全模型。其中TE模型提供对进程和对象的细粒度的控制;RBAC和IBAC提供了较高级别的抽象从而来简化用户的管理;MLS模型用于对机密性要求较高的系统中,以进一步加强系统的安全。对于上述四个模型,下面分别对其进行介绍: 1.TE模型 TE模型用于控制不同类型间的访问,是SELinux中**资源访问的一个最主要的强制访问控制模型。它将系统视为主体集合和客体集合,对于每一个主体,都为其定义了一个与之相关联的域;对于每一个客体,都为其定义了一个与之相关联的类型,其中域是一个主体有能力访问的客体的集合。其原理如图1-3所示: 图1-3 SELinux的TE模型 当主体对客体进行访问时,系统根据TE模型定义的规则来判断该主体能否对客体进行访问,这些访问控制规则存放在安全策略文件中。策略文件分为策略源文件和二进制策略文件。策略源文件使用策略配置语言来进行描述,由系统管理员创建和维护,源文件经过编译之后生成二进制策略文件,二进制文件在内核启动期间装载到内核空间,形成内存中的策略库及缓存。
2.RBAC模型 SELinux中的RBAC模型是建立在TE模型之上的基于角色的强制访问控制模型,它通常与基于身份的访问控制模型IBAC结合在一起使用来为SELinux的安全上下文提供用户和角色两种属性,从而将Linux的用户及其运行的程序基于规则绑定起来,它为SELinux定义了角色的集合和角色可以进入的域集。对于该模型,其原理如图1-4所示:
图1-4 SELinux的RBAC模型
在RBAC系统中,用户进入系统得到控制权之后,就会得到一个会话,会话表示用户和角色之间的关系,用户每次必须通过建立会话来激活相应的角色,从而获得相应的访问权限,进而根据该访问权限来对主体的访问进行**。这里需要强调的是,RBAC模型用于管理进程,因此对于客体来说,角色就没有什么意义。
3.MLS模型 对于MLS模型,由于其是由BLP模型的简单安全特性和星号特性形式化后得到的,因此相关内容参见“BLP”小节,这里不再赘述。
4.SELinux的安全模型 SELinux采用TE模型、RBAC模型、IBAC模型和一个可选的MLS模型组合而成的安全模型,其模型图如图1-5所示: 图1-5 SELinux的安全模型 |
|
声明:文章版权归原作者所有 部分文章转自互联网 如有侵权请联系
[邮箱地址] 删除
|