也许是因为开发工作开始得比较早而让SELinux背负了历史包袱,也许是因为SELinux的设计者想要面面俱到,SELinux的安全机制不止一种。SELinux的安全机制包含:基于角色的访问控制(Role Based Access Control,RBAC)、类型增强(Type Enforcement,TE)和多级安全(Multi Level Security,MLS)。
1.基于角色的访问控制
首先要明白什么是角色(Role)。举个例子,一个公司有研发人员、市场人员、保安、会计等,这些分工就是角色。不同的角色可以做不同的事情,接触不同的资源,比如研发人员可以接触研发文档,会计可以查看财务报表。所谓基于角色的访问控制就是将用户映射到角色,不同的角色有不同的操作许可。基于角色的访问控制的应用背景是一个大型组织,组织里有很多分工不同的人。在遥远的大型机时代,许多人登录到同一台计算机,每个人有自己的账号。或者在一个大型企业中,每个员工的计算机都联入企业内部网,访问企业内部不同的数据库,也是如此的场景。在上述两种场景下,基于角色的访问控制很容易实行。但是在单个个人电脑中或者在智能手机中,基于角色的访问控制就有些勉强了。
其实除了基于角色的访问控制,SELinux还有一个基于用户的访问控制(User Based Access Control——UBAC)。SELinux提供了一个SELinux用户的概念,SELinux用户作为Linux用户和SELinux角色的中介。用户登录系统,SELinux先将Linux用户映射为SELinux用户,然后再将SELinux用户映射为SELinux角色。SELinux用户是不是必须的呢?作者认为不是,SELinux用户和SELinux角色可以合并在一起。
2.类型增强
上一节用人类社会的分工来类比SELinux中的角色。这一节用生物的物种来类比SELinux中的类型。生物分属不同的物种,不同的物种有不同的特征。老虎的天性是吃山羊,不吃苜蓿山羊的天性是吃苜蓿,躲避老虎。这是自然法则。但是,在生物的进化过程中,有些生物的天性也会发生变化,例如熊猫就从肉食动物变成了植食动物。
在SELinux的类型增强机制下,进程和文件都有一个类型。比如进程A是本地管理类型,进程B是网络服务类型;文件a是本地管理类型,文件b是网络服务类型。系统管理员制定策略规定本地管理类型的进程可以读网络服务类型的文件,而反过来不行。于是进程A可以读文件a和文件b,进程B只能读文件b。
3.多级安全
多级安全,英文是Multi-level Security,简称MLS。多级安全来源于BLP(Bell-Lapadula模型。BLP中的B指的是Bell,LP指的是Lapadula [5] 。20世纪70年代初,Bell和Lapadula两人受命参考美国军方的保密制度,在计算机上创建一个安全的信息处理系统。一番辛苦之后,二人创建了经典的BLP模型。BLP模型大致是这样的:进程和文件都有安全标签。标签有两项,一项是敏感度,另一项是组别。BLP模型下进程对文件的操作方式有两种:读和写BLP模型规定:
(1)低敏感度进程不能读高敏感度文件,高敏感度进程不能写低敏感度文件。
(2)当进程的组别包含或等于文件的组别时,进程可以操作文件。
BLP模型的目的是防止信息泄漏。第一条规定可概括为“禁上读,禁下写”。“上读”是下级读了上级的文件,“下写”是上级写了下级的文件,有可能把秘密泄漏给下级。第二条规则是按组区分进程和文件,进程不能接触组外的文件。
SELinux的MLS机制基于两个因素:敏感度(sensitivities)和组别(categories)。敏感度以一个整数表示,组别以一个整数的集合表示。敏感度之间的关系是小于、等于、大于。组别之间的关系是包含、被包含、相等、不相关。由这两种关系又推导出一种新关系,新关系有4个值:支配(Dominate)、被支配(DominatedBy)、相等(equal)、不相关(incompatible),见表7-1。
表7-1SELinux多级安全
(www.xing528.com)
表7-1的含义是用进程的敏感度和组别与文件的敏感度和组别相比较 [6] ,导出新的关系。
第一行:当进程的组别包含文件的组别时,如果进程的敏感度大于或等于文件的敏感度,进程支配文件;如果进程的敏感度小于文件的敏感度,进程和文件不相关。
第二行:当进程的组别被文件的组别包含时,如果进程的敏感度小于或等于文件的敏感度,进程被文件支配;如果进程的敏感度大于文件的敏感度,进程和文件不相关。
第三行:当进程的组别和文件的组别相同时,如果进程的敏感度小于文件的敏感度,进程被文件支配;如果进程的敏感度等于文件的敏感度,进程和文件相等;如果进程的敏感度大于文件的敏感度,进程支配文件。
第四行:当进程的组别和文件的组别不相关时,无论进程的敏感度和文件的敏感度关系如何,进程和文件都不相关。
表7-1的逻辑是由SELinux代码实现的,是固定的,不能由用户配置的策略调整。用户可以通过配置策略在表7-1所导出的新关系的基础上定义操作许可,配置出安全模型。比如BLP模型,见表7-2。
表7-2BLP模型
进程可以读它所支配的文件,可以写支配它的文件,对于处于相等关系的文件可读可写。
下面看一个BLP模型的例子。在某个应用场景下有两个敏感度:普通和秘密,有三个部门研发、财务、销售。进程A的敏感度是普通,部门是研发;进程B的敏感度是秘密,部门是研发和财务;进程C的敏感度是秘密,部门是销售。文件a的敏感度是秘密,部门是研发和财务先导出支配关系,进程A被文件a支配,进程B相等于文件a,进程C与文件a不相关。再看BLP模型,进程A可以写文件a,进程B可以读写文件a,进程C对文件a不可读也不可写。如图7-1所示。
图7-1 BLP模型举例
多级安全又衍生出多组安全--MCS(Multi-category Security)。当敏感度总是一个值时,起作用的就只有组别了,这时就是MCS。实践中,MCS用于隔离,配置策略阻断不同组之间的信息流动。比如用SELinux保护虚拟机实例是这样工作的,每次启动一个新的虚拟机,虚拟机控制器就从1024个组别中选择2个组别分配给新的虚拟机实例。配套的策略是只在多级安全的关系为相等的情况下,SELinux才允许进程操作文件。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。