O Google tem o compromisso de promover a igualdade racial para as comunidades negras. Saiba como.

Lista de permissões de permissão privilegiada

Aplicativos privilegiados são os aplicativos do sistema que estão localizados em um priv-app diretório 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

Ao longo desta página, /etc/permissions/priv-app resolve partition /etc/permissions/priv-app .

Historicamente, os fabricantes de dispositivos tinha pouco controle sobre quais assinaturas | permissões privilegiadas poderia ser concedida a aplicativos privilegiados. A partir de Android 8.0, os fabricantes devem conceder explicitamente permissões privilegiados os arquivos XML de configuração do sistema no /etc/permissions do diretório. A partir do Android 9, os implementadores devem conceder ou negar explicitamente todas as permissões privilegiadas ou o dispositivo não inicializará.

O privapp-permissions.xml arquivo só pode conceder ou negar permissões para aplicativos privilegiados na mesma partição. Por exemplo, se um aplicativo no /product partição solicita permissões privilegiadas, o pedido só pode ser concedido ou negado por um privapp-permissions.xml arquivo que é também sobre /product .

Adicionando listas de permissões

Allowlists de permissão para aplicativos podem ser listados em um único XML ou em vários arquivos XML localizados na frameworks/base/etc/permissions diretório da 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. Implementadores dispositivo pode determinar estrutura de conteúdo, desde que todos os aplicativos de /system/priv-app são allowlisted. 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 no (AOSP) Árvore Android Projeto Open Source estão listados na /etc/permissions/privapp-permissions-platform.xml .
  • Permissões para aplicativos do Google estão listados na /etc/permissions/privapp-permissions-google.xml .
  • Para outros aplicativos, arquivos de uso da forma: /etc/permissions/privapp-permissions- DEVICE_NAME .xml .

Gerando listas de permissão

Para gerar automaticamente um allowlist para todas as aplicações 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 dispositivo específico privapp-permissions.xml :

  1. Construir uma imagem do sistema:
        . build/envsetup.sh
        lunch PRODUCT_NAME
        make -j
  2. Execute o privapp_permissions.py script para gerar um privapp-permissions.xml arquivo que lista todos assinatura | permissões privilegiadas necessário para ser allowlisted:
    development/tools/privapp_permissions/privapp_permissions.py
    Este conteúdo XML impressões ferramenta que pode ser usado tanto como um único arquivo, ou dividido em vários arquivos na /etc/permissions caminho do diretório. Se o dispositivo já inclui allowlists no /etc/permissions diretórios, a ferramenta só imprime as diferenças (como a assinatura faltando | permissões privilegiadas que você precisa para adicionar à allowlist). 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 apropriado /etc/permissions do diretório, 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 allowlisted em /etc/permissions/privapp-permissions-platform.xml .

Por padrão, o privapp_permissions.py script gera saída que concede automaticamente qualquer autorizaçã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 são concedidas as permissões ausentes, mesmo se eles estão no priv-app caminho.
  • No Android 9 e superior, violações (de permissões privilegiadas) significa que o dispositivo não faz boot. Você deve explicitamente permitir ou negar todas as permissões privilegiadas

Aplicação de listas de permissões

Depois allowlists estão no lugar, ativar a aplicação de tempo de execução, definindo a propriedade Build ro.control_privapp_permissions=enforce .