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

时间:2015-06-23 09:01:36

标签: android android-4.4-kitkat selinux

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

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

3 个答案:

答案 0 :(得分:16)

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

adb shell su 0 setenforce 0

这与以下内容不同:

adb shell setenforce 0

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

$ adb shell id -Z
context=u:r:shell:s0

与之相比:

$ adb shell su 0 id -Z
context=u:r:su:s0

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

  1. 您没有su可执行文件
  2. su可执行文件标签错误
  3. su域规则未编译到bootimage
  4. 要纠正问题2,您可以(假设adb是root):

    adb remount
    adb shell chcon /system/xbin/su u:object_r:su_exec:s0
    

    这可能会失败,这可能表示问题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-mode/

答案 1 :(得分:7)

Apparently Google已从许多 Stock 内核中删除了CONFIG_SECURITY_SELINUX_DEVELOP内核标记。因此,William(下面)提到的标准技巧可能不起作用。这些设备的一个示例是运行AOS 4.4.4的 Samsung Note 4(SM-N910F)

上面的链接指出:

  

CONFIG_SECURITY_SELINUX_DEVELOP又名全球许可模式,对于   当您第一次为电路板开发特定于设备的策略时(添加   'androidboot.selinux = permissive'到BOARD_KERNEL_CMDLINE)。它也是   允许在 -userdebug -eng 构建中暂时 setenforce 0 ,这可以   对开发人员有所帮助。

     

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

“另外,init程序中的代码用于处理 androidboot.selinux=选项仅在-userdebug-eng版本中编译,因此即使除了bootloader锁定之外,您也无法使用 androidboot.selinux=permissive版本上的-user。“

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

$ getprop ro.build.type
user

答案 2 :(得分:3)

必须根本出发!不确定这是否适用于KitKat(它应该),但我在Nexus 6上使用它。在终端或ADB Shell中运行以下命令:

su
mount -o remount,rw /system
mkdir /system/su.d
echo "#!/system/bin/sh" > /system/su.d/permissive.sh
echo "echo 0 > /sys/fs/selinux/enforce" >> /system/su.d/permissive.sh
chmod 755 /system/su.d/permissive.sh

重新启动后检查它:

su
/system/bin/getenforce