问题描述
我有一个自定义的 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>
我通过编辑相应的 com.poke.READPROC_PERM
、platform.xml
和 AndroidManifest.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
似乎也很奇怪,但它也是由 coredomain
的 first line 定义的 shell.te
:
typeattribute shell coredomain;
那么也许我还缺少其他一些神奇的 sepolicy 门?
解决方法
-
为您的应用定义自定义域:
user=_app isPrivApp=true seinfo=platform name=com.myapp.packagename domain=my_custom_domain type=app_data_file levelFrom=all
-
将自定义域标记为核心域:
typeattribute my_custom_domain coredomain;
然后您将使用 neverallow 限制。