如何将SELinux标签应用于rootfs上的文件,即不属于/
,system
...分区(Android 7.1)的直接位于data
中的文件?在adb上调用ls -lZ /
会产生(摘录):
-rwxr-x--- 1 root root u:object_r:init_exec:s0 806748 1970-01-01 01:00 init
drwxr-xr-x 14 root root u:object_r:cgroup:s0 0 2019-03-14 14:01 acct
-rw-r--r-- 1 root root u:object_r:rootfs:s0 99904 1970-01-01 01:00 file_contexts.bin
根据我的研究,rootfs(GPIO + GZ)不支持SElinux上下文标记(没有xattr),因此所有文件都应具有相同的上下文,显然并非如此。我已将一个自定义文件/foo
添加到了继承默认上下文u:object_r:rootfs:s0
的ramdisk中。
作为测试,我向system/sepolicy/file_contexts
添加了一条规则:
/foo u:object_r:init_exec:s0
为我的文件提供与/init
相同的上下文。这确实有任何影响(但grep /foo /file_contexts.bin
表明/file_contexts.bin
已更新)。如何标记/foo
?
答案 0 :(得分:0)
我自己发现了。首先,在file_contexts文件中声明文件上下文(与所有其他文件一样),该文件上下文经过编译并以/file_contexts.bin
的形式放入rootfs中。然后,/init
二进制文件执行hardcoded calls至restorecon
的操作,以将这些标签应用于某些文件和目录。 init*.rc
文件对restorecon
进行了进一步调用,以应用更多文件标签。
因此,要将标签添加到rootfs上的自定义文件中,需要将其定义为file_contexts文件,并将对restorecon
的调用放入init
源代码或一个init*.rc
个文件中。