Android Selinux详解[三]--新增设备节点标签相关

03-11 1496阅读

上个章节说了在file_context中也可以新增节点,但可能会出现标签无法生效的情况,这种情况下就需要在genfs_contexts中去新增设备节点相关的标签了,因为在genfs_contexts中打的标签,系统会自动执行restorecon命令,而在file_contexts中新增设备节点标签,是需要代码或者手动执行restorecon命令才会生效的。

Android Selinux详解[三]--新增设备节点标签相关
(图片来源网络,侵删)

本文主要讲一下如何在genfs_contexts中新增标签。

1. 我们看一下源码中的genfs_contexts加标签的格式

genfs_contexts - OpenGrok cross reference for /system/sepolicy/private/genfs_contexts

给/proc/cmdline打标签

genfscon proc /cmdline                                           u:object_r:proc_cmdline:s0

给/sys/class/leds打标签

genfscon sysfs /class/leds                                       u:object_r:sysfs_leds:s0

可以看到格式如下

genfscon 节点首目录标签 /路径     u:object_r:新标签名:s0

比如/sys/class/leds的标签是用如下加法去加的:

首先看一下sys目录的标签是什么, 在adb shell 后执行

ls -l -Z

dr-xr-xr-x  14 root   root      u:object_r:sysfs:s0                      0 1970-01-01 00:00 sys

可以看到sys的标签是sysfs,然后就可以给/sys/class/leds打标签了,打法就是下面这样的

genfscon sysfs /class/leds           u:object_r:sysfs_leds:s0

看下机器里是什么样的,执行ls -l -Z /sys/class/,就可以看到leds的标签了。

drwxr-xr-x 2 root root u:object_r:sysfs_leds:s0            0 1970-01-03 18:45 leds

2. 如何给系统设备节点打标签

我们随便举个例子,假设我们要给/sys/devices/platform/soc/xxx000.i2c/i2c-0/0-00xx/leds/blue加标签

加标签之前我们要先看一下当前的标签,以及确认一下当前的路径

adb shell

cd /sys/devices/platform/soc/xxx000.i2c/i2c-0/0-00xx/leds

/sys/devices/platform/soc/xxx000.i2c/i2c-0/0-00xx/leds # ls -l -Z

total 0

drwxr-xr-x 3 root root u:object_r:sysfs:s0  0 1970-01-03 18:45 blue

看完之后,我们会发现,当前blue节点的标签是sys的默认标签,也就是sysfs,那加法就是如下的:

+ genfscon sysfs /devices/platform/soc/xxx000.i2c/i2c-0/0-00xx/leds   u:object_r:sysfs_new_leds:s0

但到此处,加法是不全的,我们还需要看一下/sys/devices/platform/soc/xxx000.i2c/i2c-0/0-00xx/leds这条路径有没有超链接,也就是有没有从别的路径也能到blue这个节点的地方,我们做如下操作:

cd ..

ls -l

cd ..

ls -l

一直往前查找,查找到第一个目录sys,查看有没有超链接,假设这里是有超链接的,格式是如下这种

sys/devices/platform/soc/xxx000.i2c/i2c-0$ ls -l

total 0

drwxr-xr-x  22 root root 0 1970-01-03 18:45 devices  -> ../../../../../class/platform

那说明也可以通过sys/class/platform/soc/xxx000.i2c/i2c-0/0-00xx/leds路径到达blue节点,那我们就要把这个超链接路径也添加进去才可以

+ genfscon sysfs /class/platform/soc/xxx000.i2c/i2c-0/0-00xx/leds   u:object_r:sysfs_new_leds:s0

到此就结束了,总结下,那我们需要在genfs_contexts添加两条才可以

+ genfscon sysfs /devices/platform/soc/xxx000.i2c/i2c-0/0-00xx/leds   u:object_r:sysfs_new_leds:s0

+ genfscon sysfs /class/platform/soc/xxx000.i2c/i2c-0/0-00xx/leds   u:object_r:sysfs_new_leds:s0

 然后再在file.te中添加声明,节点类的基本都是如下声明格式,将标签名替换即可。

+type sysfs_new_leds, sysfs_type, fs_type;

3. 新增节点的验证方式

此类验证方式为整编验证,单编无法生效,一定一定要整编!!!

VPS购买请点击我

文章版权声明:除非注明,否则均为主机测评原创文章,转载或复制请以超链接形式并注明出处。

目录[+]