非初始进程/文件的SElinux域转换(Android Natvie)

时间:2019-04-18 03:12:02

标签: android selinux android-binder seandroid

我正在编写Android Native程序并设置其SEPolicy

我想知道如何为非初始化程序设置流程上下文,看来域转换不起作用

我编写了2个程序,并将生成的可执行文件放入 / vendor / bin

一个程序 my_service 作为初始化守护程序运行;

而另一个 my_client 是非初始化程序,必须手动执行

这两个程序使用Binder IPC进行通信。

但是尝试为 my_client 设置进程上下文时遇到麻烦,这是一个非初始化程序


对于my_service,主要在2个文件中设置了selinux上下文

  1. my_service.te
  2. file_context
# In file_context
/vendor/bin/my_service      u:object_r:my_service_exec:s0

# In my_service.te
type my_service, domain;
type my_service_exec, exec_type, file_type, vendor_file_type;

init_daemon_domain(my_service)

而且我还在 init.rc 文件中使用seclabel

# In init.rc
service my_service /vendor/bin/my_service
    class main
    console
    seclabel u:r:my_service:s0

我同时检查了 my_service 的文件上下文和进程上下文,并且将它们设置为我期望的值


对于 my_client 的SEPolicy,除了不写在 init.rc 文件中,因为它不是初始化程序

# In file_context
/vendor/bin/my_client      u:object_r:my_client_exec:s0

# In my_client.te
type my_client, domain;
type my_client_exec, exec_type, file_type, vendor_file_type;

init_daemon_domain(my_client)

对于 my_client ,只有文件上下文设置为 my_client_exec

我尝试运行my_client并查看了流程上下文:

> # Executing my_client manually
> /vendor/bin/my_client 

> ps -AZ | grep my_client
> u:r:su:s0      root      5838  5514    5948   1688 0    0 R my_client

进程上下文是 su ,而我希望它是 my_client

此外,我在 te_macros

中获得有关 init_daemon_domain(XX)的信息

我认为它将进行域转换:当init运行带有XX_exec上下文的文件时,它将把其过程上下文转换到XX!

所以我将规则更改为:

# init_daemon_domain(my_client)
domain_auto_trans(su, my_client_exec, my_client);

但这违反了一些预定义的政策。


顺便说一下,这两个程序之间的活页夹IPC似乎有效。

令人困惑的是,即使流程上下文不是 my_client ,以下规则仍然有效

binder_call(my_client, my_service)
binder_call(my_service, my_service)

是否可以对非初始化程序进行域转换?

还是我对SEPolicy有误解?因为我发现的所有资源都是关于为初始化程序设置SEPolicy

0 个答案:

没有答案