[英]SEPolicy for multiple services using AIDL in Android Native
[英]SEPolicy for Android Native binder client
我是Android世界的新手
我想知道如何为本机绑定器客户端程序设置SEPolicy (以及设置的内容......)
我正在使用Using Binde-IPC的 vendor binder(vndservicemanager)参考
我为所需的SEPolicy添加了一些文件
现在我有两个构建的可执行文件 - my_binder_service和my_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
到目前为止我有什么:
通过ps -AZ和vndservice list命令在强制模式下验证上述事项
我检查被拒绝的消息
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.