访问 `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
文件的应用程序,例如stat
和 status
,有点像 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.xml
、AndroidManifest.xml
和sytem-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`的主要内容,如果未能解决你的问题,请参考以下文章