Lista consentita di autorizzazioni con privilegi

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
di Gemini Advanced.

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).