hangzh

 

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造成的问题。

posted on 2023-02-20 14:43  TxNICE  阅读(45)  评论(0)    收藏  举报

导航