init进程是Android内核启动的第一个用户进程,其中的SELinux也是在init进程中启动的,代码位置在system/core/init/init.cpp中。
通过代码我们可以看出,初始化时会通过security_getenforce()和selinux_is_enforcing()的值是否一致来判断是否开启SELinux,当不一致的时候会设置security_setenforce的值为is_enforcing。
security_getenforce()是读取驱动节点enforce,节点路径为sys/fs/selinux/enforce。
selinux_is_enforcing()是通过接受命令行的值,默认返回true,所以我们将里面注释掉直接返回false即可,注意黄色框函数也要注释掉,不然编译的时候会报错有未使用的函数。
然后重新编译,重新烧录boot.img即可,开机后查看SE权限就是Permissive了。