android之selinux问题解决记录 一

简述

主要是使用第三方应用来读写usb设备中的mode值,遇到的selinux权限问题的处理;

流程分析

当logcat日志中有avc:denied关键字段打印时,说明存在selinux问题

1.读取

读取配置中的mode值时,第一次出现了日志信息如下所示

avc: denied { open } for path="/sys/devices/platform/soc/xxxxxx.ssusb/mode" dev="sysfs" 
ino=40085 scontext=u:r:untrusted_app:s0:c78,c256,c512,c768 
tcontext=u:object_r:sysfs:s0 tclass=file permissive=0 app=com.example.test

配置allow语句

allow untrusted_app sysfs:file open;

第二次读取时,日志打印信息如下所示,说明还是需要配置其他selinux权限

avc: denied { getattr } for path="/sys/devices/platform/soc/xxxxxx.ssusb/mode" dev="sysfs" ino=40085 scontext=u:r:untrusted_app:s0:c78,c256,c512,c768 
tcontext=u:object_r:sysfs:s0 tclass=file permissive=0 app=com.example.test

增加getattr权限,配置allow语句

allow untrusted_app sysfs:file { open getattr };

再次执行读取时,此时没有avc相关的报错,读取ok。

2.写入

执行写入数据时,有logcat 日志打印如下所示

 avc: denied { write } for name="mode" dev="sysfs" ino=40156 scontext=u:r:untrusted_app:s0:c78,c256,c512,c768 
 tcontext=u:object_r:sysfs:s0 tclass=file permissive=0 app=com.example.test

增加write权限,配置allow语句

allow untrusted_app sysfs:file { open getattr write };

3.总结

使用直观的语句表达如下

 avc: denied { 操作权限 } for name="mode" dev="sysfs" ino=40156 scontext=u:r:主体type:s0:c78,c256,c512,c768 tcontext=u:object_r:客体type:s0 tclass=客体类别 permissive=0 app=com.example.test

使用allow语句描述如下

allow 主体type 客体type:客体类别 {操作权限}

需要将allow语句放到untrusted_app.te中

在这里插入图片描述需要处理的是以下四个文件
./private/untrusted_app.te
./public/untrusted_app.te
./prebuilts/api/29.0/private/untrusted_app.te
./prebuilts/api/29.0/public/untrusted_app.te
其中29代表当前系统版本,
在以上的te中加入

allow untrusted_app sysfs:file { open getattr write };

编译验证

make selinux_policy
将编译好的文件push到对应的设备目录下

  adb push ./out/target/product/xxxxxx/system/etc/selinux/* /system/etc/selinux/
  adb push ./out/target/product/xxxxxx/vendor/etc/selinux/* /vendor/etc/selinux/
  adb push ./out/target/product/xxxxxx/system/product/etc/selinux/* /system/product/etc/selinux/

相关推荐

  1. Android Selinux详解[]---整体介绍

    2024-07-18 18:08:03       38 阅读
  2. Android问题记录

    2024-07-18 18:08:03       39 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-07-18 18:08:03       53 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-07-18 18:08:03       55 阅读
  3. 在Django里面运行非项目文件

    2024-07-18 18:08:03       46 阅读
  4. Python语言-面向对象

    2024-07-18 18:08:03       56 阅读

热门阅读

  1. NSGA和MOGA 算法的异同点

    2024-07-18 18:08:03       21 阅读
  2. linux中创建一个循环定时器(C++)

    2024-07-18 18:08:03       19 阅读
  3. 关于HDFS、Hive和Iceberg

    2024-07-18 18:08:03       20 阅读
  4. Leetcode 3218. Minimum Cost for Cutting Cake I

    2024-07-18 18:08:03       18 阅读
  5. 优选算法之滑动窗口(上)

    2024-07-18 18:08:03       15 阅读
  6. Vite的WebSocket

    2024-07-18 18:08:03       18 阅读