Разрешение среды выполнения Android для системных приложений

Вопрос о разрешениях для Android. AFAIK, Android дает опасное разрешение во время выполнения. Я сбросил свой телефон, затем adb pull /data/system/users/0/runtime-permissions.xml, я обнаружил, что android.ui.system уже предоставил много опасных разрешений. Кто-нибудь может сказать мне, как это происходит?

2 ответа

Решение

Механизм для вставки разрешения времени выполнения в /data/system/users/0/runtime-permissions.xml диалоговое окно подтверждения файла пользователем для уровня разрешений Dangerous предназначено для сторонних приложений и не относится к встроенным приложениям.

Для встроенных / системных приложений и компонентов инфраструктуры все разрешения предоставляются по умолчанию при создании нового пользователя или загрузке устройства и возникновении события systemReady.

Вы можете увидеть AndroidManifest.xml из AOSP, где все типы необходимых разрешений написаны для системных компонентов.

Для сторонних приложений, когда пользователь предоставляет какое-либо разрешение во время выполнения, он добавляется в файл /data/system/users/0/runtime-permissions.xml и удаляется при отзыве разрешения любого стороннего приложения, тогда как после полной фабрики сброс, разрешение во время выполнения всех сторонних приложений удаляется, так как /data/system/users/0/runtime-permissions.xml удаляется (стирание раздела данных).

Но даже после сброса настроек, /data/system/users/0/runtime-permissions.xml содержит разрешения времени выполнения (даже опасный уровень) для системных приложений, см. разрешения по умолчанию: runtime-permissions.xml.

И это происходит потому, что:

Все разрешения по умолчанию предоставляются от PackageManagerServiceс помощью этих двух методов:

newUserCreated() //this get called when new user is created   
systemReady() //this get called when device is booted

и выше методы внутренне вызывают:

DefaultPermissionPolicy.grantDefaultPermissions();

Посмотрите как триггеры DefaultPermissionPolicy

И если вы видите реализацию DefaultPermissionPolicy, она содержит все соответствующие методы для загрузки всех типов разрешений для компонентов системы.

конкретно DefaultPermissionPolicy.grantDefaultPermissions() внутренние звонки

grantPermissionsToSysComponentsAndPrivApps(идентификатор пользователя); grantDefaultSystemHandlerPermissions (USERID);

и это внутренне они звонят grantRuntimePermissionsLPw() метод, который выполняет всю оставшуюся работу.

Список привилегированных разрешений

Производители устройств практически не контролировали, какие подписи|привилегированные разрешения могут быть предоставлены привилегированным приложениям. Начиная с Android 8.0 производители должны явно предоставлять привилегированные разрешения в XML-файлах конфигурации системы в каталоге /etc/permissions.

Android позволяет системным приложениям, присутствующим в этих каталогах (system/product/vendor/oem/ | _ext), вносить свои разрешения в белый список путем записи XML-файла.

  1. Содержимое XML-файла:<permissions> <privapp-permissions package="x.y.z"> <permission name="android.permission.PACKAGE_USAGE_STATS" /> </privapp-permissions> </permissions>

  2. Файл Android.bp:prebuilt_etc { name: "x.y.z.xml", system_ext_specific: true, src: "x.y.z.xml", sub_dir: "permissions", }

  3. Добавьте 'xyzxml' в PRODUCT_PACKAGES, чтобы сделать эту часть окончательного изображения (так же, как для приложения)

  4. По цели: XML-файл можно найти в разделе «partition/etc/permissions/priv-app».

  5. PackageManager анализирует все файлы XML и вносит в белый список разрешения, упомянутые для имени пакета, при установке приложения при загрузке.

Другие вопросы по тегам