【问题标题】:Interact with SELinux on GenyMotion Virtual Device在 GenyMotion 虚拟设备上与 SELinux 交互
【发布时间】:2018-12-15 19:03:40
【问题描述】:

我阅读了很多关于 SELinux 的信息,我很想尝试为大学做一个案例研究。 我在 GenyMotion 上安装了各种虚拟设备,从 Android 6 到 Android 9,但没有人拥有 SElinux:当我执行“sestatus”时,它会回答“已禁用”。 我认为启用它还不够,似乎模块必须安装在内核中,有人可以告诉我该怎么做吗?我试过但我没有发现任何东西,我遇到了很多困难,这是我第一次做这些事情。 提前感谢大家。

【问题讨论】:

    标签: android selinux


    【解决方案1】:

    最后我设法使一切正常:我能够通过 GenyMotion 虚拟设备中的终端访问 Selinux 信息。 Selinux 已经在 4.3 版之后的设备上处于活动状态,不需要像 @Martin Zeitler 所说的那样安装它。我解释了问题的解决方案(在 Linux 上有效)。

    1. 首先要做的是在虚拟设备中安装一个终端:我已经安装了Termux。为此,只需从站点下载 apk 并将其拖到虚拟设备上,安装就会开始。随后,需要向 Termux 终端提供 SuperUser 权限:通常,通过打开终端,提供 SU 命令,设备会询问您是否要向 Termux 应用程序提供 SuperUser 权限。当您输入 SU 命令时,它将允许您浏览设备上的文件夹。使用“ls”命令,提供“-Z”选项,您可以查看文件的 SElinux 上下文。从终端,使用“getenforce”命令,你可以看到 Selinux 是如何运行的。在这里你会看到其他有用的命令:https://www.all-things-android.com/content/se-android-commands
    2. 现在,您需要下载允许我们与 Selinux 交互的工具:setools。 https://github.com/pasis/setools-android这些工具是用Android原生语言C编写的,需要下载NDK库编译:https://developer.android.com/ndk/downloads/
    3. 编译的第一件事,就是指定工程路径: 导出 NDK_PROJECT_PATH=/my/project/path 。第二步是指定makefile: ndk-build NDK_APPLICATION_MK=/my/project/Makefile.am(完整指南:https://software.intel.com/en-us/articles/building-an-android-command-line-application-using-the-ndk-build-tools
    4. 完成编译后,您可以使用 adb 程序将 Setools 文件夹发送到虚拟设备。 ./adb push /settool/local/folder /remote/device/folder (例如:./adb /setool /tmp) 现在您的设备上已安装了 Setool,您可以运行“/setool/obj/local/x86”文件夹中的工具。借助“sepolicy-inject”,您还可以将规则添加到策略中。

    最后,感谢本指南,我意识到 Selinux 策略是以二进制格式存储的,因此没有工具就无法与它们进行交互。 https://ge0n0sis.github.io/posts/2015/12/exploring-androids-selinux-kernel-policy/

    【讨论】:

      【解决方案2】:

      无法在 Android 上“安装 SE Linux”;因为它自 API 级别 21 起已默认安装并启用。您需要成为用户 root,才能访问这些管理命令。这只能在有根的硬件设备或有根的模拟器映像上实现。

      ...只需安装 CentOS 或其他任何启用安全性的 Linux 发行版,以进行测试。

      【讨论】:

      • 谢谢,但我知道所有 Genymotion 虚拟机都默认植根。当我给出命令“whoami”时,它会回答“root”。我需要在 Android rom 上运行这些测试,在 Arch Linux 上使用 SELinux 没有问题。更多提示?
      • 我已通过转到“设置-关于-构建(7 次)”启用了开发人员设置。然后,当我进入开发人员设置时,我启用了 ADB 调试,但我没有找到有关 root 访问的其他选项。我在虚拟设备“Google Nexus 6 - 6.0.0 - API 23”、“自定义电话 -5.0.0 - API 21”和“自定义电话 - 7.0.0 - api24”上都试过了。我也尝试使用“搜索”功能,但它没有出现在结果中。我能做些什么? “su --help”命令有效,他用指南回答我。但如果我执行“su -c semanage”,我会回答“semanage: not found”
      • @Giupo 当whoamirootsu 甚至不需要(那里错了)。 ls /usr/sbin/se* 应该显示哪些命令可用。与busybox 相比,裸露的Android shell 相当简陋。见source.android.com/security/selinux ...应用抽屉中可能有一个superuser应用程序,可用于授予终端访问权限。
      • @Giupo adb root 还应该提供一个 root shell,当模拟器被植根时......而当设备上的 shell 终端不能按预期工作时,可能需要替换 @987654331 @二进制。
      • 谢谢。虽然“whoami”说我是“root”,但必须从Android终端运行“SU”,这样系统才需要通过“SuperUser”应用程序授予我“root”访问权限,虽然它已经“根”。现在我设法解决了我所有的问题,我写了一个包含所有必要信息的答案。
      猜你喜欢
      • 2015-02-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-09-12
      • 2014-01-06
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多