Android Q Selinux 权限添加

本文转载自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目录 重启手机即可。

发布了31 篇原创文章 · 获赞 6 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/u012824529/article/details/102938284