gpt4 book ai didi

android - 将供应商服务添加到 ServiceManager with android treble architecture[SELinux policy]

转载 作者:行者123 更新时间:2023-12-05 00:05:27 24 4
gpt4 key购买 nike

注意:我是 SELinux 政策的初学者并遵循了 vndservicemanager by Android

我有一个在 BootComplete 接收器上启动的 java 服务 (MyService)。现在我在 MyService.java 的 onCreate 中将 myservice 添加到 ServiceManager。

ServiceManager.addService(mysystemservice, mybinder);

按照高音架构,我通过在应用程序的 Android.mk 中添加以下内容将我的应用程序移动到供应商镜像分区。

LOCAL_VENDOR_MODULE := true

我在 OEM SELinux 政策中做了以下更改,之前它是为系统服务编写的,现在我将应用程序移至供应商,因此对供应商服务进行了更改,同时提供旧的和当前的 SE 政策。

Created Context "my_service"

private/service_contexts

mysystemservice u:object_r:my_service:s0

现在

vendor/common/vndservice_contexts

mysystemservice u:object_r:my_service:s0

Defined Service Type

public/service.te

type my_service, service_manager_type;

现在

vendor/common/vndservice.te

类型 my_service, vndservice_manager_type;

Now giving add permission

public/servicemanager.te

允许 system_app my_service:service_manager 添加;

现在

abc.te

type abc, domain;
type abc_exec, exec_type, vendor_file_type, file_type;

init_daemon_domain(abc)

vndbinder_use(abc)

binder_call(abc, system_app)

add_service(abc, my_service)

allow abc my_service:service_manager find;
allow abc my_service:service_manager add;

经过上述更改并提供完整构建后,我可以看到我的服务上下文是 out/product/target/vendor/etc/selinux/vndservice_contexts..inplace of out/product/target/system 的一部分。

但是一旦 Myservice.java 尝试通过

在 ServiceManager 中添加“mysystemservice”

ServiceManager.addService(mysystemservice, mybinder);

我得到以下 **avc denied ** 错误

E/SELinux: avc: denied { add } for service=mysystemservice pid=7588 uid=1000 scontext=u:r:system_app:s0 tcontext=u:object_r:default_android_service:s0 tclass=service_manager permissive=02019-11-14 12:44:39.613 592-592/? E/ServiceManager: add_service('mysystemservice',b0) uid=1000 - 权限被拒绝

正如我们在上面的日志中看到的,Target 上下文正在使用默认的“tcontext=u:object_r:default_android_service:s0”代替“my_service

注意:如果我保留对系统镜像的更改,一切正常,唯一的问题是当我将 SE 策略更改移至供应商时。

如果我遗漏了什么或有任何其他方式可以添加服务,请告诉我。

最佳答案

我能看到的一个问题是您正在使用 abc.te , 但你没有在你的 seapp_context 中定义它里面vendor/common/ .

你应该定义如下内容:

user=system
seinfo=platform
name=your.package.name
domain=adbc
type=system_app_data_file

此更改后 avc错误将指向 abc应用域。

关于android - 将供应商服务添加到 ServiceManager with android treble architecture[SELinux policy],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59135573/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com