繁体   English   中英

SEPolicy for Android Native binder客户端

[英]SEPolicy for Android Native binder client

我是Android世界的新手

我想知道如何为本机绑定器客户端程序设置SEPolicy (以及设置的内容......)

我正在使用Using Binde-IPC的 vendor binder(vndservicemanager)参考

我为所需的SEPolicy添加了一些文件


现在我有两个构建的可执行文件 - my_binder_servicemy_client

他们都在/ vendor / bin /

my_binder_service在启动时启动,它将向供应商服务管理器添加服务

my_client是一个使用binder IPC从my_binder_service执行某些功能的程序

这是我在init.rc中的设置

service my_binder_service /vendor/bin/my_binder_service
    class main
    class oneshot
    class console
    seclabel u:r:my_binder_service:s0

到目前为止我有什么:

  1. my_binder_service在启动时成功启动
  2. 它可以向供应商服务管理器添加服务
  3. my_client许可模式下表现良好

通过ps -AZvndservice list命令在强制模式下验证上述事项


但是, my_client强制模式下遇到分段错误

我检查被拒绝的消息

dmesg | grep avc | grep my_
logcat | grep avc: | grep my_

但我在许可和强制模式下都没有找到任何消息

我还通过ps -AZ检查这两个运行过程的上下文

u:r:my_binder_service:s0  <- for my_binder_service
u:r:su:s0                 <- for my_client

我发现没有为my_client正确设置进程上下文

我认为这可能是强制模式下my_client的问题

我认为my_binder_service由于init.rc文件中的seclabel命令而设置正确

但我不知道在哪里设置my_client的进程上下文

这是my_client.te的内容(my_binder_service.te与此类似)

type my_client, domain;
type my_client_exec, exec_type, file_type, vendor_file_type;

init_daemon_domain(my_client)

allow my_client my_client_exec:file entrypoint;
allow my_client serial_device:chr_file { read write };

vndbinder_use(my_client);
binder_call(my_client, my_binder_service);

和文件上下文在file_context文件中指定

/vendor/bin/my_binder_service      u:object_r:my_binder_service_exec:s0
/vendor/bin/my_client              u:object_r:my_client_exec:s0

SEPolicy部分缺少什么?

或者这不是SEPolicy的问题?

几小时后我找到了问题的解决方案..

事实证明,它与客户端程序的SEPolicy无关


首先,我发现vndservice列表强制模式下没有lisy my_binder_service,我混淆了许可模式的结果。

然后,我再次检查使用Binder IPC的SOP,看看我是否遗漏了任何东西。

事实上! 我确实错过了很多东西......


这是我所做的所有修改

# In vndservice_contexts 
my_binder_service                         u:object_r:my_binder_service:s0

我认为init.rc中的seclabel有效,但事实证明这一行仍然是必要的

# In my_binder_service.te
type my_binder_service, domain, vndservice_manager_type;
allow my_binder_service self:service_manager add;

添加了vndservice_manager_type,并根据logcat |添加了允许规则 grep avc: result和audit2allow命令

我在my_client.te中做的唯一更改是我删除了init_domain_daemon()

因为我在检查te_macros文件后发现它是不合理的


最后,一切都在强制模式运行

除了my_client进程上下文仍然是su而不是my_client ,我认为这可能与此问题无关。

也许客户端和服务器之间唯一重要的是以下几行

binder_call(my_client, my_binder_service);
binder_call(my_binder_service, my_client);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM