如何在android 4.4.4及更高版本中将SELinux设置为0或许可模式?

Vu *_*ran 11 android selinux android-4.4-kitkat

我想将SELinux(安全增强型Linux)模式设置为Permissive或android 4.4.4上的(0)(如果可能的话,以上).我使用下面的命令:setenforce 0,setenforce permissivesetenforce Permissive下根(我的设备植根).但getenforce总是输出Enforcing.现在我已经筋疲力尽了这个问题.

任何人都可以给我一个解决方案吗?提前致谢.

Wil*_*rts 16

取决于您的设备的生根方式以及您运行的Android ROM将决定如何禁用它.首先要尝试的是:

adb shell su 0 setenforce 0
Run Code Online (Sandbox Code Playgroud)

这与以下内容不同:

adb shell setenforce 0
Run Code Online (Sandbox Code Playgroud)

su上的execute会导致域从shell(不能setenforce)转换到su域(可以调用setenforce).例如,运行:

$ adb shell id -Z
context=u:r:shell:s0
Run Code Online (Sandbox Code Playgroud)

相比:

$ adb shell su 0 id -Z
context=u:r:su:s0
Run Code Online (Sandbox Code Playgroud)

这可能由于三个原因而失败:

  1. 你没有su可执行文件
  2. su可执行文件的标签错误
  3. su域规则未编译到bootimage中

要更正问题2,您可以(假设adb是root):

adb remount
adb shell chcon /system/xbin/su u:object_r:su_exec:s0
Run Code Online (Sandbox Code Playgroud)

这可能会失败,这可能表示问题3.要修复问题3,您需要重新编译包含su策略文件的boot.img.如果您正在编译AOSP,只需午餐用户调试或设备的变种.

另一种方法是从init.c中删除功能,与问题3一样,需要重新编译boot.img.进入system/core/init/init.c(或.cpp)并删除对security_setenforce()的所有调用.

此外,XDA有一个应用程序可以帮助自动化这个过程并使其更容易,但是,我无法谈论应用程序的质量:http: //www.xda-developers.com/easily-change-your-android-selinux -模式/


not*_*bit 9

显然谷歌已经CONFIG_SECURITY_SELINUX_DEVELOP从他们的许多股票内核中删除了内核标志.因此,威廉(下文)提到的标准技巧可能不起作用.这些设备的一个例子是运行AOS 4.4.4 的Samsung Note 4(SM-N910F).

上面的链接指出:

CONFIG_SECURITY_SELINUX_DEVELOP又称全局许可模式,在您首次为电路板开发特定于设备的策略时很有用(将"androidboot.selinux = permissive"添加到BOARD_KERNEL_CMDLINE).它还允许短暂setenforce 0-userdebug-eng建立,这对于开发者有帮助.

如果引导加载程序已锁定,则无法修改内核cmdline

"此外,用于处理androidboot.selinux=选项的init程序中的代码 仅在编译-userdebug-eng构建时编译,因此即使不使用引导加载程序锁定,也不能androidboot.selinux=permissive-user构建中使用 ."

检查您的构建类型的方法是:

$ getprop ro.build.type
user
Run Code Online (Sandbox Code Playgroud)