Android7关闭selinux(设置为Permissive模式)

设置selinux为宽容模式(Permissive)需要修改两个文件:
Android/system/core/init/Android.mk
Android/system/core/init/init.cpp

网上有些文章说修改cmdline,如果修改cmdline无效的话,参考本文对Android/system/core/init/Android.mk进行修改后可能会生效,本文不讲修改cmdline的方法,因为我也不会[捂脸笑]
/--------------------------2019-12-31补充----------------------------/
本次补充本人未去验证,不保证准确
cmdlinedevice/qcom/平台/BoardConfig.mk中,例如高通的8953平台:
device/qcom/msm8953_64/BoardConfig.mk

ifeq ($(TARGET_QUECTEL_BUILD_FASTBOOT),userfastboot)BOARD_KERNEL_CMDLINE := console=ttyHSL0,115200,n8 androidboot.console=ttyHSL0 quiet androidboot.hardware=qcom msm_rtb.filter=0x    237 ehci-hcd.park=3 lpm_levels.sleep_disabled=1 androidboot.bootdevice=7824900.sdhci earlycon=msm_hsl_uart,0x78af000elseBOARD_KERNEL_CMDLINE := console=ttyHSL0,115200,n8 androidboot.console=ttyHSL0 androidboot.hardware=qcom msm_rtb.filter=0x237 eh    ci-hcd.park=3 lpm_levels.sleep_disabled=1 androidboot.bootdevice=7824900.sdhci earlycon=msm_hsl_uart,0x78af000endif

相关的C文件:bootable/bootloader/lk/app/aboot/aboot.c

/--------------------------2019-12-31补充----------------------------/

对比差异如下,详细说明请继续往下看

diff --git a/system/core/init/Android.mk b/system/core/init/Android.mkindex fbb3a28..8d68f72 100644--- a/system/core/init/Android.mk+++ b/system/core/init/Android.mk@@ -7,7 +7,7 @@ LOCAL_PATH:= $(call my-dir) ifneq (,$(filter userdebug eng,$(TARGET_BUILD_VARIANT))) init_options += -DALLOW_LOCAL_PROP_OVERRIDE=1 -DALLOW_PERMISSIVE_SELINUX=1 else-init_options += -DALLOW_LOCAL_PROP_OVERRIDE=0 -DALLOW_PERMISSIVE_SELINUX=0+init_options += -DALLOW_LOCAL_PROP_OVERRIDE=0 -DALLOW_PERMISSIVE_SELINUX=1 endif  init_options += -DLOG_UEVENTS=0diff --git a/system/core/init/init.cpp b/system/core/init/init.cppindex 23fafba..8010fa9 100755--- a/system/core/init/init.cpp+++ b/system/core/init/init.cpp@@ -421,7 +421,7 @@ static void selinux_init_all_handles(void) enum selinux_enforcing_status { SELINUX_PERMISSIVE, SELINUX_ENFORCING };  static selinux_enforcing_status selinux_status_from_cmdline() {-    selinux_enforcing_status status = SELINUX_ENFORCING;+    selinux_enforcing_status status = SELINUX_PERMISSIVE;      import_kernel_cmdline(false, [&](const std::string& key, const std::string& value, bool in_qemu) {         if (key == "androidboot.selinux" && value == "permissive") {

首先看system/core/init/init.cpp

enum selinux_enforcing_status { SELINUX_PERMISSIVE, SELINUX_ENFORCING };static selinux_enforcing_status selinux_status_from_cmdline() {     selinux_enforcing_status status = SELINUX_PERMISSIVE;  // 标注1      import_kernel_cmdline(false, [&](const std::string& key, const std::string& value, bool in_qemu) {// 标注2         if (key == "androidboot.selinux" && value == "permissive") {// 标注3             status = SELINUX_PERMISSIVE;         }     });      return status; }static bool selinux_is_enforcing(void) {     if (ALLOW_PERMISSIVE_SELINUX) {// 标注4         return selinux_status_from_cmdline() == SELINUX_ENFORCING;     }     return true;// 标注5 }

代码讲解:
注释1:此处原来的值是SELINUX_ENFORCING,改为SELINUX_PERMISSIVE,则默认为宽容模式
注释2:此处从cmdline读取参数
注释3:如果从cmdline中读取的到androidboot.selinux为permissive,则status为宽容模式,cmdline默认androidboot.selinux的值为空,所以修改前默认返回SELINUX_ENFORCING
标注4:如果此处为真,则会调用selinux_status_from_cmdline,否则默认返回ture,只要返回ture,就是打开selinux
标注5:此处改为false则可以直接成功改为宽容模式,但不建议这样修改,所以此处保持为true

再看system/core/init/Android.mk

ifneq (,$(filter userdebug eng,$(TARGET_BUILD_VARIANT)))init_options += -DALLOW_LOCAL_PROP_OVERRIDE=1 -DALLOW_PERMISSIVE_SELINUX=1elseinit_options += -DALLOW_LOCAL_PROP_OVERRIDE=0 -DALLOW_PERMISSIVE_SELINUX=1# 标注1endif

代码讲解:
注释1:此处-DALLOW_PERMISSIVE_SELINUX定义了ALLOW_PERMISSIVE_SELINUX的值,此值原为0,当编译的是user版本的时候,此值为0,这个值在system/core/init/init.cpp中的标注4用到了,要使此值为真,system/core/init/init.cpp才会调用selinux_status_from_cmdline,否则,system/core/init/init.cpp中的修改则没有任何意义


做完上方的修改之后编译并烧写到设备,设备端执行下方命令(getenforce),返回结果为Permissive,则修改成功

$ getenforce                               Permissive

更多相关文章

  1. Android 5.1 去掉首次进入沉浸模式的提示
  2. Android里的观察者模式应用
  3. 用kotlin打印出漂亮的android日志(三)——基于责任链模式打印任
  4. 基于命令行模式开发ANDROID应用
  5. Android中的设计模式--建造者模式
  6. android 对文件的操作模式
  7. android 跳转到小米手机神隐模式

随机推荐

  1. Android(安卓)Studio | 报错处理 | ERROR
  2. 通过 http post 方式上传多张图片
  3. android菜鸟学习笔记2----关于adb
  4. Android开发UI布局必备基础知识
  5. Android 利用getIdentifier()方法获取资
  6. activity中onSaveInstanceState方法调用
  7. eclipse 中绑定 android源码
  8. Android gallery实现图片的左右循环旋转
  9. 预显示TextView
  10. Android游戏开发实践指南(华章程序员书库