Можно ли использовать имя пакета в качестве имени домена в Android SELinux?

Android SELinux(или, можно сказать, SEAndroid) определяет множество доменов, включая system_app, platform_app, isolated_app и т. Д.

Каждый домен имеет разные значения, например, system_app включает в себя все приложения, которые используют системный uid, а platform_app включает в себя все приложения, которые подписывают ключ платформы.

Все файлы SE находятся во внешней /sepolicy, я могу изменить правила из этих файлов.

Можно ли определить новый домен, который указывает на указанное имя пакета (например, com.google.android.music)?

Я не нахожу никаких документов или примеров по этому поводу, поэтому я не уверен, как это сделать.

Буду признателен за любые предложения или комментарии.

Спасибо.

3 ответа

Решение

После долгих исследований я нашел способ определения нового домена для указанного пакета

Определить новый домен в seapp_contexts

как это,

user=_app domain=googlemusic seinfo=platform name=com.google.android.music type=app_data_file

затем определите разрешение нового домена googlemusic

создать файл с именем te googlemusic.te

type googlemusic_app,domain

app_domain(googlemusic)

#more permissions

Хорошо, для тех, кто пытается этого добиться: в AOSP 11, если вы получаете сообщение об ошибке при сборке, содержащее что-либо с «никогда не разрешать», вам нужно указать домен для своего приложения. Я получил эту ошибку, пытаясь сделать это в файле platform_app.te в устройстве / yourvendor / yourdevice / sepolicy, написав строку:allow platform_app sysfs:file {getattr open read};.

Сборка остановилась из-за ошибки при нарушении правила neverallow.

Решение состоит в том, чтобы открыть файл seapp_contexts, а затем добавить строку:

Объяснение:

user=_app domain=*вы можете назвать его как хотите, скажем, selinuxtest, но вы должны добавить «_app», так что это должно быть selinuxtest_app seinfo=название платформы=com. имя вашего приложения . любой тип = app_data_file levelFrom = all

Пример:

user=_app domain=selinuxtest_app seinfo=имя платформы=com.testapplication.myname type=app_data_file levelFrom=all

затем создайте файл в той же папке, что и platform_app.te, в нашем случае это должен быть selinuxtest.te, и просто поместите в него это:

Объяснение:

введите yourappdomainname & "_app" , домен; app_domain ( имя вашего приложения и "_app" )

Пример:

введите selinuxtest_app, домен; app_domain (selinuxtest_app)

разрешить selinuxtest_app sysfs:file {getattr open read};

вуаля! Это работает так: доступ предоставляется только для вашего собственного приложения/приложений.

Просто, чтобы обновить ответ @alec.tu для Android 12 - в файле googlemusic.te должны быть две первые строки:

      typeattribute googlemusic_app coredomain;
app_domain(googlemusic_app)

И еще один новый файл - system/sepolicy/public/googlemusic_app.te должен быть создан с содержимым:

      type googlemusic_app, domain;
Другие вопросы по тегам