Le app con privilegi sono app di sistema che si trovano in una directory priv-app
su una
partizione dell'immagine di sistema. Le partizioni utilizzate per le release Android sono:
- Android 9 e versioni successive:
/system, /product, /vendor
- Android 8.1 e versioni precedenti:
/system
In passato, i produttori di dispositivi avevano poco controllo sulle autorizzazioni
con firma | privilegiate che potevano 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 le autorizzazioni privilegiate non vengono concesse,
il dispositivo non si avvierà.
Il file privapp-permissions.xml
può solo concedere o negare
le autorizzazioni per le app con privilegi nella 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
su /product
.
Aggiungere una lista consentita
Gli elenchi consentiti di autorizzazioni per le app possono essere elencati in un singolo file XML o in più
file XML che si trovano nella directory /etc/permissions
:
/etc/permissions/privapp-permissions-OEM_NAME.xml
/etc/permissions/privapp-permissions-DEVICE_NAME.xml
Non esiste una regola rigorosa che stabilisca come devono essere organizzati i contenuti. Gli implementatori di dispositivi possono
determinare la struttura dei contenuti, a condizione che tutte le app di /system/priv-app
siano incluse nella lista consentita. Ad esempio, Google ha sviluppato una singola lista consentita per tutte le app con privilegi.
Ti 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, utilizza file del modulo
/etc/permissions/privapp-permissions-DEVICE_NAME.xml
.
Personalizzare una lista consentita
AOSP include un'implementazione della lista consentita che può essere personalizzata in base alle esigenze.
Se un'autorizzazione deve essere negata, modifica l'XML in modo da utilizzare un tag deny-permission
anziché un tag permission
. Ad 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> ...
Trovare le autorizzazioni mancanti
Per trovare le autorizzazioni mancanti quando avvii un nuovo dispositivo, attiva la modalità di log di transizione:
ro.control_privapp_permissions=log
Le violazioni vengono segnalate nel file di log. Vengono concesse autorizzazioni non privilegiate. In questo modo, il dispositivo rimane funzionante e viene comunque fornito 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. Tieni presente che in:
- Android 9 e versioni successive, le violazioni delle autorizzazioni privilegiate impediscono l'avvio del dispositivo. Devi invece 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, attiva l'applicazione in fase di runtime impostando la proprietà build
ro.control_privapp_permissions=enforce
.
La lista consentita è richiesta 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
del Compatibility Definition Document (CDD).