提问人:Martin L. 提问时间:10/6/2013 最后编辑:Breno LeitãoMartin L. 更新时间:11/18/2023 访问量:51143
在 Android 上临时禁用或修改 SELinux
Temporary disable or modify SELinux on Android
问:
我是Android根应用程序的开发人员。
可悲的是,现在在某些设备/ROM 上,SELinux 处于强制模式,并阻止了我的应用程序的某些操作。
因为这是一个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-file 以允许被阻止的命令并触发它的重新加载,但我既不确定这是否以及如何工作,也不是一个好主意。
谁还有更多提示或资源给我?
答:
一段时间以来,我一直在尝试在 Android 4.3 上禁用 SELinux,这就是我想出的。
在三星 S4 Android 4.3 上,将更改为模式。setenforce 0
Permissive
在Samsung Note 3 Android 4.3上,不会更改SELinux状态。setenforce 0
我尝试过Nexus 4 Android 4.3,但默认情况下它是模式Permissive
评论
setenforce
如果您具有 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();
}
评论
您可以下载应用程序名称 selinux mod changer。它不在 Play 商店中,因此您可以从 chrome 或您选择的任何其他浏览器下载它。应用程序只需要root权限,所以尝试一下。
您可以从SuperSU应用程序使用supolicy
,请参阅链接以获取何时以及如何调用它的详细说明。
总之:
- 通过检查审计消息,找出 SELinux 阻止某些内容的原因,例如
dmesg | grep "audit"
- 创建允许被阻止操作的规则。它们与 SELinux *.te 文件中的“允许”规则相似(相同?)。
allow ...
- 在 root shell 中运行并检查操作现在是否成功。如果没有,请扩展您的“允许”规则。您可以在单个调用中指定多个“允许”规则。
supolicy --live "allow ..."
supolicy
请注意,这是一项成本高昂的操作,因此请确保仅调用一次。supolicy
如果您不想依赖 Chainfire 的 SuperSU,您可以尝试 sepolicy-inject
。我自己没有测试过。
评论
supolicy
setpolicy-inject
使用文本编辑器搜索编辑根目录(第一个目录)上的系统文件夹中的文件build.prop
selinux
如果您看到类似 ,请将其更改为 ,如果要禁用,反之亦然enable_selinux=1
0
更改将在重新启动或启动后应用。
同样,您可以打开/关闭多用户帐户,系统更新。我的设备制造商禁用了系统更新。
评论
ro.buid.selinux = 1
加
androidboot.selinux=permissive
到内核引导参数
如果要禁用 SElinux 并使整个系统,则需要更改位于 的功能。两个函数,并设置以不同单位调用的 SElinux 的状态。如果同时更改 as 和 的 return 值,则 SElinux 状态将始终为宽松。您可以在此处找到更多详细信息。permissive
selinux.cpp
system/core/init
StatusFromProperty()
IsEnforcing()
SELINUX_PERMISSIVE
false
评论
avc: denied { execstack } for pid=10971
execstack
su
execstack