android SELinux权限适配

抓log方法,

  1. setenforce 0,

    如果不先将selinux设置为permission mode,会导致一个问题。

    程序运行的时候遇到权限策略限制(假设 sepolicy 1),程序运行失败。添加权限(sepolicy 1),然后编译,刷机,重新验证。这时候又遇到(sepolicy 2)的权限策略,又需要进行添加权限的设置。如果程序需要多个权限,就需要反复进行设置权限。影响效率。

    对于将selinux设置为permission mode,分二种方法:1,执行setenforce 0命令即可。2,修改init代码,在初始化的时候设置为permission mode,不同版本方式不一样。

  2. run your apk,
    运行相关的程序,尽可能将程序可能申请的权限相关的代码都执行,防止漏申请相关的权限。只能根据程序log来判断到底需要什么权限。无法申请所有的权限。需要验证user userdebug eng 等不同的版本。

  3. Capture error log,
    抓去完整的 kernel log和logcat,过滤其中的avc 关键字log

  4. analysis log.
    根据log中的信息,添加对应的sepolicy。对于大部分情况,可以使用如下的方法添加权限,注意对应位置(颜色已经标记)
    This error need this permission W/wpa_cli ( 1354): type=1400 audit(0.0:7): avc: denied { search } for name="wifi" dev="mmcblk0p32" ino=145742 scontext=u:r:mmi:s0 tcontext=u:object_r:wifi_data_file:s0 tclass=dir permissive=0
    allow mmi wifi_data_file:dir search;
    也可以使用命令方式,使用linux工具,自动生成权限语句,类似如下
    adb shell dmesg | grep avc | audit2allow

5.编译

编译和验证

make -j4 selinux_policy

adb push ./system/etc/selinux/* /system/etc/selinux/

adb push ./vendor/etc/selinux/* /vendor/etc/selinux/

6.编译遇到neverallow问题解决

遇到neverallow问题需要自定义权限域,如下是添加到vendor_sysfs_usb_supply权限域中

相关推荐
CANI_PLUS4 小时前
ESP32将DHT11温湿度传感器采集的数据上传到XAMPP的MySQL数据库
android·数据库·mysql
来来走走5 小时前
Flutter SharedPreferences存储数据基本使用
android·flutter
安卓开发者6 小时前
Android模块化架构深度解析:从设计到实践
android·架构
雨白6 小时前
HTTP协议详解(二):深入理解Header与Body
android·http
阿豪元代码7 小时前
深入理解 SurfaceFlinger —— 如何调试 SurfaceFlinger
android
阿豪元代码7 小时前
深入理解 SurfaceFlinger —— 概述
android
CV资深专家8 小时前
Launcher3启动
android
stevenzqzq9 小时前
glide缓存策略和缓存命中
android·缓存·glide
雅雅姐9 小时前
Android 16 的用户和用户组定义
android
没有了遇见9 小时前
Android ConstraintLayout 之ConstraintSet
android