在 Android 上临时禁用或修改 SELinux

问题描述 投票:0回答:7

我是 Android root 应用程序的开发人员。

遗憾的是,现在在某些设备/ROM 上,SELinux 处于 enforce 模式,并阻止我的应用程序的某些操作。

因为这是一个 root 应用程序,所以用户授予我 root 访问权限!

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

我尝试通过

临时禁用 SELinux
setenforce permissive -> no failure, but getenforce still returns "Enforcing"
echo 0 > /sys/fs/selinux/enforce -> no failure, but getenforce still returns "Enforcing"

我想在运行时编辑 sepolicy 文件以允许被阻止的命令并触发其重新加载,但我不确定这是否以及如何工作,也不是一个好主意。

谁能给我一些更多的建议或资源?

android selinux
7个回答
13
投票

您可以在 SuperSU 应用程序中使用

supolicy
,请参阅链接以了解何时以及如何调用它的详细说明。

简而言之:

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

请注意,

supolicy
是一个昂贵的操作,因此请务必仅调用它一次。

如果您不想依赖Chainfire的SuperSU,您可以尝试

sepolicy-inject
。我自己没有测试过。


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
模式


2
投票

使用文本编辑器搜索根目录(第一个目录)上的系统文件夹中的

build.prop
编辑
selinux

文件

如果您看到类似

enable_selinux=1
的内容,请将其更改为
0
,如果要禁用,则反之亦然

更改将在重新引导或启动后应用。

同样,您可以打开/关闭多用户帐户、系统更新。我的设备制造商禁用了系统更新。


1
投票

如果您有 root 访问权限,请运行

su 0 setenforce 0
更改为
Permissive
模式:

// Set SELinux to permissive
private static final String COMMAND = "su 0 setenforce 0"; 
try {
  Runtime.getRuntime().exec(COMMAND);
} catch (IOException e) {
  e.printStackTrace();
}

1
投票

您可以下载应用程序名称selinux modchanger。它不在 Play 商店中,因此您可以从 Chrome 或您选择的任何其他浏览器下载它。应用程序只需要 root 权限,所以尝试一下。


0
投票

添加

androidboot.selinux=permissive

你的内核启动参数


0
投票

如果你想禁用SElinux并使整个系统

permissive
,你需要更改位于
selinux.cpp
system/core/init
功能。
StatusFromProperty()
IsEnforcing()
两个函数设置SElinux的状态,这两个函数在不同的单元中被调用。如果您更改
SELINUX_PERMISSIVE
false
的返回值,SElinux 状态将始终是许可的。您可以在此处找到更多详细信息。

© www.soinside.com 2019 - 2024. All rights reserved.