【问题标题】:How to set SELinux to 0 or permissive mode in android 4.4.4 and above?如何在 android 4.4.4 及更高版本中将 SELinux 设置为 0 或许可模式?
【发布时间】:2015-09-08 23:45:57
【问题描述】:

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

谁能给我一个解决方案?提前致谢。

【问题讨论】:

    标签: android android-4.4-kitkat selinux


    【解决方案1】:

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

    adb shell su 0 setenforce 0
    

    这不同于:

    adb shell setenforce 0
    

    在 su 上执行会导致从 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 域规则未编译到引导映像中

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

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

    这可能会失败,这可能表明问题 3。要修复问题 3,您需要重新编译包含 su 策略文件的 boot.img。如果您正在编译 AOSP,只需使用您设备的 userdebug 或 eng 变体即可。

    另一种方法是从 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/

    【讨论】:

    • 在我的例子中,u:r:su:s0 上下文自上次供应商升级后不再存在。如何添加到/sepolicy
    【解决方案2】:

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

    上面的链接说:

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

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

    "另外,init 程序中用于处理 androidboot.selinux= 选项仅在 -userdebug-eng 构建中编译,所以即使除了引导加载程序锁定,您也不能使用 androidboot.selinux=permissive-user 构建上。”

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

    $ getprop ro.build.type
    user
    

    【讨论】:

      【解决方案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
      

      【讨论】:

      • chmod 755 /system/su.d/permissive.sh
      猜你喜欢
      • 1970-01-01
      • 2021-08-30
      • 1970-01-01
      • 1970-01-01
      • 2018-04-18
      • 2022-06-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多