android - 如何检测 SELinux 是否在 Android 应用程序中启用?

标签 android selinux

我正在尝试使用 Google 在我的 Android 应用程序中发布的 SecureRandom 解决方法: http://android-developers.blogspot.com/2013/08/some-securerandom-thoughts.html

这项工作涉及写入(和读取)/dev/urandom。但是,三星似乎以阻止应用程序访问/dev/urandom 的方式启用了 SELinux。

我没有这些设备之一,所以我很难测试解决方案,除了在 Android 市场上推出解决方法的尝试之外,但这似乎不是我可以解决的错误用 try catch block 陷阱。 File.canRead 和 canWrite 似乎也返回 true。您可以在以下类的 supportedOnThisDevice 方法中看到我尝试的解决方法: PRNGFixes.java

我正在寻找一种可靠的方法来检测我是否属于此类设备,如果是,则不应用 Google SecureRandom 解决方法。

最佳答案

这是我检查 SELinux 是否处于强制模式的方法 - 可以通过任何 Shell 脚本完成,不依赖于 RootTools:

private static boolean isSELinuxEnforcing() {
    try {
        CommandCapture command = new CommandCapture(1, "getenforce");
        RootTools.getShell(false).add(command).waitForFinish();
        boolean isSELinuxEnforcing = command.toString().trim().equalsIgnoreCase("enforcing");
        return isSELinuxEnforcing;
    } catch (Exception e) {
        // handle exception
    }
    return false;
}

关于android - 如何检测 SELinux 是否在 Android 应用程序中启用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18727941/

相关文章:

android - 从eclipse导入到android studio?

android - Jenkins:Gradle 构建:AAPT2 问题:AAPT2 aapt2-3.4.0-5326820-windows 守护进程 #0:守护进程启动失败

android - Butterknife 7.x 是否适用于 Kotlin M14?

ubuntu - Docker 在 ubuntu 上使用 SELinux 运行违反约束

android - Android 上的 kivy/Python 缺少 Unicode 编解码器?

java - 将操作、数据和类别信息添加到 Android list 中是必要的

PHP MySQLi 权限被拒绝但从 MySQL CLI 工作

sockets - 在 centos 7 上运行的容器中无法访问/var/run/docker.sock

CENTOS 8/SELinux 的 Pm2 启动问题

c 程序 security_getenforce() 未找到