Le app con privilegi sono app di sistema situate in una directory priv-app
su un
la partizione dell'immagine di sistema. Le partizioni utilizzate per le release di Android sono:
- Android 9 e versioni successive:
/system, /product, /vendor
- Android 8.1 e versioni precedenti:
/system
In passato, i produttori di dispositivi avevano scarso controllo su quali
firma | con privilegi autorizzazioni
con privilegi elevati. A partire da Android 8.0, i produttori possono concedere esplicitamente
autorizzazioni privilegiate nei file XML di configurazione del sistema
Directory /etc/permissions
. A partire da Android 9, gli
implementatori possono
concedere o negare esplicitamente tutte le autorizzazioni con privilegi. Se non vengono concesse le autorizzazioni con privilegi,
il dispositivo non si avvia.
Il file privapp-permissions.xml
può solo concedere o negare
autorizzazioni per le app con privilegi sulla stessa partizione. Ad esempio, se
un'app nella partizione /product
richiede autorizzazioni con privilegi,
la richiesta può essere concessa o rifiutata solo da un privapp-permissions.xml
file su /product
.
Aggiungi una lista consentita
Le liste consentite di autorizzazioni per le app possono essere elencate in un unico 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 utenti che implementano i dispositivi possono
determina la struttura dei contenuti a condizione che tutte le app di /system/priv-app
sono inserite nella lista consentita. Ad esempio, Google ha sviluppato un'unica lista consentita per tutte le app con privilegi.
Ti consigliamo la seguente organizzazione:
- Autorizzazioni per le app già incluse nei
Android Open Source Project (AOSP)
sono elencati in
/etc/permissions/privapp-permissions-platform.xml
. - Per altre app, usa 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 è necessario negare un'autorizzazione, modifica il file 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 all'avvio di un nuovo dispositivo, attiva la modalità di log di transizione:
ro.control_privapp_permissions=log
Le violazioni sono riportate nel file di log. Sono concesse autorizzazioni senza privilegi. In questo modo il dispositivo rimane in uno stato di lavoro pur fornendo l'elenco di violazioni delle norme. 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 al dispositivo di iniziare. Devi invece consentire o negare esplicitamente tutte le autorizzazioni con privilegi.
- Alle app interessate non vengono concesse le autorizzazioni mancanti di Android 8.0 e versioni precedenti, nonostante
si trova nel percorso
priv-app
.
Applicare una lista consentita
Dopo aver creato le liste consentite, abilita l'applicazione forzata del runtime impostando la build
proprietà ro.control_privapp_permissions=enforce
.
La lista consentita è obbligatoria solo per le autorizzazioni dichiarate dalle app con
package="android"
. ro.control_privapp_permissions
lo stato della proprietà deve rispettare
Sezione 9.1 Autorizzazioni
nel Compatibility Definition Document (CDD).