概要
SEAndroid 基于SELinux实现, SELinux 的目标就是实现对Linux 系统上的操作做精细化安全管理.
为了达到精细化安全管理无非就限制一些主体访问对某些资源执行某些操作. 在SEAndroid里面主体一般是进程, 客体一般是资源.
SELinux 的架构如下图:
SELinux 内核模块在Linux内核中添加了一些钩子函数,当对某些资源进行某些操作的时候就会调用SELinux钩子函数进行检查, 检查的目的是验证主体进程有没有对客体资源进行该操作的权利,有则放行,无则拒绝. 这个内核模块较多SELinux LSM Moudle.
SELinux在进行安全检查的时候,首先是看一下自己的Access Vector Cache是否已经有结果。如果有的话,就直接将结果返回给相应的内核子系统就可以了。如果没有的话,就需要到Security Server中去进行检查。检查出来的结果在返回给相应的内核子系统的同时,也会保存在自己的Access Vector Cache中,以便下次可以快速地得到检查结果。
Linux内核涉及的一个哲学就是内核提供机制,上层用户提供策略, 所以SELinux LSM Moudle对于资源访问策略的配置对上层开放了接口. 用户程序将一系列访问控制策略同步给SELinux LSM Moudle. 这些策略通过一系列te文件描述,也就是上图的Securt Context.
策略是