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

Привилегированные приложения — это системные приложения, расположенные в 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 может предоставлять или запрещать разрешения только для привилегированных приложений в том же разделе. Например, если приложение в разделе /product запрашивает привилегированные разрешения, запрос может быть предоставлен или отклонен только privapp-permissions.xml , который также находится в /product .

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

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

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

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

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

<!-- This XML file declares which signature|privileged permissions to grant 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 the 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 allowlist

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

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

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

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