在Android 5.0 SEAndroid下通过JNI访问一个内核节点

原创 2016年05月30日 18:29:01

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

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

第二步:打开文件AndroidL/android/external/sepolicy/file_contexts.be

仿照这个文件里的写法,为你的节点定义一个你想要的名字:
[python] view plain copy 在CODE上查看代码片派生到我的代码片

/dev/tegra.* u:object_r:video_device:s0  
/dev/tf_driver u:object_r:tee_device:s0  
/dev/tty u:object_r:owntty_device:s0  
/dev/tty[0-9]* u:object_r:tty_device:s0  
 We add here  
/dev/wf_bt              u:object_r:wf_bt_device:s0  

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

第三步:打开文件AndroidL/android/external/sepolicy/device.te

仿照这个文件里的写法,将刚刚第二步写的wf_bt_device声明为dev_type:
[python] view plain copy 在CODE上查看代码片派生到我的代码片

# Device types  
type device, dev_type, fs_type;  
type alarm_device, dev_type, mlstrustedobject;  
type adb_device, dev_type;  
type ashmem_device, dev_type, mlstrustedobject;  
type audio_device, dev_type;  
type binder_device, dev_type, mlstrustedobject;  
type block_device, dev_type; 
# We add here   
type wf_bt_device, dev_type;  

第四步:

AndroidL/android/external/sepolicy/目录下很多.te文件都是以进程名来结尾的,比如有针对surfaceflinger进程的surfaceflinger,有针对vold进程的vold.te,
刚刚从第一步得到,这个节点是由system_server进程来访问,所以,我们找到system_server.te打开,加入允许这个进程对/dev/wf_bt的读写权限,

[python] view plain copy 在CODE上查看代码片派生到我的代码片

# Read/Write to /proc/net/xt_qtaguid/ctrl and and /dev/xt_qtaguid.  
allow system_server qtaguid_proc:file rw_file_perms;  
allow system_server qtaguid_device:chr_file rw_file_perms;  
# chr_file表示字符设备文件,如果是普通文件用file,目录请用dir  
# rw_file_perms代表读写权限  
allow system_server wf_bt_device:chr_file rw_file_perms;  

这句话的意思是:允许system_server进程拥有对wf_bt_device的这个字符设备的读写权限。
改了这些之后,你就可以make installclean;make -j16编译image来验证权限是否获取成功。

fd =open(“/dev/wf_bt”,O_RDONLY | O_NOCTTY); 绝对成功!!!!!

版权声明:本文为博主原创文章,未经博主允许不得转载。

SEAndroid安全机制对Android属性访问的保护分析

Android系统通过属性暴露设备和运行时信息,并且可以通过设置属性来控制系统行为。因此,属性也像文件一样,是一种需要保护的资源。在启用SEAndroid之前,敏感属性只能被预先设定的进程进行设置。启...

Android 5.0 SEAndroid下如何获得对一个内核节点的访问权限

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

在Android 5.0 SEAndroid下通过JNI访问一个内核节点

Android 5.0下,因为采取了SEAndroid/SElinux的安全机制,即使拥有root权限,或者对某内核节点设置为777的权限,仍然无法在JNI层访问。  本文将以用户自定义的内核节点/d...
  • gnnulzy
  • gnnulzy
  • 2016年10月19日 09:38
  • 177

Android 5.x SEAndroid内核节点的读写权限

Android 5.x SEAndroid/SElinux内核节点的读写权限 Android 5.0下,因为采取了SEAndroid/SElinux的安全机制,即使拥有roo...

Android 5.x SEAndroid/SElinux内核节点的读写权限

Android 5.x下,因为采取了SEAndroid的安全机制,即使拥有root权限,或者对某内核节点设置为777的权限,仍然无法在JNI层访问。 本文将以用户自定义的内核节点/dev/wf_bt为...
  • tung214
  • tung214
  • 2015年03月19日 18:22
  • 6430

android在hal下 如何获得对一个内核节点的访问权限

Android 5.0以上,我们发现jni通过hal层去操作内核节点时PERMISSION DENIED 即使在Android源代码工程目录下,进入到system/core/rootdir目录,里面有...

Android 在 SElinux下 如何获得对一个内核节点的访问权限

2015-04-21 15:12 4234人阅读 评论(5) 收藏 举报  分类:   android-源码开发(79)  linux(133)  版权声明:本文为博主...

Android 在 SElinux下 如何获得对一个内核节点的访问权限

Android 5.0下,因为采取了SEAndroid/SElinux的安全机制,即使拥有root权限,或者对某内核节点设置为777的权限,仍然无法在JNI层访问。 本文将以用户自定义的内核节点...

Android 在 SElinux下 如何获得对一个内核节点的访问权限

转自http://blog.csdn.net/wh_19910525/article/details/45170755 Android 5.0下,因为采取了SEAndroid/SElinux的安...
  • gnnulzy
  • gnnulzy
  • 2016年09月28日 10:50
  • 238

Android 在 SElinux下 如何获得对一个内核节点的访问权限

Android 5.0下,因为采取了SEAndroid/SElinux的安全机制,即使拥有root权限,或者对某内核节点设置为777的权限,仍然无法在JNI层访问。 本文将以用户自定义的内核节点...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:在Android 5.0 SEAndroid下通过JNI访问一个内核节点
举报原因:
原因补充:

(最多只允许输入30个字)