我正在编写Android Native程序并设置其SEPolicy
我想知道如何为非初始化程序设置流程上下文,看来域转换不起作用
我编写了2个程序,并将生成的可执行文件放入 / vendor / bin
一个程序 my_service 作为初始化守护程序运行;
而另一个 my_client 是非初始化程序,必须手动执行
这两个程序使用Binder IPC进行通信。
但是尝试为 my_client 设置进程上下文时遇到麻烦,这是一个非初始化程序
对于my_service,主要在2个文件中设置了selinux上下文
# 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