O Google tem o compromisso de promover a igualdade racial para as comunidades negras. Saiba como.
Esta página foi traduzida pela API Cloud Translation.
Switch to English

Lista de permissões de permissão privilegiada

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

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

Em toda esta página, /etc/permissions/priv-app resolve a partition /etc/permissions/priv-app .

Historicamente, os fabricantes de dispositivos tinham pouco controle sobre quais permissões de assinatura | privilegiadas poderiam ser concedidas a aplicativos privilegiados. A partir do Android 8.0, os fabricantes devem 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 devem conceder ou negar explicitamente todas as permissões privilegiadas ou 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 /vendor solicitar permissões privilegiadas, a solicitação só pode ser concedida ou negada por um arquivo privapp-permissions.xml que também está em /vendor .

Adicionando listas de permissões

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

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

Não existe uma regra estrita para organizar o conteúdo. 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 tem uma única lista de permissões para todos os aplicativos privilegiados desenvolvidos pelo Google e recomenda a seguinte organização:

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

Gerando listas de permissão

Para gerar automaticamente uma lista de permissões para todos os aplicativos disponíveis na imagem do sistema, use a ferramenta de linha de comando AOSP em development/tools/privapp_permissions/privapp_permissions.py . Para gerar uma versão inicial de privapp-permissions.xml específico do dispositivo:

  1. Crie uma imagem do sistema:
        . build/envsetup.sh
        lunch PRODUCT_NAME
        make -j
  2. Execute o script privapp_permissions.py para gerar um arquivo privapp-permissions.xml que lista todas as assinaturas | permissões privilegiadas necessárias para permitir a lista de permissões:
    development/tools/privapp_permissions/privapp_permissions.py
    Esta ferramenta imprime conteúdo XML que pode ser usado como um único arquivo ou dividido em vários arquivos no Caminho do diretório /etc/permissions . Se o dispositivo já inclui listas de /etc/permissions diretórios /etc/permissions , a ferramenta imprime apenas as diferenças (como a assinatura ausente | permissões privilegiadas que você precisa adicionar à lista de permissões). Isso também é útil para fins de auditoria: quando uma nova versão do aplicativo é adicionada, a ferramenta detecta as permissões adicionais necessárias.
  3. Copie os arquivos gerados para o diretório /etc/permissions apropriado, onde o sistema lê os arquivos durante a inicialização.

Personalização de listas de permissões

O AOSP inclui uma implementação de lista de permissões que pode ser personalizada conforme necessário. Permissões para aplicativos incluídos no AOSP já estão permitidas em /etc/permissions/privapp-permissions-platform.xml .

Por padrão, o script privapp_permissions.py gera uma saída que concede automaticamente qualquer permissão solicitada por um aplicativo privilegiado. Se houver permissões que devem ser negadas, 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>
    ...

Encontrando permissões ausentes

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

ro.control_privapp_permissions=log

As violações são relatadas no arquivo de log, mas as permissões não privilegiadas ainda são concedidas. Isso mantém o dispositivo em um estado de funcionamento enquanto fornece a lista de violações. Este é o formato da mensagem de erro:

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

Todas as violações devem ser tratadas adicionando as permissões ausentes às listas de permissões apropriadas.

  • No Android 8.0 e inferior, os aplicativos afetados não recebem as permissões ausentes, mesmo se estiverem no caminho do priv-app privado.
  • No Android 9 e superior, as violações (de permissões privilegiadas ) significam que o dispositivo não inicializa . Você deve permitir ou negar explicitamente todas as permissões privilegiadas

Aplicação de listas de permissões

Depois que as listas de permissões estiverem em vigor, habilite a aplicação do tempo de execução configurando a propriedade de construção ro.control_privapp_permissions=enforce .