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中使用jdbc连接Sqllite
  2. android通过chmod命令实现文件权限修改
  3. android APP 获得system权限
  4. android 权限定义的文件,位置
  5. ubuntu 10.04 Android(安卓)编译环境搭建
  6. 去掉所有Activity界面标题栏、强制横屏竖屏
  7. OpenCV Android解决相机旋转90度及全屏问题
  8. Android(安卓)为【apk】文件签名,增加修改系统时间等权限
  9. Android(安卓)Studio 使用自己编译的framework

随机推荐

  1. Android(安卓)- 主要的UI元素。
  2. 利用 RDP Wrapper 实现 Android(安卓)平
  3. Android随笔之——Android时间、日期相关
  4. Android获取外置SD卡读写路径
  5. Android(安卓)adb 我的常用调试命令记录(
  6. Android系统源码目录解析
  7. Android(安卓)Studio 中关于NDK编译及jni
  8. 开机提示“Android正在升级...”
  9. Android(安卓)Weak Handler:可以避免内存
  10. Android软键盘处理开发规范