Google si impegna a promuovere l'equità razziale per le comunità nere. Vedi come.
Questa pagina è stata tradotta dall'API Cloud Translation.
Switch to English

Lista bianca autorizzazioni privilegiate

Le app con privilegi sono app di sistema che si trovano in una directory di priv-app su una delle partizioni dell'immagine di sistema. Le partizioni utilizzate per le versioni di Android sono

  • Android 8.1 e versioni precedenti - /system
  • Android 9 e versioni successive - /system, /product, /vendor

In questa pagina, /etc/permissions/priv-app risolve in partition /etc/permissions/priv-app .

Storicamente, i produttori di dispositivi avevano scarso controllo su quali autorizzazioni di firma | privilegiate potevano essere concesse alle app privilegiate. A partire da Android 8.0, i produttori devono concedere esplicitamente 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 altrimenti il ​​dispositivo non si avvia.

Il file privapp-permissions.xml può concedere o negare autorizzazioni solo per app privilegiate sulla stessa partizione. Ad esempio, se un'app sulla partizione /vendor richiede autorizzazioni privilegiate, la richiesta può essere concessa o negata solo da un file privapp-permissions.xml che è anche su /vendor .

Aggiunta di liste bianche

Le whitelist di autorizzazione per le app possono essere elencate in un singolo XML o in più file XML situati nella directory frameworks/base/etc/permissions 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 di dispositivi possono determinare la struttura del contenuto purché tutte le app di /system/priv-app siano autorizzate. Ad esempio, Google ha un'unica lista bianca per tutte le app privilegiate sviluppate da Google e consiglia la seguente organizzazione:

  • Le autorizzazioni per le app che sono già incluse nella struttura Android Open Source Project (AOSP) sono elencate in /etc/permissions/privapp-permissions-platform.xml .
  • Le autorizzazioni per le app di Google sono elencate in /etc/permissions/privapp-permissions-google.xml .
  • Per le altre applicazioni, utilizzare i file di forma: /etc/permissions/privapp-permissions- DEVICE_NAME .xml .

Generazione di whitelist

Per generare automaticamente una whitelist per tutte le app disponibili sull'immagine di sistema, utilizzare lo strumento da riga di comando AOSP su development/tools/privapp_permissions/privapp_permissions.py . Per generare una versione iniziale di privapp-permissions.xml specifico del dispositivo:

  1. Crea un'immagine di sistema:
        . build/envsetup.sh
        lunch PRODUCT_NAME
        make -j 
  2. Esegui lo script privapp_permissions.py per generare un file privapp-permissions.xml che elenca tutte le autorizzazioni di firma | privilegiate necessarie per essere autorizzati:
    development/tools/privapp_permissions/privapp_permissions.py
    Questo strumento stampa il contenuto XML che può essere utilizzato come singolo file o diviso in più file nel percorso della directory /etc/permissions . Se il dispositivo include già le whitelist nelle directory /etc/permissions , lo strumento stampa solo le differenze (come la firma mancante | autorizzazioni privilegiate che è necessario aggiungere alla whitelist). Ciò è utile anche ai fini del controllo: quando viene aggiunta una nuova versione dell'app, lo strumento rileva le autorizzazioni aggiuntive necessarie.
  3. Copia i file generati nella directory /etc/permissions appropriata, dove il sistema legge i file durante l'avvio.

Personalizzare le whitelist

AOSP include un'implementazione della whitelist che può essere personalizzata in base alle esigenze. Le autorizzazioni per le app incluse in AOSP sono già autorizzate in /etc/permissions/privapp-permissions-platform.xml .

Per impostazione predefinita, lo script privapp_permissions.py genera output che concede automaticamente qualsiasi autorizzazione richiesta da un'applicazione privilegiata. Se sono presenti autorizzazioni che devono essere negate, modificare l'XML per utilizzare un tag "nega autorizzazione" anziché un tag "autorizzazione". Esempio:

<!--
    This XML file declares which signature|privileged permissions should be
    granted 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 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 autorizzazioni mancanti

Per trovare le autorizzazioni mancanti quando si apre un nuovo dispositivo, abilitare la modalità di registro di transizione:

ro.control_privapp_permissions=log

Le violazioni sono riportate nel file di registro, ma le autorizzazioni non privilegiate sono ancora concesse. Ciò mantiene il dispositivo in uno stato funzionante fornendo al contempo l'elenco delle violazioni. Questo è il formato del messaggio di errore:

PackageManager: Privileged permission {PERMISSION_NAME} for package {PACKAGE_NAME} - not in privapp-permissions whitelist

Tutte le violazioni devono essere risolte aggiungendo le autorizzazioni mancanti alle whitelist appropriate.

  • Su 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 di whitelist

Dopo aver inserito le whitelist, abilitare l'applicazione runtime impostando la proprietà build ro.control_privapp_permissions=enforce .