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补充----------------------------/

本次补充本人未去验证,不保证准确

cmdline在device/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,0x78af000

else

BOARD_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,0x78af000

endif

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

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

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

diff --git a/system/core/init/Android.mk b/system/core/init/Android.mk

index 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=0

diff --git a/system/core/init/init.cpp b/system/core/init/init.cpp

index 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=1

else

init_options += -DALLOW_LOCAL_PROP_OVERRIDE=0 -DALLOW_PERMISSIVE_SELINUX=1# 标注1

endif

代码讲解:

注释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

android7禁用selinux,Android7关闭selinux(设置为Permissive模式)相关推荐

  1. 安装OCP时,selinux 的状态如何设置,permissive or disabled ?

    安装OCP时,selinux 的状态如何设置,permissive or disabled ? 1. 背景 2. 环境 3. 问题 4. 参考解决方案 1. 背景 工作遇到的类似问题,参考官网进行收集 ...

  2. centos6 查看SELinux状态 关闭SELinux

    SELinux(Security-Enhanced Linux) 是美国国家安全局(NSA)对于强制访问控制的实现,是 Linux历史上最杰出的新安全子系统.在这种访问控制体系的限制下,进程只能访问那 ...

  3. centos 关闭selinux 临时关闭selinux 报错 setenforce: setenforce() failed

    关闭selinux的方法有两种:临时关闭和永久关闭. 查看selinux的状态:estatus [root@162-219-29-3 ~]# sestatus SELinux status: enab ...

  4. Android ADB关闭Selinux ( adb shell setenforce 0 )

    adb shell setenforce 0 setenforce 0 :设置SELinux 成为permissive模式 临时关闭selinux的 在eng/userdebug版本中 使用seten ...

  5. 如何关闭selinux、swap

    快速关闭selinux 永久关闭selinux方法如下: # 方法1.直接通过命令关闭selinux sed -ri 's/SELINUX=enforcing/SELINUX=disabled/' / ...

  6. Linux配置本地YUM源—临时和永久关闭Selinux

    配置本地YUM源-临时和永久关闭Selinux 今天博主和大家聊一聊配置本地YUM源-临时和永久关闭Selinux,不喜勿喷,欢迎关注,如有建议欢迎补充,讨论. 一.配置本地YUM源 yum的一切配置 ...

  7. Linux切换运行级别、关闭防火墙、禁用selinux、关闭sshd、时间同步、修改时区、拍摄快照、克隆操作

    文章目录 1. Linux运行级别及切换 2. 关闭防火墙并禁止开机启动 3. 禁用selinux 4. 关闭sshd服务 5. 时间同步 6. 修改时区 7. 删除70-persistent-net ...

  8. linux虚拟实验室关闭了,centos8禁用selinux临时关闭/永久关闭

    一,selinux的用途 1,什么是selinux SELinux:即安全增强型 Linux(Security-Enhanced Linux) 它是一个 Linux 内核模块,也是 Linux 的一个 ...

  9. 临时和永久关闭Selinux及防火墙的设置

    了解SELinux 安全增强型 Linux(Security-Enhanced Linux)简称 SELinux,它是一个 Linux 内核模块,也是 Linux 的一个安全子系统 SELinux 的 ...

最新文章

  1. Tomcat单向Https验证搭建,亲自实现与主流浏览器、Android/iOS移动客户端安全通信
  2. 你不可不知的9种Lisp语言思想
  3. 皮一皮:论出门带物的重要性...
  4. Centos下Yum安装PHP5.5,5.6,7.0
  5. scipy和statsmodels处理回归
  6. 存定期还能加钱进去吗_很多人说傻子才存钱,在银行存定期还有必要吗?
  7. arm64动态链接库通过函数名获取函数偏移
  8. 【Elasticsearch】elasticsearch allocation 分析
  9. Matlab中imadjust函数的用法
  10. 获取经纬度之间距离的Java工具类
  11. JavaScript--百度地图那些坑
  12. python面向对象三大特性_python面向对象的三大特性
  13. SQL Server 2008 R2 安装图文详解
  14. 普通路由器连接光猫一体机的配置教程(以水星MW300R路由器,移动吉比特GS3202光猫一体机为例,可突破专供定制路由限制)
  15. dota2地区服务器延迟,DOTA2 TI8预选赛:南美服务器爆炸比赛延迟
  16. Unity3D入门(三):游戏场景制作 3D 模型基础
  17. 【云主机迁移原理】华为云主机迁移服务SMS的原理分析
  18. python当前时间加一分钟_Python实现的当前时间多加一天、一小时、一分钟操作示例...
  19. js 时间转东八区_js将UTC时间转化为当地时区时间
  20. wordpress文章自动同步天涯博客插件wp2Tianya发布

热门文章

  1. python自媒体混剪视频_自媒体短视频运营中的混剪怎么做?我们又该如何去寻找素材呢?...
  2. static代码块在什么时候执行
  3. html鼠标触发显示悬浮窗,JS事件之鼠标悬浮窗(鼠标悬浮窗抖动问题的解决)
  4. Linux修改权限功能------chmod
  5. linux系统权限修改命令
  6. ubuntu解压命令
  7. 冯诺依曼计算机中运算器的功能,青书学堂: (单选题) 冯·诺依曼计算机由五大部分组成,运算器是其中之一。它完成的功能包括______。(本题1.0分)...
  8. IDL 一维数组的Sen斜率实现
  9. 转载 db2 数据库常用命令
  10. BZOJ 2150. 部落战争(最小路径覆盖问题)【BZOJ千题计划】