Lista de permissões privilegiadas

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

  • Android 9 e versões mais recentes: /system, /product, /vendor
  • Android 8.1 e versões anteriores: /system
. .

Historicamente, os fabricantes de dispositivos tinham pouco controle sobre quais assinatura | 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 /etc/permissions. A partir do Android 9, os implementadores podem conceder ou negar explicitamente todas as permissões com privilégios. Se as permissões privilegiadas não forem concedidas, o dispositivo não inicializa.

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

Adicionar uma lista de permissões

As listas de permissões para apps 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 rígida se aplica à organização do conteúdo. Os implementadores de dispositivos podem determinar a estrutura do conteúdo, contanto que todos os apps do /system/priv-app estão na lista de permissões. Por exemplo, o Google desenvolveu uma única lista de permissões para todos os apps com privilégios. Recomendamos a seguinte organização:

  • Permissões para apps já incluídos no Android Open Source Project (AOSP) são listados 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. 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>
    ...

Encontrar 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 informadas no arquivo de registro. Permissões não privilegiadas são concedidas. Isso garante que o dispositivo permaneça em um estado de trabalho e ainda forneça a lista de e violações de conformidade. 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 precisam ser corrigidas adicionando as permissões ausentes às listas de permissões apropriadas. Observe que em:

  • No Android 9 e versões mais recentes, as violações de permissões privilegiadas impedem que o dispositivo começando. Em vez disso, é preciso permitir ou negar explicitamente todas as permissões com privilégios.
  • No Android 8.0 e versões anteriores, as permissões ausentes não são concedidas aos apps afetados, apesar estar no caminho priv-app.

Aplicar uma lista de permissões

Depois de criar as listas de permissões, ative a aplicação do ambiente de execução definindo o build propriedade ro.control_privapp_permissions=enforce.

A lista de permissões só é necessária para permissões declaradas por apps com package="android": O ro.control_privapp_permissions o estado da propriedade precisa seguir Seção 9.1 Permissões no Documento de definição de compatibilidade (CDD).