Android Q Selinux 权限添加

论坛 期权论坛 编程之家     
选择匿名的用户   2021-6-2 16:30   1672   0

本文转载自huangrongrui

http://192.168.30.26:200/index.php?doc-view-43682

一、权限问题
如下遇到的权限问题,log中的TAG是 avc,如下是log:
avc: denied { append } for pid=8317 comm=”RenderThread” name=”glsl_shader_log.txt” dev=”mmcblk0p35” ino=4077 scontext=u:r:system_app:s0 tcontext=u:object_r:system_data_file:s0 tclass=file permissive=0
如果发现是上面log,怎基本可以确定是权限问题,如果还想再进一步确认,可以通过执行
adb shell setenforce 0将权限放开,如果放开后,你的问题已不出现,就进一步说明了是权限导致的改问题。

二、分析
1.缺少的权限:denied { append }
2.哪个缺少权限(就是对应的哪个 te 文件):scontext=u:r:system_app:s0
3.对谁缺少权限(就是对哪个文件/目录等缺少操作的权限):tcontext=u:object_r:system_data_file:s0
4.上述的是具体类型(文件/目录):tclass=file

三、解决方法:
赋予 system_app (系统app)对 文件(file)类型 system_data_file 有append的权限
1.找到 system_app.te 文件
2.文件中添加内容:
allow system_app system_data_file:file { append }

四、新增加一个目录,我们如何定义及添加权限,以下以增加data/faces目录,并添加相应的权限为例:
要在这个目录下保存一些数据,需要做一些权限的处理。具体在device/qcom/sepolicy仓下,涉及下面四个文件
1,device/qcom/sepolicy/private/file.te
在该文件下做了类型定义
type face_data_file, file_type, data_file_type, core_data_file_type;
2,device/qcom/sepolicy/private/file_contexts
改文件中定义了人脸相关字段
/data/faces(/.*)? u:object_r:face_data_file:s0
3,device/qcom/sepolicy/private/platform_app.te
该文件下需要添加如下权限:
allow platform_app face_data_file:file { create write open getattr read };
allow platform_app face_data_file:dir { create read open getattr search write };

4,device/qcom/sepolicy/private/system_app.te
该文件下需要添加如下权限:
allow system_app face_data_file:file { create write open getattr read setattr unlink };
allow system_app face_data_file:dir { create read open getattr search write add_name remove_name setattr unlink};
通过以上操作,该目录下就可以保存一些数据了。

五、添加完权限如何编译验证?
android 8.0及以后,android根目录下执行 make selinux_policy,会输出到
out/target/product/XXXX/system/etc/selinux 和 out/target/product/XXXX/vendor/etc/selinux
push上述两个目录的所有文件到system/etc/selinux和vendor/etc/selinux目录 重启手机即可。

分享到 :
0 人收藏
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:3875789
帖子:775174
精华:0
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP