码迷,mamicode.com
首页 > 系统相关 > 详细

如何分析SELINUX 问题并正确添加 sepolicy

时间:2018-07-13 01:13:33      阅读:583      评论:0      收藏:0      [点我收藏+]

标签:mod   mode   语句   contex   text   linux   相关   先后   cin   

第一步 确定问题是否与 SELINUX 相关,comand : adb shell setenforce 0(这一步需要 root) 关闭手机的 SELINUX 机制,如果问题还能复现,那么此问题就与 SELINUX 不相关,或者相关 但是还与别的机制相关,比如还与 Linux 自主访问控制(DAC)有关。关闭 SELINUX 之后用 adb shell getenforce 确认 SELINUX 是否正确关闭: yang.y@U-yang-y:~/Desktop/workspace/U50PLUSTMO$ adb shell getenforce Enforcing //表示 SELINUX 机制开启了 yang.y@U-yang-y:~/Desktop/workspace/U50PLUSTMO$ adb shell setenforce 0 yang.y@U-yang-y:~/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

标签:mod   mode   语句   contex   text   linux   相关   先后   cin   

原文地址:https://www.cnblogs.com/gufanyuan/p/9302565.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!