Android 模拟器的 SELinux 策略

Android 模拟器的 SELinux 策略

Google Android 模拟器需要execheap权限,否则当 SElinux 处于强制模式时会出现段错误。对于那些不熟悉 Android 模拟器的人:它使用 qemu 的分叉版本。

两个简单的解决方案是

  • setenforce 0
  • setsebool -P allow_execheap 1

显然,从安全角度来看,这些远非理想。另外,希望获得补丁以便模拟器不需要 execheap 可能需要很长时间。

然而,在我的审核日志中,我发现有问题的进程确实是qemu-system-x86_64-headless捆绑的二进制文件,而不是“原始”进程。因此,标签有所不同。

semanage fcontext --list | grep qemu-kvm
/usr/bin/qemu-kvm                                  regular file       system_u:object_r:qemu_exec_t:s0
ls -laZ /root/android_sdk/emulator/qemu/linux-x86_64
-rwxr-xr-x. 1 root root unconfined_u:object_r:user_home_t:s0 31174856 Aug  1 16:32 qemu-system-x86_64-headless

其他报告execheap指出问题出在 GPU 驱动程序上。我运行的机器既没有 GPU 也没有 iGPU。使用的Vulkan设备是Swiftshader。

不幸的是,我对 SElinux 完全陌生。

  • 我需要为模拟器编写自定义策略吗?如何?我如何按照上述政策运行它?
  • 为可执行文件添加标签就足够了吗?我怎么做?
  • 如果不全局启用 execheap 或将 SElinux 设置为宽容模式,我还能如何使其工作?

相关内容