在Android SELinux中,是否可以使用包名作为域名?

5
Android SELinux(也可以称为SEAndroid)定义了许多域,包括system_app、platform_app、isolated_app等。
每个域都有不同的含义,例如,system_app包括所有共享系统uid的应用程序,而platform_app包括所有签署平台密钥的应用程序。
所有的SE文件都位于external/sepolicy中,我可以从这些文件中修改规则。
是否可能定义一个指向特定包名(例如com.google.android.music)的新域?
我没有找到任何关于此的文档或示例,因此我不确定如何做到这一点。
我将感激任何建议或评论。
谢谢。

你能找到解决方案吗?我也需要类似的东西! - thiagolr
是的,请查看下面的自我回答。 - alec.tu
3个回答

9
经过长时间的研究,我找到了一种方法来为指定的软件包定义一个新域。
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) #更多权限

0

仅供更新@alec.tu的Android 12答案 - 在googlemusic.te文件中,前两行应为:

typeattribute googlemusic_app coredomain;
app_domain(googlemusic_app)

另一个新文件-system/sepolicy/public/googlemusic_app.te应该被创建,并带有以下内容:

type googlemusic_app, domain;

你可以合并这两个文件,只需创建一个文件即可。 - Chef Pharaoh

0

好的,对于那些想要实现这个目标的人:在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 };

完成!这样就可以只授权给你自己的应用程序访问。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接