Android SELinux开发入门指南之如何增加Native Binder Service权限
前言
Android的妈咪谷歌为了解决Android系统一直让人诟病的安全问题,在Android 4.4以后强制引入了SELinux安全管理。SELinux虽然可以将安全提升一个层级,但是有时候的实际效果确实杀敌一千,自损八百给开开发造成许多的困难。Android Binder的重要性,这个无需多言了,为了开发的必要性我们经常需要添加一些Native Binder Service来实施一些功能,但是经常会出现下述截图中的一些avc denied的错误,如下:
注意:这里的实际操作是在Android 8版本上面进行的。
正式开干
上述就以如下实际案例例说明,这里的错误主要是添加一个Native Binder Service时被SELinux拦截导致,提示如下错误信息:
E/SELinux ( 261): avc: denied { add } for service=PaxApiService scontext=u:r:init:s0 tcontext=u:object_r:default_android_service:s0 tclass=service_manager
这个错误主要是Android ServiceManager添加Native Service没有配置SELinux权限导致,伪代码如下:
sp<IServiceManager> sm = defaultServiceManager();
status_t ret = 0;
if (srv == NULL) {
setEventCB(putEvent);
srv = new PaxApiService();
ret = sm->addService(String16("PaxApiService"), srv);
}
由于现在手头上SELinux的启用是在展讯平台,所以这里就以以展讯平台来说明,其具体的步骤如下,读者可以根据实际情况切换成你实际开发的相关目录或者文件夹:
1. vi编辑device/sprd/sharkle/common/plat_sepolicy/private/service_contexts在其最后添加如下规则:
#add for PaxApiService
PaxApiService u:object_r:PaxApiService_service:s0
2. vi编辑device/sprd/sharkle/common/plat_sepolicy/public/service.te在其最后添加如下规则:
#type for PaxApiService
type PaxApiService_service, service_manager_type;
3. vi编辑device/sprd/sharkle/common/sepolicy/system_server.te在其最后添加如下规则:
#add for PaxApiService
allow system_server PaxApiService_service:service_manager { add find };
4. vi编辑device/sprd/sharkle/common/sepolicy/platform_app.te在其最后添加如下规则:
#add for PaxService
allow platform_app PaxApiService_service:service_manager { find };
5. 最后根据在使用中报什么avc的错误,然后再按照规则添加相关规则,即将上述改动添加完成以后,编译vendorimage,然后烧录启动测试,根据logcat -b evnets | grep avc查看还有什么没有SELinux权限问题的。
结语
修行至此,恭喜读者你已经开启了Android SELinux开发入门指南之如何增加Native Binder Service权限征程,此时的你对于添加Native Binder Service已经是了然于心了,畅通无阻,来去无踪影了。此时的你可以一剑走天下了,为师的必杀器已经倾囊相授了。各位江湖见。
写在最后
各位读者看官朋友们,Android SELinux开发入门指南之如何增加Native Binder Service权限问题已经全部完毕,希望能吸引你,激活发你的学习欲望和斗志。在最后麻烦读者朋友们如果本篇对你有帮助,关注和点赞一下,当然如果有错误和不足的地方也可以拍砖。
来源:CSDN
作者:进阶的凯子
链接:https://blog.csdn.net/tkwxty/article/details/104047701