使用SELinux上下文在rootfs(ramdisk)上标记文件

时间:2019-03-14 13:35:33

标签: android selinux

如何将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

1 个答案:

答案 0 :(得分:0)

我自己发现了。首先,在file_contexts文件中声明文件上下文(与所有其他文件一样),该文件上下文经过编译并以/file_contexts.bin的形式放入rootfs中。然后,/init二进制文件执行hardcoded callsrestorecon的操作,以将这些标签应用于某些文件和目录。 init*.rc文件对restorecon进行了进一步调用,以应用更多文件标签。

因此,要将标签添加到rootfs上的自定义文件中,需要将其定义为file_contexts文件,并将对restorecon的调用放入init源代码或一个init*.rc个文件中。