每个域都有不同的含义,例如,system_app包括所有共享系统uid的应用程序,而platform_app包括所有签署平台密钥的应用程序。
所有的SE文件都位于external/sepolicy中,我可以从这些文件中修改规则。
是否可能定义一个指向特定包名(例如com.google.android.music)的新域?
我没有找到任何关于此的文档或示例,因此我不确定如何做到这一点。
我将感激任何建议或评论。
谢谢。
seapp_contexts
中定义一个新域,就像这样:
user=_app domain=googlemusic seinfo=platform name=com.google.android.music type=app_data_file
然后定义一个新域googlemusic
的权限。googlemusic.te
的te文件。
type googlemusic_app,domain
app_domain(googlemusic)
#更多权限
仅供更新@alec.tu的Android 12答案 - 在googlemusic.te文件中,前两行应为:
typeattribute googlemusic_app coredomain;
app_domain(googlemusic_app)
另一个新文件-system/sepolicy/public/googlemusic_app.te应该被创建,并带有以下内容:
type googlemusic_app, domain;
好的,对于那些想要实现这个目标的人:在AOSP 11中,如果您在构建过程中遇到包含“neverallow”的任何内容的错误,您需要为您的应用程序指定一个域。我在尝试在device/yourvendor/yourdevice/sepolicy文件夹中的platform_app.te文件中编写以下行时遇到了此错误:
allow platform_app sysfs:file { getattr open read };
构建停止并显示了违反neverallow规则的错误。
解决方案是打开seapp_contexts文件,然后添加以下行:
解释:
user=_app domain=*您可以随意命名它,比如selinuxtest,但必须添加“_app”,因此它应该是selinuxtest_app seinfo=platform name=com.yourappname.whatever type=app_data_file levelFrom=all
例如:
user=_app domain=selinuxtest_app seinfo=platform name=com.testapplication.myname type=app_data_file levelFrom=all
然后,在与platform_app.te相同的文件夹中创建一个文件,我们的情况下应该是selinuxtest.te,并将以下内容放入其中:
解释:
定义变量:yourappdomainname & "_app", domain; app_domain(yourappdomainname & "_app")
示例:
定义变量 selinuxtest_app, domain; app_domain(selinuxtest_app)
允许 selinuxtest_app 访问 sysfs:file { getattr open read };
完成!这样就可以只授权给你自己的应用程序访问。