SEAndroid 是一套安全机制,实现的主要目的是为了是Android系统更安全。 SELinux是被设计为一个灵活的可配置的MAC机制。 SEAndroid 是将SELinux 移植到Android 上的产物,可以看成SELinux 辅以一套适用于Android 的策略。
PS: SELinux是「Security-Enhanced Linux」的简称,是美国国家安全局「NSA=The National Security Agency」 和SCC(Secure Computing Corporation)开发的 Linux的一个扩张强制访问控制安全模块。原先是在Fluke上开发的,2000年以 GNU GPL 发布。 而NSA江湖名声不咋地,有不老实和不厚道的前科
所以咋android系统中名词 SEAndroid 和SElinux在android中可以基本等价。
从Android 4.4 开始增加的一套强制访问控制(Mandatory Access Control, MAC),在Android 本身的任意访问控制(Discretionary Access Control,DAC)之上,通过为对象增加安全上下文的方式,对访问的权限进行了精确的控制。
所谓知往鉴来也,看看SEAndroid 在android系统中的前世今生。 Android的安全模型是基于应用程序沙箱(sandbox)的概念, 每个应用程序都运行在自己的沙箱之中。
系统在应用程序安装时为每一个应用程序创建一个独立的uid,基于uid来控制访问进程来访问资源,这种安全模型是基于Linux传统 的安全模型DAC(Discretionary Access Control,翻译为自主访问控制)来实现的。
安全增强型Linux (SElinux)用于进一步定义应用程序沙箱的界限。作为Android安全模型的一部分,Android使用SELinux的强制访问控制(MAC) 来管理所有的进程,即使是进程具有root(超级用户权限)的能力,SELinux通过创建自动话的安全策略(sepolicy)来限制特权进程来增强 Android的安全性。
Android打开了SELinux的Enforcing模式,使其工作在默认的AOSP代码库定义的安全策略(sepolicy)下。在 Enforcing模式下,违反SELinux安全策略的的行为都会被阻止,所有不合法的访问都会记录在dmesg和logcat中。因此,我们通过查看dmesg或者logcat, 可以收集有关违背SELinux策略的错误信息,来完善我们自己的软件和SELinux策略。
android从宽松的4.3版本和部分的enforcement 4.4版本变为完整的enforcement模式。简短的说就从从前仅对几个关键的域(installed,netd,vold,zygote)进行保护到对所有的域(多于60个)。
任意访问控制(Discretionary Access Control,DAC) linux 原来的权限管理机制是基于用户和分组的,root用户作为超级用户拥有最高的权限。进程的权限取决于调起这个进程的用户的权限。 权限所控制的资源主要是:文件 按照 “所有者 所在组 ,其他” 对访问该资源的进程的权限进行定义。 主要的操作类型是: 读写执行
它被分类为强制访问控制(Mandatory Access Control, MAC)
我的理解。相比于linux原来的权限机制,SElinux做的更细化。 SELinux 中的主体和客体可以按照死和活来区别, 主体主要是指 进程; 客体是指:文件 设备 套接字 管道 消息队列 等一切资源 主要的操作类型: 不再仅局限于 读写和执行,而扩展到一切的系统调用。
SELinux 为了解决某个主体能不能对客体进行某项操作,引入了 角色,类型,SELinux用户 安全级别 等等概念,给主客体分别打上标签,(这个标签主要的内容就是 selinux用户,角色,类型,安全级别),再制定一套可定制的规则。 在主体要对客体进行访问时,根据规则来判断是否有相应的权限。
SElinux相比于linux原来的权限机制 更细腻,但也更负责。
在打开SELinux的系统中,先执行linux基于用户的权限检查后,再执行SELinux的检查。