Le app con privilegi sono app di sistema che si trovano in una directory priv-app
su una delle partizioni dell'immagine di sistema. Le partizioni utilizzate per le versioni di Android sono
- Android 8.1 e precedenti -
/system
- Android 9 e versioni successive -
/system, /product, /vendor
In questa pagina, /etc/permissions/priv-app
risolve la partition /etc/permissions/priv-app
.
Storicamente, i produttori di dispositivi avevano uno scarso controllo su quali autorizzazioni firma|privilegiate potevano essere concesse alle app privilegiate. A partire da Android 8.0, i produttori devono concedere in modo esplicito autorizzazioni privilegiate nei file XML di configurazione del sistema nella directory /etc/permissions
. A partire da Android 9, gli implementatori devono concedere o negare esplicitamente tutte le autorizzazioni privilegiate o il dispositivo non si avvia.
Il file privapp-permissions.xml
può concedere o negare solo autorizzazioni per 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
che si trova anche in /product
.
Aggiunta di liste consentite
Le liste di autorizzazioni per le app possono essere elencate in un singolo XML o in più file XML che si trovano nella directory frameworks/base/etc/permissions
come segue:
-
/etc/permissions/privapp-permissions- OEM_NAME .xml
-
/etc/permissions/privapp-permissions- DEVICE_NAME .xml
Non esiste una regola rigida per l'organizzazione dei contenuti. Gli implementatori del dispositivo possono determinare la struttura del contenuto purché tutte le app di /system/priv-app
siano consentite. Ad esempio, Google ha un'unica lista consentita per tutte le app privilegiate sviluppate da Google e consiglia la seguente organizzazione:
- Le autorizzazioni per le app che sono già incluse nell'albero di Android Open Source Project (AOSP) sono elencate in
/etc/permissions/privapp-permissions-platform.xml
. - Le autorizzazioni per le app Google sono elencate in
/etc/permissions/privapp-permissions-google.xml
. - Per altre app, usa i file del modulo:
/etc/permissions/privapp-permissions- DEVICE_NAME .xml
.
Personalizzazione delle liste consentite
AOSP include un'implementazione della lista consentita che può essere personalizzata secondo necessità. Le autorizzazioni per le app incluse in AOSP sono già consentite in /etc/permissions/privapp-permissions-platform.xml
.
Se sono presenti autorizzazioni che devono essere negate, modificare l'XML per utilizzare un tag "deny-permission" anziché un tag "permission". 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 apri un nuovo dispositivo, abilita la modalità registro di transizione:
ro.control_privapp_permissions=log
Le violazioni vengono segnalate nel file di registro, ma le autorizzazioni non privilegiate vengono comunque concesse. Ciò mantiene il dispositivo in uno stato di lavoro fornendo l'elenco delle violazioni. Questo è il formato del messaggio di errore:
PackageManager: Privileged permission {PERMISSION_NAME} for package {PACKAGE_NAME} - not in privapp-permissions allowlist
Tutte le violazioni devono essere affrontate aggiungendo le autorizzazioni mancanti alle liste consentite appropriate.
- In Android 8.0 e versioni precedenti, alle app interessate non vengono concesse le autorizzazioni mancanti anche se si trovano nel percorso
priv-app
. - Su Android 9 e versioni successive, le violazioni (delle autorizzazioni privilegiate ) indicano che il dispositivo non si avvia . È necessario consentire o negare esplicitamente tutte le autorizzazioni privilegiate
Applicazione delle liste consentite
Dopo aver creato le liste consentite, abilitare l'applicazione del runtime impostando la proprietà build ro.control_privapp_permissions=enforce
.