将供应商服务添加到具有android treble architecture的ServiceManager[SELinu



注意:我是SELinux策略的初学者,并遵循Android的vndservicemanager

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

ServiceManager.addService(mysystemservice, mybinder);

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

LOCAL_VENDOR_MODULE := true

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

创建的上下文"my_service">

私下/service_contexts

mysystemservice u:object_r:my_service:s0

现在

供应商/通用/vndservice_contexts

mysystemservice u:object_r:my_service:s0

定义的服务类型

Inpublic/service.te

type my_service, service_manager_type;

现在

Invendor/common/vndservice.te

type my_service, vndservice_manager_type;

现在授予添加权限

Inpublic/servicemanager.te

allow system_app my_service:service_manager add;

现在

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.的一部分。代替输出/产品/目标/系统。

但是一旦Myservice.java尝试在ServiceManager中添加"mysystemservice"

ServiceManager.addService(mysystemservice, mybinder(;

我得到以下 **avc 被拒绝 ** 错误

E/SELinux: avc: deny { 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=0 2019-11-14 12:44:39.613 592-592/?E/ServiceManager: add_service('mysystemservice',b0( uid=1000 - 权限被拒绝

正如我们在上面的日志中看到的,目标上下文采用默认的">tcontext=u:object_r:default_android_service:s0"代替">my_service">

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

如果我错过了什么或任何其他方式是添加服务,请告诉我。

我可以看到的一个问题是您正在使用abc.te,但是您尚未在vendor/common/内部的seapp_context中定义它。

您应该定义如下内容:

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

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

最新更新