SElinux权限配置

运行[email protected]时错误Log如下:
avc: denied { add } for interface=vendor.test.biometrics::ITestFingerprint pid=7848 scontext=u:r:shell:s0 tcontext=u:object_r:default_android_hwservice:s0 tclass=hwservice_manager

Log分析:
缺少什么权限:add
谁缺少该权限:shell
对谁缺少权限:default_android_hwservice
什么类型文件:hwservice_manager

解决方法:system/sepolicy/public/shell.te文件中添加如下语句后编译boot.img:
allow shell default_android_hwservice:hwservice_manager add;

在修改后编译boot.img中会出现以下错误:
在这里插入图片描述在system/ sepolicy/ public/domain.te文件的431行有如下语句:
在这里插入图片描述neverallow * default_android_hwservice:hwservice_manager {add find};该句表明任何情况下default_android_hwservice:hwservice_manager是没有add和find权限的,所以我们无法在shell.te中给default_android_hwservice:hwservice_manager添加add的权限。
解决方法有以下两种,任选其一:
1、 将该句注释,注释方法为语句前加‘#’
2、 将该语句修改为neverallow { domain –shell } default_android_hwservice:hwservice_manager {add find};意思是将shell从限制范围中剔除

权限2
在修改第一个权限问题后,会看到第二个权限问题,错误Log如下:

avc: denied { add } for interface=android.hidl.base::IBase pid=7807 scontext=u:r:shell:s0 tcontext=u:object_r:hidl_base_hwservice:s0 tclass=hwservice_manager

Log分析:
缺少什么权限:add
谁缺少该权限:shell
对谁缺少权限:hidl_base_hwservice
什么类型文件:hwservice_manager

解决方法:system/sepolicy/public/shell.te文件中添加如下语句后编译boot.img:
allow shell hidl_base_hwservice:hwservice_manager add;

权限3
接下来运行InlineTool会遇到如下错误:
avc: denied { find } for interface=vendor.test.biometrics::ITest pid=7642 scontext=u:r:system_app:s0 tcontext=u:object_r:default_android_hwservice:s0 tclass=hwservice_manager

Log分析:
缺少什么权限:find
谁缺少该权限:system_app
对谁缺少权限:default_android_hwservice
什么类型文件:hwservice_manager

解决方法:system/sepolicy/public/system_app.te文件中添加如下语句后编译boot.img:
allow system_app default_android_hwservice:hwservice_manager find;

注意:如果在解决权限1的时候选择的是neverallow { domain –shell } default_android_hwservice:hwservice_manager {add find};这种方法,那么还需要将system_app也添加进剔除范围,语句修改为neverallow { domain –shell –system_app } default_android_hwservice:hwservice_manager {add find};

权限4
在运行InlineTool时会有一个warning错误,不修改InlineTool也能运行,Log如下:
avc: denied { write } for name=“com.example.test.inlinetest-Pxcz69d5LwhVYssdki7kDw==” dev=“dm-1” ino=474210 scontext=u:r:system_app:s0 tcontext=u:object_r:apk_data_file:s0 tclass=dir permissive=0

Log分析:
缺少什么权限:write
谁缺少该权限:system_app
对谁缺少权限:apk_data_file
什么类型文件:dir

解决方法:system/sepolicy/public/system_app.te文件中添加如下语句后编译boot.img:
allow system_app apk_data_file:dir write;

在修改后编译boot.img中会出现以下错误:
在这里插入图片描述
在system/sepolicy/private/app.te文件的436行有如下语句:
在这里插入图片描述
neverallow { appdomain -platform_app –system_app } apk_data_file:dir_file_class_set { create write setattr relabelfrom relabelto append unlink link rename };的语句中加入“-system_app”表示去除掉对system_app的限制,去除后即可编译出boot.img,warning也消除了。

补充说明
1、 权限问题的log有时候并不能一次显示出所有的问题,可能需要解决上一个问题之后才会显示出下一个权限问题。例如,第一次提示缺少read权限,当你添加完read权限后,才会显示还需要write权限。
2、 加入的权限较多时候可以使用{}。例如,如果权限4中需要read和write两个权限,可以用以下写法allow system_app apk_data_file:dir {read write};。
3、 可能在system/sepolicy/目录下存在多个同名.te文件,例如system_app.te在system/sepolicy/public和system/sepolicy/private这个两个目录下都存在,修改其中一个文件即可,文中选择了public目录下的system_app.te,达到了需求。

发布了108 篇原创文章 · 获赞 8 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/qq_33242956/article/details/101421189