Lista de permissões de permissões privilegiadas

Aplicativos privilegiados são aplicativos de sistema localizados em um diretório priv-app em uma partição de imagem do sistema. As partições usadas para versões do Android são:

  • Android 9 e superior: /system, /product, /vendor
  • Android 8.1 e inferior: /system

Historicamente, os fabricantes de dispositivos tinham pouco controle sobre qual assinatura | permissões privilegiadas podem ser concedidas a aplicativos privilegiados. A partir do Android 8.0, os fabricantes podem conceder explicitamente permissões privilegiadas nos arquivos XML de configuração do sistema no diretório /etc/permissions . A partir do Android 9, os implementadores podem conceder ou negar explicitamente todas as permissões privilegiadas. Se as permissões privilegiadas não forem concedidas, o dispositivo não inicializará.

O arquivo privapp-permissions.xml só pode conceder ou negar permissões para aplicativos privilegiados na mesma partição. Por exemplo, se um aplicativo na partição /product solicitar permissões privilegiadas, a solicitação só poderá ser concedida ou negada por um arquivo privapp-permissions.xml em /product .

Adicionar uma lista de permissões

As listas de permissões para aplicativos podem ser listadas em um único arquivo XML ou em vários arquivos XML localizados no diretório frameworks/base/etc/permissions :

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

Nenhuma regra estrita se aplica à forma como o conteúdo é organizado. Os implementadores de dispositivos podem determinar a estrutura do conteúdo, desde que todos os aplicativos de /system/priv-app estejam na lista de permissões. Por exemplo, o Google desenvolveu uma lista única de permissões para todos os aplicativos privilegiados. Recomendamos a seguinte organização:

  • As permissões para aplicativos já incluídos na árvore do Android Open Source Project (AOSP) estão listadas em /etc/permissions/privapp-permissions-platform.xml .
  • Para outros aplicativos, use arquivos no formato /etc/permissions/privapp-permissions- DEVICE_NAME .xml .

Personalizar uma lista de permissões

O AOSP inclui uma implementação de lista de permissões que pode ser personalizada conforme necessário.

Se uma permissão precisar ser negada, edite o XML para usar uma tag deny-permission em vez de uma tag permission . Por exemplo:

<!-- 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>
    ...

Encontre permissões ausentes

Para encontrar permissões ausentes ao iniciar um novo dispositivo, ative o modo de registro transicional:

ro.control_privapp_permissions=log

As violações são relatadas no arquivo de log. Permissões não privilegiadas são concedidas. Isso garante que o dispositivo permaneça em condições de funcionamento, ao mesmo tempo que fornece a lista de violações. O formato da mensagem de erro é o seguinte:

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

Todas as violações devem ser resolvidas adicionando as permissões ausentes às listas de permissões apropriadas. Observe que em:

  • Android 9 e superior, violações de permissões privilegiadas impedem a inicialização do dispositivo. Em vez disso, você deve permitir ou negar explicitamente todas as permissões privilegiadas.
  • Android 8.0 e inferior, as permissões ausentes não são concedidas aos aplicativos afetados, apesar de estarem no caminho priv-app .

Aplicar uma lista de permissões

Depois de criar suas listas de permissões, habilite a aplicação do tempo de execução definindo a propriedade de build ro.control_privapp_permissions=enforce .

A lista de permissões é necessária apenas para permissões declaradas por aplicativos com package="android" . O estado da propriedade ro.control_privapp_permissions deve aderir à Seção 9.1 Permissões no Documento de Definição de Compatibilidade (CDD).