SELinux之解决avc denied

安全增强型 Linux(Security-Enhanced Linux)简称 SELinux,它是 Linux 的一个安全子系统。SELinux 主要作用是最大限度地减小系统中服务进程可访问的资源(最小权限原则)。对资源的访问控制分为两类: DAC和MAC

SELinux工作模式

SELinux 有三种工作模式,分别为:
enforcing: 强制模式, 执行SELinux规则, 违反的行为会被阻止
permissive: 宽容模式, 执行SELinux规则, 违反的行不会被阻止
disabled: 关闭SELinux

adb shell setenforce 0 设置SELinux 成为permissive模式
adb shell setenforce 1 设置SELinux 成为enforcing模式
adb shell getenforce 获取SELinux状态(permissive,enforcing,disabled)

avc denied

在Android系统开发中, 可能会遇到SELinux的权限不足而引起的各种问题. 可以尝试将SELinux工作模式临时改为宽容模式看问题是否解决, 来判定是否是SELinux引起的问题

标志性 log: avc: denied { 操作权限 } for pid=7201 comm=“进程名” scontext=u:r:源类型:s0 tcontext=u:r:目标类型:s0 tclass=访问类型 permissive=0
源类型:授予访问的类型,通常是进程的域类型
目标类型:客体的类型,它被授权可以访问的类型
访问类型:客体的类可
操作权限:表示主体对客体访问时允许的操作类型(也叫做访问向量)。

举例

打开三方apk出问题,其中错误log如下:

03-28 10:18:07.990 11883 11883 W re-initialized>: type=1400 audit(0.0:2918): avc: denied { read } for name="u:object_r:mtk_amslog_prop:s0" dev="tmpfs" ino=7544 scontext=u:r:system_app:s0 tcontext=u:object_r:mtk_amslog_prop:s0 tclass=file permissive=0

解释:
read:表示没有 read 权限
system_app:system_app 中缺少权限
mtk_amslog_prop:mtk_amslog_prop 文件系统缺少权限
file:file 类型的文件
分析:adb shell setenforce 0。设置SELinux 成为permissive模式。若apk可正常使用,则进行规避此权限问题

你可能感兴趣的:(Android)