Selinux Context上下文
前面有提到主体,客体,te文件 等等。
也就是说某个进程(主体)对(客体)资源会有(哪些)权限(动作)
这里需要搞明白:
谁是主体,谁能成为主体,我怎么知道某个东西是主体,同理,客体以及权限动作也是如此。
在android系统中,这个问题是通过label标签来解决。我们称这个标签为Selinux Context上下文。
简称为scontext.
换句话说,安卓系统中的每一个主体和客体对象,都会有一个scontext上下文件,它是一个label字符串,安卓系统中需要有对此有一个规定:
主体的scontext是u:r:xxx:s0, (看到类似这个scontext就知道它是属于主体的标签), 一般 这个xxx就是模块名称,如init, adbd, vold等
客体的scontext是u:object_r:xxx:s0, (看到类似这个scontext就知道它是属于客体的标签), 这个xxx一般指的就是MAC模型中的客体类型资源文件, 如/dev/light0
配合te文件的规定策略:比如:进程init对存放在/dev/light0的这个文件有open和read的权限
有可能进程init对存放在/dev/light0的这个资源,就没有有写入的权限(如果te文件没有规定的话)
换个角度思考,如果想在一个te文件中描述主体对客体的行为动作,主体如何描述,客体又如何描述,所以肯定是需要一些字符串去标识和定义它们,这就是需要打标签的原因。
关于context_file
前面已经讲了scontext,了解了什么样的标签是主体以及客体,那现在又出现一个问题,我们在哪里定义这个标签?就是我们这节要讲的context_file,上下文文件。

注意:系统上的所有的文件,全部都需要打上上下文标签,每个文件都需要有标签定义。
那么问题来了,现在所有的标签都已经准备好了,有file_contexts, genfs_contexts,service_contexts,seapp_contexts,property_contexts,也清楚 我们需要对每个客体所需要的标签是在对应的context_file文件中进行标签的定义,但这只是定义性的。我们还需要知识一点,对这个客体来说,肯定是需要有一个角色(是谁)来给这个客体赋予context_file文件中定义的标签label
在安卓系统中,一般是通过一些SecurityServer进程,如init进程(但不仅仅只有它), 它可以将上下文标签中的定义,给对应的文件打上标签(上图中也包含了打标签的过程)。
(知识扩展:这里针对的是客体,但对主体的上下文标签又是在哪里呢?主体在运行之前也是一个文件,所以也需要拥有上下文里的某一个标签)
1215

被折叠的 条评论
为什么被折叠?



