这里是因为 我这里需要做的一个bug有接触的selinux, 所以就寻找了很多资料去学习。
整了我半个多月的问题,终于解决了, 所以特此来记录一下,也学习一下。这里我就把 最近查询总结的一些资料总结一下
然后就整理了很多资料,很多是从网上转载整理的, 有些自己添加的,以备以后备用,也供大家学习哈。
这里这个背景,我先放些 链接, 毕竟这个可以慢慢理解和看,以后在整理
一 、 SELinux背景知识
http://blog.youkuaiyun.com/syhost/article/details/41496701
- DAC和MAC
SELinux出现之前,Linux上的安全模型叫DAC,全称是Discretionary Access Control,翻译为自主访问控制。DAC的核心思想很简单,就是:
进程理论上所拥有的权限与执行它的用户的权限相同。比如,以root用户启动Browser,那么Browser就有root用户的权限,在Linux系统上能干任何事情。
显然,DAC太过宽松了,所以各路高手想方设法都要在Android系统上搞到root权限。那么SELinux如何解决这个问题呢?原来,它在DAC之外,设计了一个新的安全模型,叫MAC(Mandatory Access Control),
翻译为强制访问控制。MAC的处世哲学非常简单:即任何进程想在SELinux系统中干任何事情,都必须先在安全策略配置文件中赋予权限。凡是没有出现在安全策略配置文件中的权限,进程就没有该权限。来看一个SEAndroid中设置权限的例子:
/*
from external/sepolicy/netd.te
下面这条SELinux语句表示 允许(allow )netd域(domain)中的进程 ”写(write)“
类型为proc的文件
注意,SELinux中安全策略文件有自己的一套语法格式,下文我们将详细介绍它
*/
allow netd proc:file write
如果没有在netd.te中使用上例中的权限配置allow语句,则netd就无法往/proc目录下得任何文件中写数据,即使netd具有root权限。
显然,MAC比DAC在权限管理这一块要复杂,要严格,要细致得多。
那么,关于DAC和MAC,此处笔者总结了几个知识点:
Linux系统先做DAC检查。如果没有通过DAC权限检查,则操作直接失败。通过DAC检查之后,再做MAC权限检查。
SELinux中也有用户的概念,但它和Linux中原有的user概念不是同一个东西。什么意思呢?比如,Linux中的超级用户root在SELinux中可能就是一个没权限,没地位,打打酱油的”路人甲“。当然,这一切都由SELinux安全策略的制定者来决定。
通过上述内容,读者应该能感觉到,在SELinux中,安全策略文件是最重要的。确实如此。事实上,对本文的读者而言,学习SELinux的终极目标应该是:
看懂现有的安全策略文件。
编写符合特定需求的安全策略文件。
前面也曾提到,SELinux有自己的一套规则来编写安全策略文件,这套规则被称之为SELinux Policy语言。它是掌握SELinux的重点。
二、框架
后面整理