SELinux体系结构的一个非常强大的特征就是,它不仅能应用到用户空间资源也能应用到内核资源。的确,他来源于对微内核的研究,在微内核中,大多数资源都是被用户空间服务器管理的。在Linux中能够对资源进行强制访问控制的用户空间服务器的例子有X服务和数据库服务。这些服务器都提供强制安全所能提供的抽象资源。这一节提到了两种SELinux体系结构支持的用户空间服务器。
3.2.1 内核对用户空间客体管理器的支持
SELinux对用户空间客体支持的一个简单的方式就是直接通过内核安全服务器,正如下面这个图表展示的:
在这种方法下,用户空间客体管理器和内核客体管理的行为是非常像的。内核安全服务包含整个安全策略,并且用户空间客体管理器一定要咨询内核来获取访问控制决定,两者主要的不同就是用户空间客体管理器不能使用内核的AVC(access vector cache)。每一个服务器都要有他们自己的,分离的AVC来存储他过去从内核请求来的决定。对于用户空间服务器来说,AVC的功能就是被包含在库libselinux中。
另外一个不同就是用户空间客体管理器没有LSM钩子,LSM钩子是内核空间的概念。然而,客体管理器在libselinux中的AVC有内核接口。AVC操纵缓存未命中并且代表客体管理器查询内核。
直白的说,这种支持用户空间客体管理器的方式有一些缺点。首先,为了使用类型强制策略,客体管理器必须要定义能够代表他们资源的客体类。例如,一个数据库服务器一定要定义包含数据库,表格,模式,实体等的客体类。对于内核资源,客体类是复杂的,并且和定义在SELinux的LSM模块头文件的硬编码类相符合。在策略中类定义的关系加上你这些内核编码导致了在用户空间策略和编码上不行的依赖关系。特别的,两个用户空间服务器一定要注意不要是用内核中的同一个客体类。内核没有为这种冲突提供解决办法。
这种方式的第二个缺点就是内核安全服务器为那些不在内核中的客体管理器中的客体类管理策略。这就增长了内核中和内核无关的抽象体的存储开销,并且会影响在AVC未命中的情况下,内核策略验证的开销。
3.2.2 策略服务器架构
为了解决用户空间客体服务器使用使用内核安全服务器的缺点和提高SELinux的安全性,一个正在进行的努力就是为用户空间客体管理器提供用户空间支持。这个项目有两个主要目标和一些第二目标。主要目标是:
- 1:通过提供一个用户空间安全服务器来为用户空间客体管理器提供更好的支持,该安全服务器为用户的策略部分做出访问决定。
- 2:通过构建一个策略管理服务器来为策略提供细粒度的访问控制,该策略管理服务器是一个用户空间客体管理器,他的客体类代表着策略部分。
全体上,这两个服务器和策略服务器是相关的。下面的这个图显示了策略服务器的架构。
在策略服务器架构中,整个系统策略的所有的操作和管理都是通过策略管理服务器(PMS)控制的。PMS是一个用户空间客体管理器,在PMS中,他创建了代表策略资源的客体类,并且对这些资源强制执行了一个更加细粒度的访问控制策略。这种特征为SELinux提供提供了非常重要的安全增强。在此之前,对策略的访问控制是一个要么有要么全无的议题。你要么可以写策略文件要么完全不能。伴随着PMS,你先在能够允许访问粗略部分并且限制对其他的访问。例如,SELinux策略能够允许用户管理工具添加用户和进行角色分配,但是,不能改变类型强制type规则。更好的是,你可以允许一个数据库服务器来改变和他的客体类和类型相关的TE策略,但不是内核中的那些。在内部,PMS被设计来使用SELinux最新的一个特征,可加载策略模块,这个会在后面的章节中描述。
PMS第二个主要的功能就是分离系统策略到内核和用户部分,并且分别将它们加载到内核安全服务器和用户空间安全服务器(USSS)。以这种方式,内核并不了解规则和客体类,仅仅对用户空间客体管理器具有重大意义。用户空间客体管理器咨询USSS而不是内核。为了策略更新和缓存相关性功能,在不同的用户空间客体管理器中的AVC向USSS注册(并不是内核)。
除了内核对用户空间资源的责任的去除和对策略管理更加细粒度的访问,策略服务器架构有更多优势。因为PMS是一个运行中的服务器,我们可以扩展他的接口来对分布式的策略管理允许远程的网络访问。PMS和USSS被设计来允许运行时客体类注册,打破了存在于内核中的用户空间客体管理器的编码依赖。两种方式的不同被libselinux对当前存在的工作提供向后兼容遮掩起来了。最终,PMS和USSS被设计成单独的服务,在没有另外一个的时候,运行一个或两个都被使用。例如,在一个细粒度策略访问控制是无用的系统中,USSS能够被单独使用来支持其他用户空间客体服务器。
版权声明:您好,转载请留下本人博客的地址,谢谢