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