如何分析SELINUX 问题并正确添加 sepolicy
Posted gufun
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何分析SELINUX 问题并正确添加 sepolicy相关的知识,希望对你有一定的参考价值。
第一步 确定问题是否与 SELINUX 相关,comand : adb shell setenforce 0(这一步需要 root) 关闭手机的 SELINUX 机制,如果问题还能复现,那么此问题就与 SELINUX 不相关,或者相关 但是还与别的机制相关,比如还与 Linux 自主访问控制(DAC)有关。关闭 SELINUX 之后用 adb shell getenforce 确认 SELINUX 是否正确关闭: [email protected]:~/Desktop/workspace/U50PLUSTMO$ adb shell getenforce Enforcing //表示 SELINUX 机制开启了 [email protected]:~/Desktop/workspace/U50PLUSTMO$ adb shell setenforce 0 [email protected]:~/Desktop/workspace/U50PLUSTMO$ adb shell getenforce Permissive //表示 SELINUX 机制关闭了
Permissive Mode 只通过 Audit System 记录 LOG, 但不真正拦截访问. Enforcing Mode 在打印 LOG 的同时,还会真正的拦截访问.
第二步 确认是 SELINUX 相关之后就可以抓 log 查看 log 文件中的 avc: log
标志性 log: avc: denied { 操作权限 } for pid=7201 comm=“进程名” scontext=u:r:源类型:s0 tcontext=u:r:目标类型:s0 tclass=访问类型 permissive=0
在相应源类型.te 文件,添加如下格式的一行语句:(结尾别忘了分号) 格式:allow 源类型 目标类型:访问类型 {操作权限};
如下: 07-10 14:06:32.780 9043 9043 W com.filemanager: type=1400 audit(0.0:104): avc: denied { read } for name="u:object_r:curef_set_prop:s0" dev="tmpfs" ino=1334 scontext=u:r:platform_app:s0:c512,c768 tcontext=u:object_r:curef_set_prop:s0 tclass=file permissive=0
可以得到如下 sepolicy:添加到 platform_app.te 文件 allow platform_app curef_set_prop : file { read };
需要注意的是 SELINUX 与 Linux 的 DAC 机制都会检测进程有没有权限读写执行文件,能够通 过 SELINUX 权限检测的不一定能通过 DAC 权限检测,而且这两种检测不分先后顺序的,不 是只有通过了 DAC 检测才会进行 SELINUX 检测,就算不通过 DAC 检测,也会进行 SELINUX 检测,所以在分析 android 权限问题时一定要两方面都考虑到。
我最近在分析一个权限问题的时候,最开始就忽略了Linux DAC机制(自主访问控制)。所以分析问题还要注意思维的死角,破除思维的死角的最好的办法就是找人讨论。集思广益往往能收到好的效果。
以上是关于如何分析SELINUX 问题并正确添加 sepolicy的主要内容,如果未能解决你的问题,请参考以下文章