Android SELinux avc dennied权限问题解决方法

这篇文字本人原创于2015年,并作为原厂发布文档release,当时并未上传博客,估计已经被很多网友发表了。

1. 概述

SELinuxGoogleandroid 5.0开始,强制引入的一套非常严格的权限管理机制,主要用于增强系统的安全性。

然而,在开发中,我们经常会遇到由于SELinux造成的各种权限不足,即使拥有“万能的root权限”,也不能获取全部的权限。本文旨在结合具体案例,讲解如何根据log来快速解决90%SELinux权限问题。

2. 调试确认SELinux问题

为了澄清是否因为SELinux导致的问题,可先执行:

setenforce 0 (临时禁用掉SELinux

getenforce  (得到结果为Permissive)

如果问题消失了,基本可以确认是SELinux造成的权限问题,需要通过正规的方式来解决权限问题。

遇到权限问题,在logcat或者kernellog中一定会打印avc denied提示缺少什么权限,可以通过命令过滤出所有的avc denied,再根据这些log各个击破:

cat /proc/kmsg | grep avc 

dmesg | grep avc

例如:

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

可以看到有avc denied,且最后有permissive=0,表示不允许。

3. 具体案例分析

解决原则是缺什么权限补什么,一步一步补到没有avc denied为止。

解决权限问题需要修改的权限文件如下位置,以.te结尾

AAndroid/devicesoftwinner/astar-common/sepolicy/*.te

BAndroid/external/sepolicy/*.te

其中,A是对Boverlay(覆盖),能在A修改的尽量在A修改,尽量避免修改B,修改B可能会导致CTS fail问题,修改A不会影响CTS测试。

(如果不需要深入了解,请直接跳到万能公这一章阅读更简洁)

下面给出四个案例:

案例1

评论 14
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值