深入解析 Android 进程与应用的 SELinux 标签机制
1. 通过 seclabel 设置显式上下文
在设置上下文时,有一种直接的方法,即在服务声明中使用 init 脚本进行硬编码。在服务声明里,init 语言有一些修改,其中一个新增的选项是 seclabel。该选项允许 init 明确地将服务的上下文更改为传递给 seclabel 的参数。以下是 adbd 的示例:
Service adbd /sbin/adbd
class core
socket adbd stream 660 system system
disabled
seclabel u:r:adbd:s0
为什么有些使用动态转换,而有些使用 seclabel 呢?这取决于执行的位置。像 adbd 这样的进程从 ramdisk 早期执行,由于 ramdisk 实际上不使用每个文件的标签,所以无法正确设置转换,目标的上下文是相同的。
2. 重新标记进程
现在有了动态进程转换的能力,并且需要从 init 脚本设置套接字上下文。下面尝试对处于不正确上下文中的服务进行重新标记。可以通过以下规则检查它们是否不正确:
- 除 init 之外,没有其他进程应该处于 init 上下文中。
- 没有长时间运行的进程应该处于 init_shell 域中。
- 除了 zygote 之外,没有其他进程应该处于 zygote 域中。
运行一些基本命令,通过 adb 连接评估 UDOO 的状态:
$ adb shell ps -Z | grep init
u:r:
超级会员免费看
订阅专栏 解锁全文
1万+

被折叠的 条评论
为什么被折叠?



