NSA最初设计的安全模型叫FLASK,全称为Flux Advanced Security Kernel(由Uta大学和美国国防部开发,后来由NSA将其开源),当时这套模型针对DTOS系统。后来,NSA觉得linux更具发展和普及前景,所以就在Linux系统上重新实现了FLASK,称之为SELinux。
Linux Kernel中,SELinux通过Linux Security Modules实现。在2.6之前,SElinux通过Patch方式发布。从2.6开始,SELinux正式入驻内核,成为标配。
由于Linux有多种发行版本,所以各家的SELinux表现形式也略有区别。具体到android平台,Google对其进行了一定得修改,从而得到SEAndroid。
SELINUX出现之前
SELinux出现之前,Linux上的安全模型叫DAC,全称是Discretionary Access Control,翻译为自主访问控制。DAC的核心思想很简单,就是:
进程理论上所拥有的权限与执行它的用户的权限相同。比如,以root用户启动Browser,那么Browser就有root用户的权限,在Linux系统上能干任何事情。
显然,DAC太过宽松了,所以各路高手想方设法都要在Android系统上搞到root权限。那么SELinux如何解决这个问题呢?原来,它在DAC之外,设计了一个新的安全模型,叫MAC(Mandatory Access Control),翻译为强制访问控制。MAC的处世哲学非常简单:即任何进程想在SELinux系统中干任何事情,都必须先在安全策略配置文件中赋予权限。凡是没有出现在安全策略配置文件中的权限,进程就没有该权限。
目前理解
查询了一些网上的文档,很多都有翻译的感觉,概念讲解起来比较生涩。等后面有了新的理解之后再来填充。
相关资源
不过,由于selinux的实现内容很多,一时还难以掌握,暂时将查到的相关资源列在这里。
深入理解SELinux SEAndroid(第一部分) http://blog.csdn.net/innost/article/details/19299937/
深入理解SELinux SEAndroid之二 http://blog.csdn.net/innost/article/details/19641487
深入理解SELinux SEAndroid(最后部分) http://blog.csdn.net/innost/article/details/19767621
SEAndroid策略介绍1 http://blog.csdn.net/loongembedded/article/details/62231264
SELinux策略语言--客体类别和许可 http://blog.csdn.net/loongembedded/article/details/52823060