访问 `proc` 文件系统以从系统应用程序读取 `/proc/[pid]/some-file`

问题描述

我有一个自定义的 A10 存储库,我试图在其中创建一个能够读取 /proc/[pid]/some-file 文件的应用程序,例如statstatus,有点像 ps

阅读此 answer 后,很明显应该添加一个 AID_READPROC,这是我使用自定义权限完成的。

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.poke.mon"
    android:sharedUserId="android.uid.system">
<!-- More stuff -->
         <uses-permission android:name="com.poke.READPROC_PERM" />
<!-- More stuff -->
  </application>
</manifest>

我通过编辑相应的 com.poke.READPROC_PERMplatform.xmlAndroidManifest.xml 文件并在 sytem-current.txt 文件中允许该权限来添加 privapp-permissions

我已通过 cat-ing 应用进程的 status 文件进行验证,并验证 gid 3009 确实存在。

但是我仍然被 sepolicy 阻止(禁用强制执行,代码可以访问文件)。

r_dir_file(priv_app,proc) 添加priv_app.te 会导致错误

编译器给出的原因是 coredomain.te 中的这个 line :

# Core domains are not permitted to use kernel interfaces which are not
# explicitly labeled.
# Todo(b/65643247): Apply these neverallow rules to all coredomain.
full_treble_only(`
  # /proc
  neverallow {
    coredomain
    -init
    -vold
  } proc:file no_rw_file_perms;

创建自定义域导致了我可能想要的类似错误

typeattribute my_apps_domain coredomain;

为了避免大量的复杂性和重复(我需要与其他服务等进行通信)。

有没有办法解决这个限制? (例如,查看 genfscon 似乎不支持通配符映射,例如 /proc/\d+/some-file

shell 能够很好地执行 ps 似乎也很奇怪,但它也是由 coredomainfirst line 定义的 shell.te

typeattribute shell coredomain;

那么也许我还缺少其他一些神奇的 sepolicy 门?

解决方法

  1. 为您的应用定义自定义域:

    user=_app isPrivApp=true seinfo=platform name=com.myapp.packagename domain=my_custom_domain type=app_data_file levelFrom=all

参考:https://cs.android.com/android/platform/superproject/+/master:device/google/coral-sepolicy/private/seapp_contexts;drc=01b96a3a966f075abcba27cb415cece348a3278e;l=5

  1. 将自定义域标记为核心域:

    typeattribute my_custom_domain coredomain;

然后您将使用 neverallow 限制。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...