我想在安卓4.4.4上设置SELinux(安全增强型Linux)模式为Permissive或(0)(如果可能,请设置为以上)。我在root下使用以下命令:setenforce 0
,setenforce permissive
和setenforce Permissive
(我的设备已植根)。但getenforce
的输出始终为Enforcing
。现在我已经筋疲力尽了这个问题。
任何人都可以给我一个解决方案吗?提前谢谢。
答案 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
这可能由于三个原因而失败:
要纠正问题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