这个就是我们在初始化的时候给对应的属性设置上下文。chcon 这个可以修改上下文。
我们在遇见类似的属性读取不到的时候,一般操作是:
getprop -z 看下属性的上下文,然后 ps -z 看下进程的上下文,然后判断出来是否有对应的
权限,这里就是 te 文件的配置方式。
plat_service_contexts 是个服务的权限,这里我们可以看一列 android.os.UpdateEngineService
u:object_r:update_engine_service:s0
plat_file_contexts 这个是文件的上下文配置。
3 APP 签名权限
我们现在来看 plat_seapp_contexts ,这个是指示上层的进程的上下文的对应关系。
这个是非常重要的,对上层 APP 配置的上下文。代码位置在这里。
应 用 创 建 之 后 ( ForkAndSpecializeCommon ) , 在 这 里 实 现 的 时 候 , 调 用 rc =
selinux_android_setcontext(uid, is_system_server, se_info_c_str, se_name_c_str);设置 selinux 上
下文。
我们这个上下文在上层 APP 中就是使用签名进行区分的。做个总结:
上层使用配置对应的 AndroidManifest.xml ,然后获取对应的 gid,通过签名获取对应的 uid,
两个配合在 te 文件中添加对驱动节点的访问权限。
2 与 Linux 的区别
Linux 的 SElinux 主要对的是文件和进程,而 Android 里面多了属性和 APP(因为 APP 分系统,media 等等),于是 Android 在 Linux 的基础上添加了一些方法来完成 SElinux 的机制。
我这里想说的一点是 SELinux 的加入,主要是解决我们之前只用用户组这个分类太过简略,
导致很多手机 Root 权限被获取后,手机整个都处在被访问的情况,于是补充进来 SELinux
来限定更细致的权限设定。