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