权限修改
方法一:adb在线修改SELinux
Enforcing 表示已打开,Permissive 表示已关闭
getenforce; //获取当前seLinux状态
setenforce 1; //打开seLinux
setenforce 0; //关闭seLinux
方法二:从kernel中彻底关闭
修改kernel-**/arch/arm64/configs/***_defconfig文件(*一般为手机产品名)
去掉CONFIG_SECURITY_SELINUX=y的配置项
方法三:sepolicy中添加权限
修改依据,通过 cat /proc/kmsg | grep denied,或者kernel的Log中定位到标志性log。
修改步骤
找到相应的源类型.te文件,此文件可能存放的路径(其中源类型见下方的标志性log格式):
高通平台:
external/sepolicy/
device/qcom/sepolicy/common/
MTK平台:
external/sepolicy/
device/mediatek/common/sepolicy
标志性log格式
avc:denied {操作权限} for pid=3603 comm="进程名" scontext=u:r:源类型:s0 tcontext=u:r:目标类型:s0 tclass=访问类型 permissive=0
在相应的源文件.te中添加如下格式的权限声明:(结尾别忘了分号)
allow 源类型 目标类型:访问类型 {操作权限}
实例
Kernel log
avc: denied { write } for pid=3603 comm="sh" name="interactive" dev="sysfs" ino=42601 scontext=u:r:qti_init_shell:s0 tcontext=u:object_r:sysfs:s0 tclass=dir permissive=0
修改方案
此问题log来自高通平台,首先根据log找到init_shell.te,添加如下语句:
allow qti_init_shell sysfs:dir write;
PS:如果需要多个权限,后面权限部分可写成集合的形式,如{write,read}