Можно ли использовать имя пакета в качестве имени домена в 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;