Android 5.0 SEAndroid下如何获得对一个内核节点的访问权限
生活随笔
收集整理的這篇文章主要介紹了
Android 5.0 SEAndroid下如何获得对一个内核节点的访问权限
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
Android 5.0下,因?yàn)椴扇×薙EAndroid/SElinux的安全機(jī)制,即使擁有root權(quán)限,或者對某內(nèi)核節(jié)點(diǎn)設(shè)置為777的權(quán)限,仍然無法在JNI層訪問。
本文將以用戶自定義的內(nèi)核節(jié)點(diǎn)/dev/wf_bt為例,手把手教會讀者如何在JNI層獲得對該節(jié)點(diǎn)的訪問權(quán)限。
第一步:找到需要訪問該內(nèi)核節(jié)點(diǎn)的進(jìn)程(process),筆者自己這個(gè)節(jié)點(diǎn)由system_server進(jìn)程來訪問
第二步:打開文件AndroidL/android/external/sepolicy/file_contexts.be 仿照這個(gè)文件里的寫法,為你的節(jié)點(diǎn)定義一個(gè)你想要的名字: [python]?view plain?copy?/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是自定義,其他左右兩邊的內(nèi)容都和上面的范例一致。
第三步:打開文件AndroidL/android/external/sepolicy/device.te 仿照這個(gè)文件里的寫法,將剛剛第二步寫的wf_bt_device聲明為dev_type: [python]?view plain?copy?#?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文件都是以進(jìn)程名來結(jié)尾的,比如有針對surfaceflinger進(jìn)程的surfaceflinger,有針對vold進(jìn)程的vold.te, 剛剛從第一步得到,這個(gè)節(jié)點(diǎn)是由system_server進(jìn)程來訪問,所以,我們找到system_server.te打開,加入允許這個(gè)進(jìn)程對/dev/wf_bt的讀寫權(quán)限,
[python]?view plain?copy?#?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表示字符設(shè)備文件,如果是普通文件用file,目錄請用dir?? #?rw_file_perms代表讀寫權(quán)限?? allow?system_server?wf_bt_device:chr_file?rw_file_perms;??
這句話的意思是:允許system_server進(jìn)程擁有對wf_bt_device的這個(gè)字符設(shè)備的讀寫權(quán)限。
改了這些之后,你就可以make installclean;make -j16編譯image來驗(yàn)證權(quán)限是否獲取成功。
fd =open("/dev/wf_bt",O_RDONLY | O_NOCTTY); 絕對成功!!!!!
第一步:找到需要訪問該內(nèi)核節(jié)點(diǎn)的進(jìn)程(process),筆者自己這個(gè)節(jié)點(diǎn)由system_server進(jìn)程來訪問
第二步:打開文件AndroidL/android/external/sepolicy/file_contexts.be 仿照這個(gè)文件里的寫法,為你的節(jié)點(diǎn)定義一個(gè)你想要的名字: [python]?view plain?copy?
第三步:打開文件AndroidL/android/external/sepolicy/device.te 仿照這個(gè)文件里的寫法,將剛剛第二步寫的wf_bt_device聲明為dev_type: [python]?view plain?copy?
第四步: AndroidL/android/external/sepolicy/目錄下很多.te文件都是以進(jìn)程名來結(jié)尾的,比如有針對surfaceflinger進(jìn)程的surfaceflinger,有針對vold進(jìn)程的vold.te, 剛剛從第一步得到,這個(gè)節(jié)點(diǎn)是由system_server進(jìn)程來訪問,所以,我們找到system_server.te打開,加入允許這個(gè)進(jìn)程對/dev/wf_bt的讀寫權(quán)限,
[python]?view plain?copy?
fd =open("/dev/wf_bt",O_RDONLY | O_NOCTTY); 絕對成功!!!!!
總結(jié)
以上是生活随笔為你收集整理的Android 5.0 SEAndroid下如何获得对一个内核节点的访问权限的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 深入理解SELinux SEAndroi
- 下一篇: Android4.2.2源码目录结构分析