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