3.【SELinux学习笔记】架构

1.LSM框架(Linux Secrity Module)
    LSM(Linux安全模型)反应了它的起源-安全微内核的探索,使用Linxu安全模型(LSM)框架将其自身集成到内核当中。 它是一种轻量级的访问控制框架,适用于多种访问控制模型在它上面以内核可加载模块的形式实现。用户可以选择合适的安全模块加载到Linux内核上,也就是说允许安全模块已插件的形式进入内核,简单来理解我们可以认为SELinux是LSM的一个插件。这种设计思想的好处就是模块化,在最少改变内核代码情况下,提供一个能够实现强制访问的模块。因此LSM框架允许安全模块以插件形式载入内核,而SELinux就是作为一个安全模块载入Linux内核的。如下图:
3.【SELinux学习笔记】架构_第1张图片
图1

    那么如上图,SELinux作为一个LSM模块载入内核,在访问得到允许之前进行额外的访问确认。在LSM框架中,只有当传统Linux访问检查通过之后SELinux才会生效,实际上了是流程中多设了一道关卡,SELinxu访问机制并不会覆盖DAC的决定。但LSM框架可能会影响到SELinux收集审核数据。例如:如果你想使用SELinxu审核数据来检测所有访问被拒绝的信息,有一点需要注意,如果有一些访问被标准Linxu的DAC机制拒绝了,那么就不会再进行SELinxu审核,那么这一部分被拒绝访问的信息是不能再SELinxu审核数据中有所体现的。

2.SELinux LSM(Linux Secrity Module)模块
    SELinux内核架构反射出了Flask( Flux Advanced Security Kernel )架构,关于Flask框架有兴趣的朋友可以访问http://book.51cto.com/art/200712/63218.htm来进一步了解。它包括三个重要组件,如安全服务器、客体管理器、访问向量缓存。
3.【SELinux学习笔记】架构_第2张图片
图2
    如上图,策略强制服务器负责将主客体安全上下文发送给安全服务器,而作出策略决定的工作是由安全服务器来进行的。这该怎么理解呢? SELinux权限检查的流程中,策略强制服务器会检查AVC(Access Vector Cache;访问向量缓存,客体和主体的权限常常被缓存在AVC当中),如果AVC中有策略决策则会立刻返回给策略强制服务器,如果没有会转向安全服务器,安全服务器会根据系统初始化装载到内核的二进制策略作出决策,再将决策放到AVC中缓存起来,同事将决策返回给策略强制服务器。如果决策表示允许操作,则主体可以完成对客体的操作,反之被拒绝,被拒绝访问的信息会被记录到log文件(/var/log/message)。
    在上图flask架构中还有一个重要的角色客体管理器(ObjectManagers),安全服务器作出安全策略的判定,而它用于实施安全策略的判定结果。flask架构的第三方组件是访问向量缓存(AVC)模块,该模块可以直接从客体管理器缓存中直接获取判定结果,来提高执行速度。

3.用户控件客体管理器
SELinux架构可以被应用到用户控件资源和内核资源。它支持用户空间客体的方法就是直接通过内核安全服务器,如下图:
3.【SELinux学习笔记】架构_第3张图片
图3
内核安全服务器包括全部安全策略,用户空间客体管理器必须查询内核访问控制权决策,而不能使用内核AVC。每个服务器都独立的AVC缓存,因此用户空间客体管理器也有AVC功能,用于存储来自内核请求的决策,其AVC功能包含在libselinux当中。


4.SELinux策略语言编译器
为内核构造一个策略文件的主要方法是从将源策略文件使用checkpolicy程序进行编译,那么这里来了解一下本地策略语言和策略的构造。下图列举了策略源文件的主要部分:
3.【SELinux学习笔记】架构_第4张图片
图4 Organization of policy source file(policy.conf)

  • 策略源文件的第一部分定义了安全服务器的客体类别,同时定义了相对应客体类别的许可。开发者一般情况下不会修改客体类别和许可的定义。
  • 第二部分包括类型强制声明,这是很庞大的工程,它包括所有的类型声明、TE规则(如allow、type_transition等)、规则和角色及用户的声明。
  • 接下来是约束,约束是基于TE规则之上增加的更多的限制。如MLS策略就是约束的一种实现。

使用checkpolicy创建二进制策略文件,我们可以使用Tresys apol工具进行查看、搜索和分析policy.conf文件的内容。

提示:如果我们安装了自己编写的策略,那么内核将会立即开始实施策略中的访问控制。

你可能感兴趣的:(3.【SELinux学习笔记】架构)