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

/--------------------------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的博客-优快云博客

SELinux 是 Linux 系统中的一种安全模块,可以提供更细粒度的访问控制。如果希望在 VMware 17 中运行的 Linux 系统上禁用 SELinux,可以通过修改 SELinux 的配置文件来实现。 SELinux 的主配置文件位于 `/etc/selinux/config`,其中定义了 SELinux 的运行模式。要禁用 SELinux,需将 `SELINUX=` 设置为 `disabled`,如下所示: ```bash # This file controls the state of SELinux on the system. # SELINUX= can take one of these three values: # enforcing - SELinux security policy is enforced. # permissive - SELinux prints warnings instead of enforcing. # disabled - No SELinux policy is loaded. SELINUX=disabled # SELINUXTYPE= can take one of these two values: # default - equivalent to the old strict and targeted policies # mls - Multi-Level Security (for military and educational use) # src - Custom policy built from source SELINUXTYPE=default # SETLOCALDEFS= Check local definition changes SETLOCALDEFS=0 ``` 修改完成后,需要重启系统以使更改生效。SELinux 将不再加载安全策略,系统将以无 SELinux 保护的状态运行。 如果希望临时禁用 SELinux(仅在当前运行中生效,重启后恢复),可以在终端中使用以下命令: ```bash sudo setenforce 0 ``` 此命令将 SELinux 设置为“permissive模式,即仅记录违规行为而不执行强制策略。如果需要彻底禁用,仍需修改配置文件并重启系统[^1]。 ### 验证 SELinux 状态 可以使用以下命令检查 SELinux 的当前状态: ```bash sestatus ``` 或使用以下命令查看 SELinux 的运行模式: ```bash getenforce ``` 若输出为 `Disabled`,则表示 SELinux 已成功禁用。 ### 注意事项 - 禁用 SELinux 可能会降低系统的安全性,尤其在生产环境中应谨慎操作。 - 某些应用程序或服务可能依赖 SELinux 的策略规则,禁用后可能导致其行为异常。 - 修改 SELinux 配置前,建议备份原始配置文件,以便在需要时恢复。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值