当前位置: 首页 > news >正文

解决JNI操作内核节点出现写操作失败的问题

Android 9.0下,因为采取了SEAndroid/SElinux的安全机制,即使拥有root权限,或者对某内核节点设置为777的权限,仍然无法在JNI层访问。

本文将以用户自定义的内核节点/dev/wf_bt为例,手把手教会读者如何在JNI层获得对该节点的访问权限。

一、找到进程名

找到需要访问该内核节点的进程(process),笔者自己这个节点由system_server进程来访问

二、修改file_contexts.te

打开文件device\mediatek\xxx[芯片]\sepolicy\basic\file_contexts.te或file_contexts

仿照这个文件里的写法,为你的节点定义一个你想要的名字:

  1. dev/tegra.* u:object_r:video_device:s0  
  2. /dev/tf_driver u:object_r:tee_device:s0  
  3. /dev/tty u:object_r:owntty_device:s0  
  4. /dev/tty[0-9]* u:object_r:tty_device:s0  
  5. # We add here  
  6. /dev/wf_bt              u:object_r:wf_bt_device:s0  

wf_bt_device是自定义,其他左右两边的内容都和上面的范例一致。

三、修改device.te

打开文件\device\mediatek\xxx[芯片]\sepolicy\basic\device.te

仿照这个文件里的写法,将刚刚第二步写的wf_bt_device声明为dev_type:

 

  1. # Device types  
  2. type device, dev_type, fs_type;  
  3. type alarm_device, dev_type, mlstrustedobject;  
  4. type adb_device, dev_type;  
  5. type ashmem_device, dev_type, mlstrustedobject;  
  6. type audio_device, dev_type;  
  7. type binder_device, dev_type, mlstrustedobject;  
  8. type block_device, dev_type;  
  9. # We add here  
  10. type wf_bt_device, dev_type;  

 

四、修改进程te文件

AndroidL/android/external/sepolicy/目录下很多.te文件都是以进程名来结尾的,比如有针对surfaceflinger进程的surfaceflinger,有针对vold进程的vold.te,

刚刚从第一步得到,这个节点是由system_server进程来访问,所以,我们找到system_server.te打开,加入允许这个进程对/dev/wf_bt的读写权限,

  1. # Read/Write to /proc/net/xt_qtaguid/ctrl and and /dev/xt_qtaguid.  
  2. allow system_server qtaguid_proc:file rw_file_perms;  
  3. allow system_server qtaguid_device:chr_file rw_file_perms;  
  4.   
  5. # chr_file表示字符设备文件,如果是普通文件用file,目录请用dir  
  6. # rw_file_perms代表读写权限  
  7. // 允许system_server进程拥有对wf_bt_device的这个字符设备的读写权限;
  8. //第一种写法
  9. allow system_server wf_bt_device:chr_file rw_file_perms;  
  10. //第二种写法
  11. allow system_server wf_bt_device:file {open write read};

第五步:全编烧录 

http://www.lryc.cn/news/17979.html

相关文章:

  • 纵然是在产业互联网的时代业已来临的大背景下,人们对于它的认识依然是短浅的
  • 干翻 nio ,王炸 io_uring 来了 !!(图解+史上最全)
  • ur3+robotiq ft sensor+robotiq 2f 140+realsense d435i配置rviz,gazebo仿真环境
  • ASP.NET Core MVC 项目 AOP之Authorization
  • 智能新冠疫苗接种助手管理系统
  • Python+Selenium4元素交互1_web自动化(5)
  • 2023双非计算机硕士应战秋招算法岗之深度学习基础知识
  • Python opencv进行矩形识别
  • 网安入门必备的12个kali Linux工具
  • 【测试面试】头条大厂,测试开发岗真实一面。你能抵得住吗?
  • 分享app的测试技巧
  • HTML 基础【快速掌握知识点】
  • SpringBoot入门(二)
  • 大数据|大数据基础(概念向)
  • 若依配置教程(九)若依前后端分离版部署到服务器Nginx(Windows版)
  • 【仔细理解】计算机视觉基础1——特征提取之Harris角点
  • Elasticsearch7.8.0版本进阶——近实时搜索
  • OAK相机深度流探测草莓距离
  • 文件共享服务器(CIFS)的相关知识及指令
  • springcloud-2service consumer
  • JavaScript 进阶--charater3
  • Solon2 之基础:三、启动参数说明
  • 引入防关联浏览器以防止数据盗窃
  • Spring的一些知识点
  • 使用WordPress快速搭建外贸网站教程
  • 在 vue 或 react 项目中使用 mockjs 搭建 mock server
  • 【十一届蓝桥杯】
  • vm 网络配置
  • 2023年CDGA考试-第11章-数据仓库和商务智能(含答案)
  • 从0-1搭建流媒体系统之live555 安装、运行、转发、拉流