Liste d'autorisations privilégiées

Les applications privilégiées sont des applications système situées dans un répertoire priv-app sur une partition d'image système. Les partitions utilisées pour les versions Android sont les suivantes :

  • Android 9 et versions ultérieures : /system, /product, /vendor
  • Android 8.1 et versions antérieures : /system

Historiquement, les fabricants d'appareils avaient peu de contrôle sur les autorisations signature | privilégiées qui pouvaient être accordées aux applications privilégiées. À partir d'Android 8.0, les fabricants peuvent accorder explicitement des autorisations privilégiées dans les fichiers XML de configuration du système, dans le répertoire /etc/permissions. Depuis Android 9, les implémenteurs peuvent accorder ou refuser explicitement toutes les autorisations privilégiées. Si les autorisations privilégiées ne sont pas accordées, l'appareil ne démarrera pas.

Le fichier privapp-permissions.xml ne peut accorder ou refuser des autorisations que pour les applications privilégiées de la même partition. Par exemple, si une application sur la partition /product demande des autorisations privilégiées, la demande ne peut être accordée ou refusée que par un fichier privapp-permissions.xml sur /product.

Ajouter une liste d'autorisation

Les listes d'autorisation des applications peuvent être listées dans un seul fichier XML ou dans plusieurs fichiers XML situés dans le répertoire /etc/permissions :

  • /etc/permissions/privapp-permissions-OEM_NAME.xml
  • /etc/permissions/privapp-permissions-DEVICE_NAME.xml

Aucune règle stricte ne s'applique à l'organisation du contenu. Les intégrateurs d'appareils peuvent déterminer la structure du contenu à condition que toutes les applications de /system/priv-app soient ajoutées à la liste d'autorisation. Par exemple, Google a développé une seule liste d'autorisation pour toutes les applications privilégiées. Nous vous recommandons d'organiser vos fichiers comme suit :

  • Les autorisations pour les applications déjà incluses dans l'arborescence du projet Android Open Source (AOSP) sont listées dans /etc/permissions/privapp-permissions-platform.xml.
  • Pour les autres applications, utilisez des fichiers au format /etc/permissions/privapp-permissions-DEVICE_NAME.xml.

Personnaliser une liste d'autorisation

AOSP inclut une implémentation de liste d'autorisation qui peut être personnalisée selon les besoins.

Si une autorisation doit être refusée, modifiez le fichier XML pour utiliser une balise deny-permission au lieu d'une balise permission. Exemple :

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

Trouver les autorisations manquantes

Pour trouver les autorisations manquantes lors du démarrage d'un nouvel appareil, activez le mode journal de transition :

ro.control_privapp_permissions=log

Les cas de non-respect sont signalés dans le fichier journal. Des autorisations non privilégiées sont accordées. Cela permet de s'assurer que l'appareil reste en état de marche tout en fournissant la liste des cas de non-respect. Le format du message d'erreur est le suivant :

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

Pour résoudre tous les cas de non-respect, vous devez ajouter les autorisations manquantes aux listes d'autorisation appropriées. Notez que dans :

  • Sur Android 9 et versions ultérieures, les cas de non-respect des autorisations privilégiées empêchent l'appareil de démarrer. Vous devez donc autoriser ou refuser explicitement toutes les autorisations privilégiées.
  • Sur Android 8.0 et versions antérieures, les autorisations manquantes ne sont pas accordées aux applications concernées, même si elles se trouvent dans le chemin d'accès priv-app.

Appliquer une liste d'autorisation

Une fois vos listes d'autorisation créées, activez l'application de l'exécution en définissant la propriété de compilation ro.control_privapp_permissions=enforce.

L'ajout à la liste d'autorisation n'est requis que pour les autorisations déclarées par les applications avec package="android". L'état de la propriété ro.control_privapp_permissions doit respecter la section 9.1, Autorisations du document de définition de compatibilité (CDD).