自定义一个java service,并添加到系统服务中。
我们主要就是围绕:允许自定义的应用,将自定义的服务,添加到系统服务中。
具体selinux的配置如下:
假设自定义服务的包名为com.test.myservice
自定义的系统服务为test_myservice
1. 为服务添加selinux上下文
# service_contexts
# 给test_myservice关联一个test_myserver的上下文
test_myservice u:object_r:test_myserver:s0
定义和说明test_myserver
# service.te
type test_myserver, service_manager_type;
2. 为应用定义安全上下文
com.test.myservice本来就是system app,其实完全可以添加下面一句就完事儿:
allow system_app test_server:service_manager { find add };
但是如果这么做的话,就相当与允许了所有system_app来向系统注册test_server了,显然这样做是不合理的。
因此需要为com.test.myservice定义一个自己的selinux app上下文
# seapp_contexts
# 说明:
# user=system seinfo=platform 表示是系统应用,并有签名
# name: 应用包名
# domain:我们自己起的域名
# type:关联到system_app_data_file
user=system seinfo=platform name=com.test.myservice domain=testserver_app type=system_app_data_file
user=_app, seinfo=untrusted
untrusted_app 第三方app,没有Android平台签名,没有system权限;
user=_app, seinfo=platform
platform_app 有Android平台签名,没有system权限;
user=system, seinfo=platform
system_app 有android平台签名和system权限。
# testserver_app.te
type testserver_app, domain, coredomain;
# app_domain是一个宏定义,在public/te_macros中,
# 这个宏主要给我们填写的参数关联到appdomain, 系统的Selinux会给appdomain定义一系列权限和规则
app_domain(testserver_app)
allow testserver_app test_server:service_manager { find add };
3. 编译
将上面的四个文件放到某个目录下,比如/device/test/sepolicy/mytest/下,
在.mk中追加:
BOARD_SEPOLICY_DIRS := \
device/test/sepolicy/mytest
make selinux_policy