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

AI权益加码!Claude Code、Cursor等20+工具免费用! 购周边限时加赠Coding Plan Lite,畅享主流AI工具!学习进阶更高效! 阅读详情

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模式)_linglingqun的博客-CSDN博客

基于Android13的系统启动流程分析(一)之SeLinux权限介绍 SeLinux,SeAndroid,init进程启动 阅读详情

相关推荐

Android SELinux调试实战:从临时关闭到永久禁用的完整指南

本文提供了Android SELinux调试的完整实战指南,详细对比了临时关闭与永久禁用两种方案。通过核心命令`setenforce`可快速验证权限问题,而修改系统源码则能实现永久变更。文章强调临时关闭是安全调试的首选,并引导开发者最终学会编写正确的SELinux策略,以平衡开发效率与系统安全。

weixin_29302047的博客 608

关闭 SELinux 权限

它通过强制访问控制(MAC)提供更细粒度的权限控制,限制应用程序的行为,并防止恶意代码的执行。此外,关闭 SELinux 权限可能会导致一些应用程序无法正常运行,因此在禁用 SELinux 之前,请确保您了解可能带来的潜在风险和影响。在 Android 系统中关闭 SELinux 权限是一个常见的需求,本文将介绍如何通过修改系统配置文件关闭 SELinux 权限并提供相应的源代码。但请注意,禁用 SELinux 可能会降低系统的安全性,因为该安全机制的作用是防止恶意代码的执行。在打开的文件中,找到。

2301_79326510的博客 990

避坑指南:RK356X安卓11永久关闭SELINUX时遇到的user模式失效问题

本文深度解析了在RK356X平台的Android 11系统中,通过修改BoardConfig.mk关闭SELinux时,为何在userdebug模式下成功而在user模式下失效的问题。核心原因在于系统源码中的ALLOW_PERMISSIVE_SELINUX编译标志,并提供了通过修改Android.bp文件实现user模式永久关闭SELinux的完整解决方案与验证步骤。

weixin_29200741的博客 316

Android关闭SELinux权限

Android系统中,SELinux(Security-Enhanced Linux)被用作一种强制访问控制机制,它可以限制进程的权限,保护系统免受恶意软件和攻击。总结起来,本文介绍了如何在 Android 设备上关闭 SELinux 权限的方法,并提供了相应的源代码。使用该代码需要设备具备 root 权限,开发者应当在了解 SELinux 的作用和风险的基础上,谨慎操作。否则,将无法执行 su 命令并进行相应的操作。首先,需要了解在 Android 系统中,SELinux 的权限是由一个文件来配置的。

ByteSparkX的博客 1141

暴力修改SElinux权限

平台版本 SDK版本 版本名称 9.0 28 Pie (Android P) 8.1 27 Oreo(Android O)(奥利奥) 8.0 26 Oreo(Android O)(奥利奥) 7.1 25 Nougat(Android N)(牛轧糖) 7.0 24 Nougat(Android N)(牛轧糖) 6.0 23 Marshmallow(Android M)(棉花糖) 5.1 22 Lol...

嵌入式Linux 1926

Android Safety 系列专题【篇四:Android SEPolicy】

SELinux原本是美国国安局联合一些公司设计的一个针对Linux的安全加强系统。 SELinux出现之前,Linux系统上的安全模型叫做DAC(自主访问控制),其原理是进程所拥有的权限与执行它的用户的权限相同(例如:以root用户启动Browser,那么Browser就有root用户的权限,在Linux系统上能干任何事情)。SELinux的出现结束了这种宽松的访问。 SELinux在DAC的基础之上,设计了新的安全模型叫做MAC(强制访问控制),其原理是任何进程想在SELinux系统中干任何事情,都必

qq_27672101的博客 1万+

Android7关闭selinux设置Permissive模式

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的方法,因为我也不会[捂脸笑]

zjy764219923的专栏 5290

Android临时和永久关闭selinux

当我们想要临时关闭selinux时,如果可以获得root权限,通过adb如下指令可以临时关闭selinux: setenforce 0 如果需要长期关闭,则需要用其他方法,先看slinue启动的位置: Androidselinux从init开始。在init.cpp中有: static void selinux_initialize(bool in_kernel_domain) { Ti...

zhangdaxia2的博客 2万+

Android】如何配置打开和关闭selinux

直接配置init进程的Android.bp文件和uboot配置的值最佳,Android.bp下面-DALLOW_PERMISSIVE_SELINUX=0则是关闭,=1则是打开;bootloader/uboot-repo/bl33/board/公司名/configs/对应芯片的配置头文件.h,"EnableSelinux=enforcing\0"\是打开,"EnableSelinux=permiss...

xlnaan的博客 1万+

android:在AndroidO下将selinux设置permissive

ps:运行时的操作就是命令行下的,最简单,重启失效 $getenforce $setenforce 0 '修改测略': log:01-01 00:00:20.828 3665 3665 W sh : type=1400 audit(0.0:12): avc: denied { write } for name="core_pattern" ...

maze的专栏 9293

[RK3568 Android11] 开发之user版本关闭selinux

目录 前言 一、阅读selinux的代码 二、user版本设置selinuxPermissive模式方法 1、方法1 2、方法2 3、方法3 三、扩展 前言 按RK3568 Android11的userdebug版本的方式去关闭的user版本的selinux,不起效果。接下来分析下原因; 一、阅读selinux的代码 代码路径:system/core/init/selinux.cpp 可看到判断selinux状态的代码段: Enfo...

~未来可期~ 2202

如何设置确认selinux 模式

[Description] linux SELinux 分成Enforce 以及 Permissive 两种模式,如何进行设置与确认当前SELinux模式? [Keyword] android, SELinux, Enforce, Permissive [Solution] 在Android KK 4.4 版本后,Google 有正式有限制的启用SELinux, 来增强and

老雷的Android学习 6460

Android 各版本关闭 Selinux 的方法

运行时调试开关 Selinux   Cmd Discription Other adb shell getenforce 查看当前 Selinux 功能是 permissive(关闭)还是 enforce(打开)的 adb shell setenforce 0 开Selinux设置模式permissive adb shell setenforce 1 关Selinux设置模式enforce 说明:setenforce 修改的状态在设备重启后会失效,需要重新执行命令重

Change The World 1万+

android recovery设置selinuxpermissive

我们在调试开发阶段,经常需要把selinux关闭,则我们修通过设置uboot env来设置为允许状态:setenvEnableSelinux permissive;save 我们如果需要一直设置permissive模式,不需要通过uboot env去控制,可以这样修改(android 9.0上面验证): system/core/init下面打patch: diff --...

csdn66_2016的博客 3452

Android系统10 RK3399 init进程启动(二十四) Selinux三种模式

配套系列教学视频链接: 安卓系列教程之ROM系统开发-百问100ask 说明 系统:Android10.0 设备: FireFly RK3399 (ROC-RK3399-PC-PLUS) 前言 本章节介绍Selinux工作的三种模式,并知道如何切换三种模式。 一, Selinux三种模式介绍 selinux一般有三种模式, Disabled、Permissive 和 Enforcing,SEAndroid是基于SElinux, 所以也是一样有这三种模式。 1, Disab...

ldswfun的专栏 3043

recovery输出log+recovery模式关闭selinux

recovery log输出机制: 1、在recovery mode下:adb pull /tmp/recovery.log %cd%/recovery.log 2、recovery mode 下 reboot 进入系统后: adb pull /cache/recovery %cd%/recovery 那问题来了,如何输出到uart? 直接修改\bootable\recovery\reco...

sunshine_liusu的博客 1906

RK356X android11 关闭SELINUX

rk356x android11 如何关闭selinux

QliumengQ的博客 2202
上一篇: Git的Patch功能
下一篇: Android7.1.1对Type Toast的限制
ssuqin001
博客等级 码龄15年 61粉丝 95原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值