Google is committed to advancing racial equity for Black communities. See how.
Эта страница была переведа с помощью Cloud Translation API.
Switch to English

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

Привилегированные приложения - это системные приложения, которые находятся в priv-app на одном из разделов образа системы. Разделы, используемые для выпусков Android:

  • Android 8.1 и ниже - /system
  • Android 9 и выше - /system, /product, /vendor

На этой странице /etc/permissions/priv-app в partition /etc/permissions/priv-app .

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

privapp-permissions.xml может предоставлять или запрещать разрешения только для привилегированных приложений в том же разделе. Например, если приложение в разделе /vendor запрашивает привилегированные разрешения, запрос может быть предоставлен или отклонен только privapp-permissions.xml который также находится в /vendor .

Добавление белых списков

Белые списки разрешений для приложений могут быть указаны в одном XML-файле или в нескольких XML-файлах, расположенных в каталоге frameworks/base/etc/permissions следующим образом:

  • /etc/permissions/privapp-permissions- OEM_NAME .xml
  • /etc/permissions/privapp-permissions- DEVICE_NAME .xml

Не существует строгих правил организации контента. /system/priv-app устройств могут определять структуру контента, если все приложения из /system/priv-app находятся в белом списке. Например, Google имеет единый белый список для всех привилегированных приложений, разработанных Google, и рекомендует следующую организацию:

  • Разрешения для приложений, которые уже включены в дерево Android Open Source Project (AOSP), перечислены в /etc/permissions/privapp-permissions-platform.xml .
  • Разрешения для приложений Google перечислены в /etc/permissions/privapp-permissions-google.xml .
  • Для других приложений используйте файлы формы: /etc/permissions/privapp-permissions- DEVICE_NAME .xml .

Создание белых списков

Чтобы автоматически создать белый список для всех приложений, доступных в образе системы, используйте инструмент командной строки AOSP по адресу development/tools/privapp_permissions/privapp_permissions.py . Чтобы создать начальную версию privapp-permissions.xml конкретного privapp-permissions.xml :

  1. Создайте образ системы:
        . build/envsetup.sh
        lunch PRODUCT_NAME
        make -j
  2. Запустите сценарий privapp_permissions.py чтобы сгенерировать файл privapp-permissions.xml котором перечислены все подписи | привилегированные разрешения, необходимые для включения в белый список:
    development/tools/privapp_permissions/privapp_permissions.py
    Этот инструмент печатает XML-контент, который можно использовать как один файл или разбить на несколько файлов в /etc/permissions путь к каталогу. Если устройство уже включает белые списки в каталогах /etc/permissions , инструмент печатает только различия (например, отсутствующая подпись | привилегированные разрешения, которые необходимо добавить в белый список). Это также полезно для целей аудита: при добавлении новой версии приложения инструмент определяет необходимые дополнительные разрешения.
  3. Скопируйте сгенерированные файлы в соответствующий каталог /etc/permissions , откуда система считывает файлы во время загрузки.

Настройка белых списков

AOSP включает реализацию белого списка, который можно настроить по мере необходимости. Разрешения для приложений, включенных в AOSP, уже внесены в белый список в /etc/permissions/privapp-permissions-platform.xml .

По умолчанию сценарий privapp_permissions.py генерирует вывод, который автоматически предоставляет любое разрешение, запрошенное привилегированным приложением. Если есть разрешения, которые следует отклонить, отредактируйте XML, чтобы использовать тег «deny-permission» вместо тега «permission». Пример:

<!--
    This XML file declares which signature|privileged permissions should be
    granted to privileged apps that come with the platform
    -->
    <permissions>
<privapp-permissions package="com.android.backupconfirm">
    <permission name="android.permission.BACKUP"/>
    <permission name="android.permission.CRYPT_KEEPER"/>
</privapp-permissions>
<privapp-permissions package="com.android.cellbroadcastreceiver">
    <!-- don't allow application to interact across users -->
    <deny-permission name="android.permission.INTERACT_ACROSS_USERS"/>
    <permission name="android.permission.MANAGE_USERS"/>
    <permission name="android.permission.MODIFY_PHONE_STATE"/>
    <permission name="android.permission.READ_PRIVILEGED_PHONE_STATE"/>
    <permission name="android.permission.RECEIVE_EMERGENCY_BROADCAST"/>
</privapp-permissions>
    ...

Поиск отсутствующих разрешений

Чтобы найти недостающие разрешения при подключении нового устройства, включите переходный режим журнала:

ro.control_privapp_permissions=log

О нарушениях сообщается в файле журнала, но непривилегированные разрешения по-прежнему предоставляются. Это поддерживает устройство в рабочем состоянии, а также предоставляет список нарушений. Это формат сообщения об ошибке:

PackageManager: Privileged permission {PERMISSION_NAME} for package {PACKAGE_NAME} - not in privapp-permissions whitelist

Все нарушения должны быть устранены путем добавления недостающих разрешений в соответствующие белые списки.

  • На Android 8.0 и ниже затронутым приложениям не предоставляются недостающие разрешения, даже если они находятся в пути priv-app .
  • На Android 9 и выше нарушение ( привилегированных разрешений) означает, что устройство не загружается . Вы должны явно разрешить или запретить все привилегированные разрешения

Применение белых списков

После создания белых списков включите принудительное исполнение во время выполнения, установив свойство сборки ro.control_privapp_permissions=enforce .