Questa pagina è stata tradotta dall'API Cloud Translation.
Switch to English

Autorizzazioni privilegiate Allowlisting

Le app privilegiate sono app di sistema che si trovano in una directory delle 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 la partition /etc/permissions/priv-app .

Storicamente, i produttori di dispositivi avevano scarso controllo su quale firma | autorizzazioni 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 o il dispositivo non si avvia.

Il file privapp-permissions.xml può concedere o negare le autorizzazioni solo per le 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 elenchi consentiti

Gli elenchi di autorizzazioni per le app possono essere elencati in un singolo XML o in più file XML situati 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 unico elenco di autorizzazioni per tutte le app privilegiate sviluppate da Google e consiglia 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 .
  • Le autorizzazioni per le app Google sono elencate in /etc/permissions/privapp-permissions-google.xml .
  • Per altre app, utilizza i file nel formato: /etc/permissions/privapp-permissions- DEVICE_NAME .xml .

Generazione di elenchi consentiti

Per generare automaticamente un elenco di autorizzazioni per tutte le app disponibili nell'immagine di sistema, utilizza lo strumento della riga di comando AOSP in 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. Eseguire lo script privapp_permissions.py per generare un file privapp-permissions.xml che elenca tutte le firme | autorizzazioni privilegiate necessarie per essere consentite:
    development/tools/privapp_permissions/privapp_permissions.py
    Questo strumento stampa contenuto XML che può essere utilizzato come un singolo file o suddiviso in più file nel /etc/permissions percorso della directory. Se il dispositivo include già elenchi di /etc/permissions directory /etc/permissions , lo strumento stampa solo le differenze (come la firma mancante | i permessi privilegiati che è necessario aggiungere all'elenco di autorizzazioni). Ciò è utile anche per scopi di controllo: quando viene aggiunta una nuova versione dell'app, lo strumento rileva le autorizzazioni aggiuntive necessarie.
  3. Copiare i file generati nella directory /etc/permissions appropriata, dove il sistema legge i file durante l'avvio.

Personalizzazione degli elenchi consentiti

AOSP include un'implementazione dell'elenco di autorizzazioni che può essere personalizzata secondo necessità. Le autorizzazioni per le app incluse in AOSP sono già consentite in /etc/permissions/privapp-permissions-platform.xml .

Per impostazione predefinita, lo script privapp_permissions.py genera un 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 "deny-permission" invece di 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 si apre un nuovo dispositivo, abilitare la modalità di registro di transizione:

ro.control_privapp_permissions=log

Le violazioni vengono segnalate nel file di registro, ma vengono comunque concesse autorizzazioni non privilegiate. Ciò mantiene il dispositivo in uno stato di funzionamento 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 risolte aggiungendo le autorizzazioni mancanti agli elenchi consentiti appropriati.

  • 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 elenchi consentiti

Dopo aver impostato le liste di autorizzazione, abilitare l'applicazione del runtime impostando la proprietà build ro.control_privapp_permissions=enforce .