使用android treble架构向ServiceManager添加供应商服务[SELinux策略]
注意:我是SELinux策略的初学者,并遵循 我有一个java服务(MyService),它在BootComplete接收器上启动。 现在,我在onCreate的myservice.java中将myservice添加到ServiceManager中使用android treble架构向ServiceManager添加供应商服务[SELinux策略],android,linux-kernel,android-source,selinux,servicemanager,Android,Linux Kernel,Android Source,Selinux,Servicemanager,注意:我是SELinux策略的初学者,并遵循 我有一个java服务(MyService),它在BootComplete接收器上启动。 现在,我在onCreate的myservice.java中将myservice添加到ServiceManager中 ServiceManager.addService(mysystemservice, mybinder); 按照三重架构, 通过在应用程序的Android.mk中添加以下内容,我将应用程序移动到供应商映像分区 LOCAL_VENDOR_MODULE
ServiceManager.addService(mysystemservice, mybinder);
按照三重架构,
通过在应用程序的Android.mk中添加以下内容,我将应用程序移动到供应商映像分区
LOCAL_VENDOR_MODULE := true
我在OEM SELinux策略中做了以下更改,之前它是为系统服务编写的,现在我将应用程序移动到供应商,因此对供应商服务进行了更改,提供了旧的和当前的SE策略
已创建上下文“我的服务”
旧的
在私有/服务上下文中
mysystemservice-u:object\r:my\u-service:s0
现在
在供应商/公共/vndservice_上下文中
mysystemservice-u:object\r:my\u-service:s0
定义的服务类型
旧的
公共服务
输入我的服务、服务管理器类型代码>
现在
在vendor/common/vndservice.te中
输入my\u服务,vndservice\u管理器\u类型代码>
现在正在授予添加权限
旧的
在public/servicemanager.te中
允许系统应用程序我的服务:服务管理器添加代码>
现在
在abc.te
在进行上述更改并进行完整构建后,我可以看到我的服务上下文是out/product/target/vendor/etc/selinux/vndservice\u上下文的一部分,而不是out/product/target/system
但是一旦Myservice.java尝试通过以下方式在ServiceManager中添加“mysystemservice”
addService(mysystemservice,mybinder)
我发现以下**avc被拒绝**错误
E/SELinux:avc:denied{add}for service=mysystemservice pid=7588 uid=1000 scontext=u:r:system\u app:s0 tcontext=u:object\r:default\u android\u service:s0 tclass=service\u manager permission=0
2019-11-14 12:44:39.613 592-592/? E/ServiceManager:add_服务('mysystemservice',b0)uid=1000-权限被拒绝
正如我们在上面的日志中看到的,目标上下文使用默认的“tcontext=u:object\u r:default\u android\u service:s0”代替“my\u service”
注意:若我保留对系统映像的更改,一切正常,唯一的问题是当我将SE策略更改移动到供应商时
请让我知道我是否遗漏了什么或任何其他方法是添加服务。我看到的一个问题是,您使用的是abc.te
,但您尚未在seapp\u上下文中定义这一点
您应该定义如下内容:
user=system
seinfo=platform
name=your.package.name
domain=adbc
type=system_app_data_file
更改后,avc
错误将指向abc
app域。请检查audit2allow
建议添加的允许规则:您好,已尝试,但audit2allow在这里没有帮助,建议添加“默认的安卓服务”来代替“我的服务”以下是audit2allow的输出:#========================================允许系统应用程序默认\u android\u服务:服务\u管理器添加;请检查vendor/common/vndservice\u上下文中的第一行是否包含二进制文件的完整路径(例如/vendor/bin/mysystemservice
)。您好,建议的更改也存在同样的问题。但有一点我注意到了,我没有在“out/target/product/XYZ/vendor/bin”位置看到“mysystemservice”。它应该在那里吗?位置取决于您在Android.mk
或Android.bp
中指定的内容。但是,是的,我希望默认的供应商二进制文件位于那里。您的mysystemservice
在哪里?
user=system
seinfo=platform
name=your.package.name
domain=adbc
type=system_app_data_file