Le app privilegiate sono app di sistema situate in una directory priv-app
su una partizione dell'immagine di sistema. Le partizioni utilizzate per le versioni Android sono:
- Android 9 e versioni successive:
/system, /product, /vendor
- Android 8.1 e versioni precedenti:
/system
Storicamente, i produttori di dispositivi avevano poco controllo su quale firma | le autorizzazioni privilegiate potrebbero essere concesse alle app privilegiate. A partire da Android 8.0, i produttori possono concedere esplicitamente autorizzazioni privilegiate nei file XML di configurazione del sistema nella directory /etc/permissions
. A partire da Android 9, gli implementatori possono concedere o negare esplicitamente tutte le autorizzazioni privilegiate. Se non vengono concesse autorizzazioni privilegiate, il dispositivo non si avvierà.
Il file privapp-permissions.xml
può concedere o negare le autorizzazioni solo per le app privilegiate sulla stessa partizione. Ad esempio, se un'app nella partizione /product
richiede autorizzazioni privilegiate, la richiesta può essere concessa o negata solo da un file privapp-permissions.xml
in /product
.
Aggiungi una lista consentita
Le liste consentite di autorizzazioni per le app possono essere elencate in un singolo file XML o in più file XML situati nella directory frameworks/base/etc/permissions
:
-
/etc/permissions/privapp-permissions- OEM_NAME .xml
-
/etc/permissions/privapp-permissions- DEVICE_NAME .xml
Non si applica alcuna regola rigida all'organizzazione dei contenuti. Gli implementatori del dispositivo possono determinare la struttura del contenuto purché tutte le app di /system/priv-app
siano nella lista consentita. Ad esempio, Google ha sviluppato un'unica lista consentita per tutte le app privilegiate. Consigliamo la seguente organizzazione:
- Le autorizzazioni per le app già incluse nell'albero Android Open Source Project (AOSP) sono elencate in
/etc/permissions/privapp-permissions-platform.xml
. - Per altre app, utilizzare file nel formato
/etc/permissions/privapp-permissions- DEVICE_NAME .xml
.
Personalizza una lista consentita
AOSP include un'implementazione della lista consentita che può essere personalizzata in base alle esigenze.
Se è necessario negare un'autorizzazione, modificare l'XML per utilizzare un tag deny-permission
anziché un tag permission
. Per esempio:
<!-- 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> ...
Trova i permessi mancanti
Per trovare le autorizzazioni mancanti all'avvio di un nuovo dispositivo, abilita la modalità di registro transitorio:
ro.control_privapp_permissions=log
Le violazioni vengono segnalate nel file di registro. Vengono concesse autorizzazioni non privilegiate. In questo modo si garantisce che il dispositivo rimanga funzionante pur fornendo l'elenco delle violazioni. Il formato del messaggio di errore è il seguente:
PackageManager: Privileged permission {PERMISSION_NAME} for package {PACKAGE_NAME} - not in privapp-permissions allowlist
Tutte le violazioni devono essere risolte aggiungendo le autorizzazioni mancanti alle liste consentite appropriate. Si noti che in:
- Android 9 e versioni successive, le violazioni delle autorizzazioni privilegiate impediscono l'avvio del dispositivo. È invece necessario consentire o negare esplicitamente tutte le autorizzazioni privilegiate.
- Android 8.0 e versioni precedenti, le autorizzazioni mancanti non vengono concesse alle app interessate nonostante si trovino nel percorso
priv-app
.
Applicare una lista consentita
Dopo aver creato le liste consentite, abilita l'applicazione in fase di esecuzione impostando la proprietà build ro.control_privapp_permissions=enforce
.
L'inserimento nella lista consentita è obbligatorio solo per le autorizzazioni dichiarate dalle app con package="android"
. Lo stato della proprietà ro.control_privapp_permissions
deve rispettare la sezione 9.1 Autorizzazioni nel documento di definizione di compatibilità (CDD).