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权限域中

相关推荐
AFinalStone2 小时前
Android 7系统异常问题排查(四)Framework层(上)—System Server Watchdog
android·系统异常
宝杰X74 小时前
Android Room3 多平台数据库
android·数据库
huibin1478523697 小时前
热缓解学习记录
android·学习
小田的博客10 小时前
SAP MM 供应商银行主数据更新报错!message R1228!
android·java·服务器
一笑的小酒馆11 小时前
Android智能猫砂盆视频加载慢卡顿问题分析
android
只会cv的小前端12 小时前
七巧低代码服务端脚本使用方法
android·低代码·rxjava
12 小时前
Android 自定义 View 实战:从零打造工业级全向摇杆控件(OmniJoystickView)
android·kotlin·自定义view·摇杆控件
雨白13 小时前
深入理解 Kotlin 协程 (十一):以逸待劳,探秘 select 多路复用与并发安全策略
android·kotlin
hunterandroid15 小时前
[Android 从零到一] Android 深度链接与 App Links:从 URI Scheme 到可验证的应用跳转
android
我命由我1234517 小时前
Jetpack Compose - Material Design 断点范围、WindowSizeClass、针对不同屏幕尺寸创建预览、四类导航栏
android·java·开发语言·java-ee·kotlin·android jetpack·android runtime