SELinux全称为安全提高式Security-EnhancedLinux(SELinux),是一个在内核中实践的强制存取控制(MAC)安全性机制。SELinux首先在CentOS4出现,并在其后的CentOS发行版本获得重大改善。这种改善代表用SELinux解决问题的技巧亦随著时间而改变。
SELinux的原理与构架
SELinux的整体构架和原理都比较简单linux系统,使用也不复杂。其复杂的地方在于规则十分复杂,每位进程都要有规则策略。
SELinux有2个核心组件及一些配套的工具。这两个核心组件分别是内核逻辑和策略数据库。其实,策略数据库本身并非软件逻辑,而是一个静态的数据库,为内核逻辑提供判定的根据。SELinux更能遵照最小权限的理念。在开启SELinux的情况下(enforcing模式),所有访问默认是被拒绝的,而有一系列例外的策略来准许系统的元素(服务、进程、用户)具备访问资源的权限。
整体构架与访问流程
SELinux的整个构架如图1所示,最左边的为访问者,也就是服务,进程或则用户等内容。最左边的是被访问者,也就是具体的资源,例如文件、目录或则套接字等。
当访问者访问被访问者(资源)时,须要调用内核的插口。以读取某个目录的文件为例,须要读取read插口。此时会经过SELinux内核的判定逻辑,该判定逻辑依据策略数据库的内容确定访问者是否有权访问被访问者,假如权力容许则放行,否则则拒绝并记录审计日志。
SELinux的管理与模式
可以通过/etc/selinux/config文件中的配置项实现对SELinux的管理,包括启动、停止和更改策略类型等。
如图所示,这儿有2个配置项,也就是SELINUX和SELINUXTYPE。其中SELINUX表示SELinux的启用状态,可以有3种模式。
Enforcing:此选项会在系统上启用并施行SELinux的安全性新政,拒绝存取及记录审计日志Permissive:在Permissive模式下,SELinux会被启用但不会施行安全性新政,而只会发出警告及记录审计日志Disabled:该选项表示SELinux处于非工作状态SELinux的类型
从上述配置文件还可以看出SELinux有2中类型,分别是targeted和mls。
实例代码解析
SELinux控制的内容好多,包括文件、套集字和讯号量等等。其实linux 系统架构,我们不可能介绍到所有的内容linux操作系统怎么样,明天我们主要看一下文件相关的内容。
Linux内核提供了一个安全模块框架层,这个公共框架类似于文件系统中的VFS。它为调用者提供统一的插口。之所以要提供统一插口是由于Linux内核不仅仅支持SELinux安全特点linux 系统架构,还支持Apparmor等好多安全特点。
以打开文件为例,当我们调用内核中打开文件的插口是,在其内部会调用security_file_open函数。该函数就是Linux内核安全框架(LSM)的公共插口。之后该函数通过函数表针的形式调用所有注册到LSM的安全模块。以SELinux为例,最终会调用到selinux_file_open函数。
之后selinux_file_open函数会调用avc公共函数实现权限鉴别和审计日志的记录等内容。这儿关键函数是avc_has_perm。可以看出该函数又调用了另外两个函数,其中avc_has_perm_noaudit函数实现权限的判定,而avc_audit函数则实现审计功能。
函数avc_audit实现审计功能,但并非每位操作都须要记录审计日志。在写策略文件的时侯可以关掉某个策略的审计。也就是说,在关掉该策略的审计的情况下,虽然访问拒绝也不会记录审计日志。
在函数avc_audit中,avc_audit_required函数用于判定是否须要记录审计日志,而slow_avc_audit函数则是进行审计日志的封装和记录工作。这部份代码比较清晰,简单,本文不再赘言。
明天我们介绍了SELinux的整体构架和原理,并结合代码介绍了整个流程。相信你们对SELinux应当有了一个比较清晰的认识。
文章后期可能会进行错误更正和内容更新,关注我们更便捷了解内容变化。