【问题标题】:Label files on rootfs (ramdisk) with SELinux context使用 SELinux 上下文标记 rootfs(ramdisk)上的文件
【发布时间】:2019-03-14 13:35:33
【问题描述】:

如何将 SELinux 标签应用于 rootfs 上的文件,即直接位于 / 中但不属于 systemdata ... 分区的文件 (Android 7.1)?在 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

【问题讨论】:

  • 我认为您正在寻找可用于永久更改文件标签的semanage fcontext。然后restorecon reset _filename_ 将设置文件标签。这就是它在 rhel 上的工作方式。我不确定android。
  • 这些修改扩展文件属性,但rootfs没有这些。我认为 init 在每次启动时都会标记它们。
  • 它在 rhel 上运行,semanage fcontext --list | grep "^/[a-zA-Z0-9]* " 这显示了根 fs 及其文件夹的默认上下文。没有 grep 你会得到整个列表,但那是一个很长的列表。
  • 那么 rhel 使用不同的根文件系统。用于 ramdisk 的 CPIO 存档不支持扩展属性。
  • 我明白了,那么对不起。

标签: android selinux


【解决方案1】:

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

因此,要将标签添加到 rootfs 上的自定义文件,需要定义 file_contexts 文件,并且需要将对 restorecon 的调用放入 init 源代码或 @987654332 之一@ 文件。

【讨论】:

    猜你喜欢
    • 2017-10-07
    • 1970-01-01
    • 2013-03-31
    • 2019-11-25
    • 1970-01-01
    • 2016-04-30
    • 1970-01-01
    • 2014-12-31
    • 1970-01-01
    相关资源
    最近更新 更多