SELinux的多层安全机制
类型强制策略相比SELinux引入的MAC(强制访问控制)是比较遥远的。然而,在一些情况下,特别是在分类的政府应用的子集中,传统的MLS(多层安全机制)强制访问控制加上TE是非常有价值的。在意识到这个情形之后,SELinux也包括一些MLS的形式。在SELinux中,MLS的特征是可选的,并且相比两个强制访问控制机制来说是次要的。对于绝大部分安全应用来说,包括许多没有很少有数据分类的应用来说,对于增强型安全机制,TE策略是最合适的机制。尽管如此,MLS的添加也提高了一些应用的安全性。
MLS的基础概念在第一章节已经介绍过了,MLS的实际实现是非常复杂的。被MLS系统使用的安全层是分层的敏感度和一系列非层次目录集合(包括空集合)的综合体。这些敏感度和目录被用来反映真实信息的机密性和用户许可。在大多数SELinux策略中,敏感度(s0,s1…)和目录(c0,c1…)被给予通用的名称,使用户空间程序和类库来分配用户有意义的名称。(例如,s0可能与UNCLASSIFIED相关联,s1可能与SECRET相关联。)
为了支持MLS,安全上下文被扩展包含安全层次,例如这些
user_r:role_type:sensitivity[:category,…][-sensitity[:catagory,…]]
注意,MLS安全上下文一定至少有一个安全层(该安全层是由一个单独的敏感度和0个或者是多个目录组成),但是能够包含两个安全层。这两个安全层分别被称作低层(或者是当前进程层)和高层(进程间隙),如果高安全层丢失了,那么他就被认为是和低层(通常情况下)是一样的。特别的,对于大多数客体和进程来说,低安全层和高安全层通常是一样的。一系列的安全层被用于可信任的主体(也就是可以信赖的能够降密信息的主体)和多层客体,例如可能包含不同安全层的客体的目录。为了纵观这个点,我们假设所有的进程和客体都只有单一的安全层。
访问客体的MLS规则和在第一章节中讨论的一样,除了安全层不是分层的而是受支配关系支配的。不相平等关系中一层要低于或者是高于另外一层,在支配关系中,存在一个称作无比的第四状态(也被称作不可比的。请在下面的列表中查看不可比(incomp)的定义)。导致安全层和支配相关而不是和平等关系相关的原因就是目录。,目录与另外一个目录是没有层次关系的。因此,下面列出了能够将两个MLS安全层相联系的四个支配操作符:
dom: (dominate)SL1 dom SL2,如果SL1的灵敏度要比SL2的灵敏度高或者是相等,并且SL1的目录是SL2目录的超级集合。
domby (dominated by)SL1 domby SL2,如果SL1的灵敏度要低于SL2的灵敏度或者是 和SL2相等,同时,SL1的目录是SL2目录的子集。
eq: (equals)SL1 eq SL2,如果SL1的灵敏度和SL2的灵敏度相同,并且SL1的目录 和SL2的目录是同一个集合。
incomp: (incomparable 或者是 noncomparable)SL1 incomp SL2,如果SL1的目录和SL2的目录是不可比的(也就是,两个谁也不是谁的子集)
给定域关系,Bell-La Padula模型的一个变种在SELinux中被实现,一个进程能够“读”一个客体,如果,该进程的当前安全层能够支配客体的安全层,并且能够“写”一个客体,如果进程的安全层是被客体的安全层支配的话。(因此当且仅当两个安全层是相等的时候,才既能读,又能写)。
在SELinux中的MLS约束是在TE规则之外的。如果MLS被使能了,那么两个检查(除了标准linux的访问控制)一定都得通过才能允许访问。第八章节的“多层安全”讨论了SELinux可选的MLS特征。