背景
我正在为Android操作系统构建一个服务,我希望它只能由我公司发布的应用程序访问。此服务是作为基于Java的系统应用程序的一个组件实现的,并且所述系统应用程序必须由平台证书签名才能使用它所需的多个系统权限(frameworkLevel =“signature | privileged”在frameworks / base / core /中RES / AndroidManifest.xml中)。将要访问它的应用程序需要通过我的公司证书(不同于平台证书)进行签名,因此AFAIK服务需要远程并导出。应用程序将使用messenger跨进程与服务进行通信(尽管AIDL也是一种选项)。
问题:
如何将导出的系统服务锁定到我公司的应用程序?
我已经不得不为我公司的另一个项目的应用程序实现自定义SELinux域,因此SELinux策略解决方案(例如,只允许给定SELinux域的成员绑定到给定服务)将是理想的。
答案 0 :(得分:1)
如果我了解你的情况,你有:
系统应用内的服务,因此它具有系统应用权限。
需要与此服务通信的应用,您知道如何为他们创建单独的selinux域。
在这种情况下,您可以使用与应用程序相同的selinux上下文和具有系统权限的域套接字在init.rc中实现服务。现在,只有您的应用程序可以访问init.rc服务,该服务可以使用套接字与Java服务进行通信。