Android 5.x 权限问题解决方法
android 5.x开始,引入了非常严格的selinux权限管理机制,我们经常会遇到因为selinux权限问题造成的各种avc denied困扰。
遇见权限问题,在log中一定会打印avc denied提示缺少什么权限,例如:
1 audit(0.0:67): avc: denied { write } for path="/dev/block/vold/93:96"
dev="tmpfs" ino=1263 scontext=u:r:kernel:s0 tcontext=u:object_r:block_device:s0 tclass=blk_file permissive=0
分析过程:
缺少什么权限: { write }权限, 谁缺少权限: scontext=u:r:kernel:s0, 对哪个文件缺少权限: tcontext=u:object_r:block_device 什么类型的文件: tclass=blk_file
解决方法:kernel.te
allow kernel block_device:blk_file write;
总结得到万能公式如下:
| scontext | tcontext | tclass | avc denied的权限 | |
| allow |
kernel
|
block_device
|
blk_file |
write
|
补充说明:
1. 有时候avc denied的log不是一次性显示所有问题,要等你解决一个权限问题之后,才会提示另外一个权限问题。比如提示确实某个目录的read权限,你加入read之后,再显示缺少write权限,要你一次次一次试,一次一次加。
这时你可以简单粗暴写个rw_dir_perms,这个权限包含了{open search write ...}等等很多权限。
2. 要加入的权限很多时,可以用中括号,比如
allow engsetmacaddr vfat:dir { search write add_name create};
3. 遇到问题不确定是否由于selinux问题造成,可先在adb shell 下,输入setenforce 0,让selinux失效,看是否问题还出现。以此可以澄清是非selinux造成的问题。
浙公网安备 33010602011771号