Android 获得对一个设备节点的访问权限

Android 获得对设备节点的访问权限

       Android 5.0 下,因为采取了 SEAndroid/SElinux 的安全机制,即使拥有 root权限,或者对某内核节点设置为 777 的权限,仍然无法在 JNI 层访问。
       本文将以用户自定义的内核节点 /dev/wf_bt 为例,手把手教会读者如何在 JNI 层获得对该节点的访问权限。

可分为以下四个步骤:
  • 第一步:找到需要访问该内核节点的进程(process),假设这个节点由 system_server 进程来访问。
  • 第二步:打开文件 mydroid/external/sepolicy/file_contexts,仿照这个文件里的写法,为你的节点定义一个你想要的名字,如下:
/dev/watchdog       u:object_r:watchdog_device:s0
/dev/xt_qtaguid u:object_r:qtaguid_device:s0
/dev/zero       u:object_r:zero_device:s0
/dev/__kmsg__       u:object_r:klog_device:s0
/dev/__properties__ u:object_r:properties_device:s0
# example
/dev/wf_bt      u:object_r:wf_bt_device:s0  

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

  • 第三步:打开文件 mydroid/external/sepolicy/device.te ,仿照这个文件里的写法,将刚刚第二步写的wf_bt_device 声明为 dev_type:
type video_device, dev_type;
type vcs_device, dev_type;
type zero_device, dev_type;
type fuse_device, dev_type;
type iio_device, dev_type;
type ion_device, dev_type, mlstrustedobject;
type gps_device, dev_type;
type qtaguid_device, dev_type;
type watchdog_device, dev_type;
type uhid_device, dev_type;
type uio_device, dev_type;
type tun_device, dev_type, mlstrustedobject;
type usbaccessory_device, dev_type;
type usb_device, dev_type;
type klog_device, dev_type;
type properties_device, dev_type;
# example
type wf_bt_device, dev_type;  
  • 第四步:打开文件夹 mydroid/external/sepolicy/ ,你会发现有许多以进程名字命名的te文件:
    mydroid/external/sepolicy/

       在第一步中,这个节点是由 system_server 进程来访问,于是我们找到 system_server.te 打开,加入允许这个进程对 /dev/wf_bt 设备节点的读写权限:

# Allow system server to search and write to the persistent factory reset
# protection partition. This block device does not get wiped in a factory reset.
allow system_server block_device:dir search;
allow system_server frp_block_device:blk_file rw_file_perms;
allow system_server input_device:dir r_dir_perms;
allow system_server input_device:chr_file rw_file_perms;

# chr_file表示字符设备文件,如果是普通文件用file,目录请用dir  
# rw_file_perms代表读写权限  
# example
allow system_server wf_bt_device:chr_file rw_file_perms;  //允许 system_server 进程拥有对 wf_bt_device 的这个字符设备的读写权限;

     这句话的意思是:允许 system_server 进程拥有对 wf_bt_device 的这个字符设备的读写权限。修改完后重新编译 mmm external/sepolicy -B,然后再重新生成刷机包,刷机测试。

  • 1
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值