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