1.关闭Selinux方法:
在uboot中执行
setenv EnableSelinux permissive
save
reset
2.设置selinux模式
setenforce 0/1 //0为permissive,1为enforcing
getenforce //查看当前selinux模式
3.常用selinux debug方法
make sepolicy -j32 //编译sepolicy,编译完后,再全编译刷机验证
cat /dev/kmsg | grep avc //查看kernel中的SELinux权限报错
dmesg | grep avc //查看kernel中的SELinux权限报错
cat /proc/kmsg | grep avc //查看kernel中的SELinux权限报错
logcat | grep -i -e avc -e selinux
setenforce 0/1 //0为permissive,1为enforcing
可以先dmesg -C,清空kernel log,然后执行相应的操作,接着再看dmesg,查看是否有selinux报错信息
4.对avc: denied log,缺啥补啥添加相应权限
avc: denied { find } for interface=android.system.suspend::ISystemSuspend sid=u:r:hal_power_default:s0 pid=3654 scontext=u:r:hal_power_default:s0 tcontext=u:object_r:system_suspend_hwservice:s0 tclass=hwservice_manager permissive=0
allow hal_power_default system_suspend_hwservice:hwservice_manager { find };
5.neverallow类型
一些selinux权限被neverallow的情况,可以通过以下的一些思路去解决:
(1)调用的安全上下文改成有权限调用的安全上下文
(2)通过有权限的安全上下文的进程去调用,并通过跨进程反馈出来
(3)被调用文件的路径不同,权限也会不同。如U盘/mnt/media_rw/xxxx-xxxx和/stroage/xxxx-xxxx的上下文权限是不同的
ls -lZ /mnt/media_rw/
drwxrwx--- 34 media_rw media_rw u:object_r:vfat:s0 16384 1970-01-01 08:00 95DB-8186
ls -lZ /storage
drwxrwx--x 34 root sdcard_rw u:object_r:sdcardfs:s0 16384 1970-01-01 08:00 95DB-8186
有时A被neverallow,但是B是可以调用到的,因此只需要将文件路径修改一下就可以正常使用了。