Android 关闭SE权限后编译user版本无法开机,开机直接进入FastBoot模式

问题描述:

debug版本可以正常开机,user版本无法正常开机,进入fastboot模式

出现原因:

关闭了SE权限  即system\core\init\selinux.cpp

bool IsEnforcing() {
    return false;

办法:

添加宏控:CONFIG_SECURITY_SELINUX_DEVELOP=y

config文件下

============经验证有效!!!!根据谷歌要求如此

有些时候我们添加的外设和接口太多或者我们添加访问了一些系统规则不允许我们访问的资源,我们需要关闭selinux以达到可以正常访问系统资源。

例如解决扫码头和外挂北斗定位,以及节点权限问题。我们需要直接关闭SE,减少添加不少的权限的工作量,作为临时使用。

系统默认关闭SE权限

system\core\init\selinux.cpp

bool IsEnforcing() {
    return false;//直接返回false,即设置为 permissive 模式
    if (ALLOW_PERMISSIVE_SELINUX) {
        return StatusFromProperty() == SELINUX_ENFORCING;
    }
    return true;
}

如果是user版本还需要再kernel的config文件添加以下的配置,否则无法开机,直接进入FastBoot模式!!!!

 adb 授予临时操作:

adb shell setenforce 0    //设置成permissive 模式
adb shell setenforce 1    //设置成enforce 模式

CONFIG_SECURITY_SELINUX_DEVELOP=y

软件路径:

项目下的两个config文件立马添加此宏控:

debug_defconfig  这个对应debug版本,即默认不需要,所以debug可以正常开机

defconfig    这个对应的user版本软件,默认未打开,需要进行添加或打开才可以正常开机

这样子selinux访问权限才可以关闭掉了

反而,编译debug版本则无所谓,可以正常开机!

需要注意的是, Google 要求强制性开启SELinux Enforcing Mode, 如果您关闭,将无法通过Google CTS

要求必须:还原,去掉return false; 而且解决相关的SE权限代码,可以通过log抓取查看并添加

system\core\init\selinux.cpp

bool IsEnforcing() {
    //return false;
    if (ALLOW_PERMISSIVE_SELINUX) {
        return StatusFromProperty() == SELINUX_ENFORCING;
    }
    return true;
}

你可能感兴趣的:(服务器,linux,运维)