Selinux权限问题处理指导文档分享
Selinux权限问题处理指导文档
- 概述
- SELinux概述
Selinux即Security-Enhanced Linux,由美国国家安全局(NSA)发起,Secure Computing Corporation (SCC) 和 MITRE直接参与开发,以及很多研究机构(如犹他大学)一起参与的强制性安全审查机制,该系统最初是作为一款通用访问软件,发布于2000年12月(代码采用 GPL 许可发布)。并在Linux Kernel 2.6 版本后,有直接整合进入SELinux, 搭建在Linux Security Module(LSM)基础上,目前已经成为最受欢迎,使用最广泛的安全方案。 - Selinux与Android
Android是建立在标准的Linux Kernel基础上的,为了进一步增强Android的安全性, Google将SELinux深入整合进Android形成了SEAndroid。目前Google 都会要求强制性开启SELinux,以保证手机的安全。
SELinux 给Android 带来下面影响:
严格限制了ROOT 权限,以往ROOT “无法无天” 的情况将得到极大的改善。
通过SELinux 保护,降低系统关键进程受攻击的风险,普通进程将没有权限直接连接到系统关键进程。
进一步强化APP 的沙箱机制,确保APP 难以做出异常行为或者攻击行为。
将改变APP 一旦安装,权限就已经顶死的历史,APP权限动态调整将成为可能。
-
如何确认问题与Selinux权限有关
目前所有的SELinux check失败,在kernel log(kmsg log)或者android log(L版本后)中都有对应的" avc: denied"的LOG 与之对应。在确认自己的问题是否和Selinux权限相关时,可以用“setenforce 0”命令关掉Selinux,然后看自身业务功能是否回复正常。
上述命令的执行效果如下图,getenforce是获取当前系统的Selinux开关状态,setenforce是设置当前系统的Selinux开关状态。0和Permissive是等效的,代表关闭Selinux,所有访问将不受检查;1和Enforcing是等效的,代表打开Selinux,访问将手Selinux检查控制。 -
处理Selinux权限问题
当通过上一节的方法确认问题是Selinux问题后,就要着手解决权限受限的问题。首先我们要通过复现抓取Log的方式获得被限制的权限信息,抓取Log相关的命令如下:
adb shell “cat /proc/kmsg | grep avc” > d:\avc_log.txt
在连接手机执行后会在本地电脑D盘生成名为avc_log.txt的日志文件,在这个文件中可以找到自己相关进程的拦截日志。
举例说明下:
audit: type=1400 audit(1631688717.914:3963): avc: denied { search } for pid=19884 comm=“com.rda.mcare” name=“power_supply” dev=“sysfs” ino=12681 scontext=u:r:rda_mcare_app:s0:c512,c768 tcontext=u:object_r:sysfs_power:s0 tclass=dir permissive=0
分析上述Log语句:
缺少什么权限: { search }权限;
谁缺少权限: scontext=u:r:rda_mcare_app:s0:c512,c768;
对谁缺少权限ÿ