在Android上临时禁用或修改SELinux

Mar*_* L. 18 android selinux

我是Android 的root -app 的开发者.

可悲的是,现在在某些设备/ ROM的存在的SELinux执行 -模式,防止我的应用程序的一些行动.

因为这是一个root-app,用户正在授予我root权限!

现在,SELinux阻止了我的一些行为,我需要为此找到解决方案.

我试图临时禁用SELinux

setenforce permissive -> no failure, but getenforce still returns "Enforcing"
cat 0 > /sys/fs/selinux/enforce -> no failure, but getenforce still returns "Enforcing"
Run Code Online (Sandbox Code Playgroud)

我想在运行时编辑sepolicy -file以允许阻塞命令并触发重新加载,但我不确定它是否以及如何工作,也不是一个好主意.

谁有更多的提示或资源给我?

Mar*_*zuk 11

您可以supolicy在SuperSU应用程序中使用,查看链接以获取详细说明,以及何时以及如何调用它.

简而言之:

  • 通过检查审核消息,找出SELinux阻止某些内容的原因,例如 dmesg | grep "audit"
  • 创建allow ...允许阻止操作的规则.它们与SELinux*.te文件中的"允许"规则类似(相同?).
  • supolicy --live "allow ..."在root shell中运行并检查操作现在是否成功.如果没有,请扩展您的"允许"规则.您可以在一次supolicy调用中指定多个"允许"规则.

请注意,这supolicy是一项昂贵的操作,因此请务必只调用一次.

如果您不想依赖Chainfire的SuperSU,您可以尝试sepolicy-inject.我自己没有测试过.


use*_*570 2

我一直在尝试在 Android 4.3 上禁用 SELinux 一段时间,这就是我的想法。

在 Samsung S4 Android 4.3 上,setenforce 0 将更改为Permissive模式。

在 Samsung Note 3 Android 4.3 上,setenforce 0 不会更改 SELinux 状态。

我尝试过 Nexus 4 Android 4.3,但默认情况下它是Permissive模式

  • @MatthiasUrlichs 他没有?他给出了一种在运行时主动改变 SELinux 实施的方法。OP 表示他的问题与此直接相关。我可以确认,当在 CyanogenMod 11 中以 root 身份运行“setenforce”时,SELinux 状态将会改变。 (2认同)