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

Posted

技术标签:

【中文标题】访问 `proc` 文件系统以从系统应用程序中读取 `/proc/[pid]/some-file`【英文标题】:Accessing `proc` file-system to read `/proc/[pid]/some-file` from a system app 【发布时间】:2021-05-26 14:40:24 【问题描述】:

我有一个自定义 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>

我通过编辑适当的platform.xmlAndroidManifest.xmlsytem-current.txt 文件添加了com.poke.READPROC_PERM,并在privapp-permissions 文件中允许该权限

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

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

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

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

# 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 就好了,但它也是由 first line 的 shell.te 定义的 coredomain 似乎也很奇怪:

typeattribute shell coredomain;

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

【问题讨论】:

应用程序开发在这里是题外话。我正在投票将这个问题迁移到 ***.com。 从最终用户的角度来看,您可以将 avc 拒绝从 dmesg 转换为 SEPolicy 规则,并在运行时使用 Magisk 的 supoliy 工具注入它们。我现有的答案可能会有所帮助:android.stackexchange.com/search?q=user%3A218526+supolicy @IrfanLatif 谢谢,您的回答很有帮助,但是我试图在构建时允许这样做,这样之后用户就不会参与其中。我使用audit2allow 生成新规则,但正如我所提到的,构建表明它们与某些禁止规则相矛盾 【参考方案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

    将自定义域标记为 coredomain:

    typeattribute my_custom_domain coredomain;

然后您将使用 neverallow 限制。

【讨论】:

以上是关于访问 `proc` 文件系统以从系统应用程序中读取 `/proc/[pid]/some-file`的主要内容,如果未能解决你的问题,请参考以下文章

Linux系统的/proc目录

linux /proc目录说明(访问内核数据结构,修改内核设置)

手机中proc文件夹的作用,能删吗

linux系统下的/proc目录介绍

proc文件系统

Linux下/proc目录简介