前言
SELinux 是 Google 从android 5.0 开始,强制引入的一种非常严格的管理机制,主要用于增强系统的安全性。SELinux有以下两种模式:
enforcing mode: 限制访问
permissive mode: 只审查权限,不限制
1 确定 SELinux 问题
在调试过程中遇到权限问题时,可以通过如下方法,确定是不是由于 SELinux 导致的问题:
方法一:
通过串口或者adb使用如下命令,先将 selinux权限切换到审查模式:
setenforce 0 (临时关闭 SELinux 的限制访问模式)
getenforce (得到结果为Permissive)
方法二:
一般情况下,user 版本的固件才会打开 SELinux 权限,会发生一些权限问题,此时可以用 debug 版本的固件,来进行测试,是否还会有上述的问题发生。因为 debug 版本的固件一般不会打开 SELinux,即此时的 SELinux是审查模式,只会出现警告,但是不会报错。(注:此方法要确定,debug版本的固件是否会打开 SELinux权限,如果debug版本也开启了 SELinux 权限,则这个方法不适用。)
方法三:
如果看到如下的log信息,一定可以确定是确定某些 SELinux 的权限:
avc: denied { read write } for pid=231 comm="eGTouchD" name="ttyS1" dev="tmpfs" ino=257 scontext=u:r:eGTouchD:s0 tcontext=u:object_r:serial_device:s0 tclass=chr_file permissive=0
avc: denied { read write } for pid=231 comm="eGTouchD" name="ttyS2" dev=