您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 管理学资料 > Android5x权限问题解决方法
Android5.x权限问题解决方法Android5.x权限问题解决方法Copyright©2015AllwinnerTechnology.AllRightsReserved.IRevisionHistoryVersionDateSection/PageChangescomparedtopreviousissueV1.02015-10-13RiverinitialversionAndroid5.x权限问题解决方法Copyright©2015AllwinnerTechnology.AllRightsReserved.2一、android5.x开始,引入了非常严格的selinux权限管理机制,我们经常会遇到因为selinux权限问题造成的各种avcdenied困扰。本文结合具体案例,讲解如何根据log来快速解决90%的权限问题。遇到权限问题,在logcat或者kernel的log中一定会打印avcdenied提示缺少什么权限,Command:cat/proc/kmsg|grepavc或dmesg|grepavc解决原则是:缺什么补什么,一步一步补到没有avcdenied为止。下面给出四个案例:1.audit(0.0:67):avc:denied{write}forpath=/dev/block/vold/93:96dev=tmpfsino=1263scontext=u:r:kernel:s0tcontext=u:object_r:block_device:s0tclass=blk_filepermissive=0分析过程:缺少什么权限:{write}权限,谁缺少权限:scontext=u:r:kernel:s0,对哪个文件缺少权限:tcontext=u:object_r:block_device什么类型的文件:tclass=blk_file解决方法:kernel.teallowkernelblock_device:blk_filewrite;2.audit(0.0:53):avc:denied{execute}forpath=/data/data/com.mofing/qt-reserved-files/plugins/platforms/libgnustl_shared.sodev=nandlino=115502scontext=u:r:platform_app:s0tcontext=u:object_r:app_data_file:s0tclass=filepermissive=0解决方法:platform_app.teallowplatform_appapp_data_file:fileexecute;3.audit(1444651438.800:8):avc:denied{search}forpid=158comm=setmacaddrname=/dev=nandiino=1scontext=u:r:engsetmacaddr:s0tcontext=u:object_r:vfat:s0tclass=dirpermissive=0解决方法:engsetmacaddr.teallowengsetmacaddrvfat:dir{searchwriteadd_namecreate};或者allowengsetmacaddrvfat:dircreate_dir_perms;Android5.x权限问题解决方法Copyright©2015AllwinnerTechnology.AllRightsReserved.34.audit(1441759284.810:5):avc:denied{read}forpid=1494comm=sdcardname=0dev=nandkino=245281scontext=u:r:sdcardd:s0tcontext=u:object_r:system_data_file:s0tclass=dirpermissive=0解决方法:sdcardd.teallowsdcarddsystem_data_file:dirread;或者allowsdcarddsystem_data_file:dirrw_dir_perms(rw_dir_perms包含readwrite,可以参考external/sepolicy/global_macros的定义声明)通过这四个案例,我们可以总结出一般规律,以第4个为例允许某个scontext对某个tcontext拥有某个权限我们的log重新排列一下,scontext=u:r:sdcarddtcontext=u:object_r:system_data_file:s0tclass=diravc:denied{read}得到万能套用公式如下:在scontext所指的te文件中加入类似如下内容:以上以.te为后缀的文件都在external/sepolicy/或者device/softwinner/xxxx-commm/sepolicy/下,修改之后,都要重刷boot.img。补充说明:1.有时候avcdenied的log不是一次性显示所有问题,要等你解决一个权限问题之后,才会提示另外一个权限问题。比如提示确实某个目录的read权限,你加入read之后,再显示缺少write权限,要你一次次一次试,一次一次加。这时你可以简单粗暴写个rw_dir_perms,这个权限包含了{opensearchwrite...}等等很多权限。可以查看external/sepolicy/global_macros来了解更多权限声明;2.要加入的权限很多时,可以用中括号,比如allowengsetmacaddrvfat:dir{searchwriteadd_namecreate};3.遇到问题不确定是否由于selinux问题造成,可先在adbshell下,输入setenforce0,让selinux失效,看是否问题还出现。以此可以澄清是非selinux造成的问题。Android5.x权限问题解决方法Copyright©2015AllwinnerTechnology.AllRightsReserved.4二、以上基本是对已经存在的进程增加权限,但对第三方进程改如何新增一个全新的te文件并赋予权限呢?以写mac地址的setmacaddr执行文件为例(这个执行档android原生不存在,自行添加的):1.在external/sepolicy/file_contexts中,参考其他进程声明一个:/system/bin/install-recovery.shu:object_r:install_recovery_exec:s0/system/bin/dex2oatu:object_r:dex2oat_exec:s0/system/bin/patchoatu:object_r:dex2oat_exec:s0/system/bin/setmacaddru:object_r:engsetmacaddr_exec:s0指定setmacaddr的路径,并指定一个名字,一定要以_exec结尾2.参考其他文件在external/sepolicy/创建engsetmacaddr.te文件,内容如下:typeengsetmacaddr,domain;typeengsetmacaddr_exec,exec_type,file_type;init_daemon_domain(engsetmacaddr)allowengsetmacaddrvfat:dir{searchwriteadd_namecreate};allowengsetmacaddrvfat:file{createreadwriteopen};allowengsetmacaddrengsetmacaddr:capabilitydac_override;allowengsetmacaddrshell_exec:file{executereadopenexecute_no_trans};allowengsetmacaddrsystem_data_file:dir{writeadd_nameremove_name};allowengsetmacaddrsystem_data_file:file{createexecute_no_transwriteopensetattr};allowengsetmacaddrsystem_file:file{execute_no_trans};以上赋予的权限全部是根据avcdenied的log缺什么一步一步补什么来的。
本文标题:Android5x权限问题解决方法
链接地址:https://www.777doc.com/doc-2897154 .html