Cette page explique comment Android gère les problèmes de compatibilité des règles avec les mises à jour de la plate-forme en direct (OTA), où les nouveaux paramètres SELinux de la plate-forme peuvent différer des anciens paramètres SELinux du fournisseur.
Propriété et étiquetage des objets
La propriété doit être clairement définie pour chaque objet afin de séparer les règles de la plate-forme et du fournisseur. Par exemple, si les libellés de règles du fournisseur sont /dev/foo
et que les libellés de règles de la plate-forme sont /dev/foo
dans une OTA ultérieure, le comportement est indéfini (par exemple, un refus inattendu ou, plus grave, un échec du démarrage). Pour SELinux, cela se manifeste par une collision d'étiquettes. Le nœud de l'appareil ne peut comporter qu'un seul libellé, qui correspond à celui appliqué en dernier.
Par conséquent :
- Les processus qui ont besoin d'accéder au libellé qui n'a pas été appliqué perdent l'accès à la ressource.
- Les processus qui accèdent au fichier peuvent échouer, car le mauvais nœud de périphérique a été créé.
Des collisions entre les libellés de plate-forme et de fournisseur peuvent se produire pour tout objet comportant un libellé SELinux, y compris les propriétés, les services, les processus, les fichiers et les sockets. Pour éviter ces problèmes, définissez clairement la propriété de ces objets.
Espace de noms de type/attribut
En plus des conflits d'étiquettes, les noms de types et d'attributs SELinux peuvent également entrer en conflit. SELinux n'autorise pas les déclarations multiples des mêmes types et attributs. Une règle comportant des déclarations en double ne peut pas être compilée. Pour éviter les conflits de noms de types et d'attributs, il est fortement recommandé que toutes les déclarations de fournisseur commencent par le préfixe vendor_
. Par exemple, les fournisseurs doivent utiliser type vendor_foo, domain;
au lieu de type foo, domain;
.
Propriété des fichiers
Il est difficile d'éviter les collisions pour les fichiers, car les règles de la plate-forme et du fournisseur fournissent généralement des libellés pour tous les systèmes de fichiers. Contrairement à la dénomination des types, l'utilisation d'espaces de noms pour les fichiers n'est pas pratique, car beaucoup d'entre eux sont créés par le noyau. Pour éviter ces collisions, suivez les consignes d'attribution de noms pour les systèmes de fichiers dans cette section. Pour Android 8.0, il s'agit de recommandations sans application technique. À l'avenir, ces recommandations seront appliquées par la Vendor Test Suite (VTS).
Système (/system)
Seule l'image système doit fournir des libellés pour les composants /system
à file_contexts
, service_contexts
, etc. Si des libellés pour les composants /system
sont ajoutés dans la règle du fournisseur, une mise à jour OTA réservée au framework peut ne pas être possible.
Fournisseur (/vendor)
La règle SELinux de l'AOSP étiquette déjà les parties de la partition vendor
avec lesquelles la plate-forme interagit, ce qui permet d'écrire des règles SELinux pour que les processus de la plate-forme puissent communiquer avec certaines parties de la partition vendor
ou y accéder. Exemples :
/vendor path | Libellé fourni par la plate-forme | Processus de la plate-forme en fonction du libellé |
---|---|---|
/vendor(/.*)?
|
vendor_file
|
Tous les clients HAL du framework, ueventd , etc.
|
/vendor/framework(/.*)?
|
vendor_framework_file
|
dex2oat , appdomain , etc.
|
/vendor/app(/.*)?
|
vendor_app_file
|
dex2oat , installd , idmap , etc.
|
/vendor/overlay(/.*)
|
vendor_overlay_file
|
system_server , zygote , idmap , etc.
|
Par conséquent, des règles spécifiques doivent être respectées (appliquées via neverallows
) lors de l'étiquetage de fichiers supplémentaires dans la partition vendor
:
vendor_file
doit être le libellé par défaut pour tous les fichiers de la partitionvendor
. La règle de la plate-forme exige cela pour accéder aux implémentations HAL de transmission.- Tous les nouveaux
exec_types
ajoutés dans la partitionvendor
via le règlement du fournisseur doivent comporter l'attributvendor_file_type
. Cela est appliqué par le biais de neverallows. - Pour éviter les conflits avec les futures mises à jour de la plate-forme/du framework, évitez de libeller les fichiers autres que
exec_types
dans la partitionvendor
. - Toutes les dépendances de bibliothèque pour les HAL de même processus identifiés par AOSP doivent être libellées
same_process_hal_file.
.
Procfs (/proc)
Les fichiers dans /proc
ne peuvent être libellés qu'avec le libellé genfscon
. Dans Android 7.0, les règles platform et vendor utilisaient genfscon
pour étiqueter les fichiers dans procfs
.
Recommandation : Utilisez uniquement les libellés de règlement de la plate-forme /proc
.
Si les processus du fournisseur doivent accéder à des fichiers dans /proc
qui sont actuellement associés au libellé par défaut (proc
), le règlement du fournisseur ne doit pas les libeller explicitement. Il doit plutôt utiliser le type générique proc
pour ajouter des règles pour les domaines des fournisseurs. Cela permet aux mises à jour de la plate-forme de s'adapter aux futures interfaces du noyau exposées via procfs
et de les étiqueter explicitement si nécessaire.
Debugfs (/sys/kernel/debug)
Debugfs
peut être libellé à la fois dans file_contexts
et genfscon
. Dans Android 7.0 à Android 10, le libellé de la plate-forme et celui du fournisseur sont debugfs
.
Dans Android 11, debugfs
ne peut pas être consulté ni monté sur les appareils de production. Les fabricants d'appareils doivent supprimer debugfs
.
Tracefs (/sys/kernel/debug/tracing)
Tracefs
peut être libellé à la fois dans file_contexts
et genfscon
. Dans Android 7.0, seuls les libellés de plate-forme tracefs
.
Recommandation : Seule la plate-forme peut libeller tracefs
.
Sysfs (/sys)
Les fichiers de /sys
peuvent être libellés à l'aide de file_contexts
et de genfscon
. Dans Android 7.0, la plate-forme et le fournisseur utilisent genfscon
pour libeller les fichiers dans sysfs
.
Recommandation : La plate-forme peut identifier les nœuds sysfs
qui ne sont pas spécifiques à un appareil. Sinon, seul le fournisseur peut libeller les fichiers.
tmpfs (/dev)
Les fichiers de /dev
peuvent être libellés dans file_contexts
. Dans Android 7.0, les fichiers de plate-forme et de libellé du fournisseur sont ici.
Recommandation : Le fournisseur peut n'étiqueter que les fichiers dans /dev/vendor
(par exemple, /dev/vendor/foo
, /dev/vendor/socket/bar
).
Rootfs (/)
Les fichiers de /
peuvent être libellés dans file_contexts
. Dans Android 7.0, les fichiers de libellés de plate-forme et de fournisseur se trouvent ici.
Recommandation : Seul le système peut étiqueter les fichiers dans /
.
Données (/data)
Les données sont libellées à l'aide d'une combinaison de file_contexts
et de seapp_contexts
.
Recommandation : Interdisez l'étiquetage des fournisseurs en dehors de /data/vendor
. Seule la plate-forme peut libeller d'autres parties de /data
.
Version des libellés Genfs
À partir du niveau d'API du fournisseur 202504, les nouveaux libellés SELinux attribués avec genfscon
dans system/sepolicy/compat/plat_sepolicy_genfs_ver.cil
sont facultatifs pour les anciennes partitions vendor
. Cela permet aux anciennes partitions vendor
de conserver leur implémentation SEPolicy existante.
Cela est contrôlé par la variable Makefile BOARD_GENFS_LABELS_VERSION
, qui est stockée dans /vendor/etc/selinux/genfs_labels_version.txt
.
Exemple :
-
Dans le niveau d'API du fournisseur 202404, le nœud
/sys/class/udc
est libellésysfs
par défaut. -
À partir du niveau d'API du fournisseur 202504,
/sys/class/udc
est libellésysfs_udc
.
Toutefois, /sys/class/udc
peut être utilisé par des partitions vendor
utilisant le niveau d'API 202404, soit avec le libellé sysfs
par défaut, soit avec un libellé spécifique au fournisseur. Le libellé inconditionnel /sys/class/udc
en tant que sysfs_udc
peut casser la compatibilité avec ces partitions vendor
. Si vous cochez BOARD_GENFS_LABELS_VERSION
, la plate-forme continue d'utiliser les libellés et les autorisations précédents pour les anciennes partitions vendor
.
BOARD_GENFS_LABELS_VERSION
peut être supérieur ou égal au niveau d'API du fournisseur. Par exemple, les partitions vendor
utilisant le niveau d'API 202404 peuvent définir BOARD_GENFS_LABELS_VERSION
sur 202504 pour adopter les nouveaux libellés introduits dans la version 202504. Consultez la liste des
libellés genfs spécifiques à 202504.
Lors de l'étiquetage des nœuds genfscon
, la plate-forme doit tenir compte des anciennes partitions vendor
et implémenter des mécanismes de secours pour la compatibilité si nécessaire. La plate-forme peut utiliser des bibliothèques réservées à la plate-forme pour interroger la version des libellés genfs.
-
Sur les plates-formes natives, utilisez
libgenfslabelsversion
. Consultezgenfslabelsversion.h
pour le fichier d'en-tête delibgenfslabelsversion
. -
Sur Java, utilisez
android.os.SELinux.getGenfsLabelsVersion()
.
Politique publique de la plate-forme
La plate-forme SELinux est divisée en deux parties : privée et publique. Le règlement public de la plate-forme se compose de types et d'attributs qui sont toujours disponibles pour un niveau d'API du fournisseur, et qui servent d'API entre la plate-forme et le fournisseur. Cette règle est exposée aux rédacteurs de règles des fournisseurs pour leur permettre de créer des fichiers de règles de fournisseur qui, combinés à la règle privée de la plate-forme, aboutissent à une règle entièrement fonctionnelle pour un appareil. La règle publique de la plate-forme est définie dans system/sepolicy/public
.
Par exemple, un type vendor_init
, représentant le processus d'initialisation dans le contexte du fournisseur, est défini sous system/sepolicy/public/vendor_init.te
:
type vendor_init, domain;
Les fournisseurs peuvent se référer au type vendor_init
pour écrire des règles de conformité personnalisées :
# Allow vendor_init to set vendor_audio_prop in vendor's init scripts
set_prop(vendor_init, vendor_audio_prop)
Attributs de compatibilité
La règle SELinux est une interaction entre les types source et cible pour des classes d'objets et des autorisations spécifiques. Chaque objet (processus, fichiers, par exemple) concerné par la règle SELinux ne peut avoir qu'un seul type, mais ce type peut avoir plusieurs attributs.
La stratégie est principalement rédigée en termes de types existants. Ici, vendor_init
et debugfs
sont des types :
allow vendor_init debugfs:dir { mounton };
Cela fonctionne, car la règle a été écrite en tenant compte de tous les types. Toutefois, si les règles du fournisseur et de la plate-forme utilisent des types spécifiques, et que le libellé d'un objet spécifique change dans une seule de ces règles, l'autre peut contenir des règles qui s'appuyaient auparavant sur l'accès accordé ou perdu. Par exemple, supposons que la règle de plate-forme libelle les nœuds sysfs comme sysfs
:
/sys(/.*)? u:object_r:sysfs:s0
La règle relative aux fournisseurs accorde l'accès à /sys/usb
, qui porte la mention sysfs
:
allow vendor_init sysfs:chr_file rw_file_perms;
Si la règle de la plate-forme est modifiée pour que /sys/usb
soit associé à sysfs_usb
, la règle du fournisseur reste la même, mais vendor_init
perd l'accès à /sys/usb
en raison de l'absence de règle pour le nouveau type sysfs_usb
:
/sys/usb u:object_r:sysfs_usb:s0
Pour résoudre ce problème, Android introduit le concept d'attributs versionnés. Au moment de la compilation, le système de compilation traduit automatiquement les types publics de plate-forme utilisés dans la règle du fournisseur en ces attributs versionnés. Cette traduction est possible grâce à des fichiers de mappage qui associent un attribut versionné à un ou plusieurs types publics de la plate-forme.
Par exemple, supposons que /sys/usb
soit libellé sysfs
dans la règle de plate-forme 202504 et que la règle du fournisseur 202504 accorde à vendor_init
l'accès à /sys/usb
. Dans ce cas :
-
La règle
allow vendor_init sysfs:chr_file rw_file_perms;
est écrite par la règle du fournisseur, car/sys/usb
est libellésysfs
dans la règle de la plate-forme 202504. Lorsque le système de compilation compile la règle du fournisseur, il la traduit automatiquement enallow vendor_init_202504 sysfs_202504:chr_file rw_file_perms;
. Les attributsvendor_init_202504
etsysfs_202504
correspondent aux typesvendor_init
etsysfs
, qui sont les types définis par la plate-forme. -
Le système de compilation génère un fichier de mappage d'identité
/system/etc/selinux/mapping/202504.cil
. Étant donné que les partitionssystem
etvendor
utilisent la même version202504
, le fichier de mappage contient des mappages d'identité detype_202504
àtype
. Par exemple,vendor_init_202504
est mappé survendor_init
etsysfs_202504
sursysfs
:(typeattributeset sysfs_202504 (sysfs)) (typeattributeset vendor_init_202504 (vendor_init)) ...
Lorsque la version passe de 202504 à 202604, un nouveau fichier de mappage pour les partitions 202504 vendor
est créé sous system/sepolicy/private/compat/202504/202504.cil
, qui est installé sur /system/etc/selinux/mapping/202504.cil
pour les partitions 202604 ou ultérieures system
. Initialement, ce fichier de mappage contient des mappages d'identité, comme décrit précédemment. Si un nouveau libellé sysfs_usb
pour /sys/usb
est ajouté au règlement de la plate-forme 202604, le fichier de mapping est mis à jour pour mapper sysfs_202504
sur sysfs_usb
:
(typeattributeset sysfs_202504 (sysfs sysfs_usb)) (typeattributeset vendor_init_202504 (vendor_init)) ...
Cette mise à jour permet à la règle allow
vendor_init_202504 sysfs_202504:chr_file rw_file_perms;
convertie pour les fournisseurs d'accorder automatiquement l'accès vendor_init
au nouveau type sysfs_usb
.
Pour maintenir la compatibilité avec les anciennes partitions vendor
, chaque fois qu'un nouveau type public est ajouté, il doit être mappé à au moins un des attributs versionnés dans le fichier de mappage system/sepolicy/private/compat/ver/ver.cil
ou être listé sous system/sepolicy/private/compat/ver/ver.ignore.cil
pour indiquer qu'il n'existe aucun type correspondant dans les versions précédentes du fournisseur.
La combinaison du règlement de la plate-forme, du règlement du fournisseur et du fichier de mappage permet au système de se mettre à jour sans mettre à jour le règlement du fournisseur. De plus, la conversion en attributs versionnés s'effectue automatiquement. La règle du fournisseur n'a donc pas besoin de gérer le versionnage et peut continuer à utiliser les types publics tels quels.
Règles publiques et produit public system_ext
À partir d'Android 11, les partitions system_ext
et product
sont autorisées à exporter leurs types publics désignés vers la partition vendor
. Comme le règlement public de la plate-forme, le règlement relatif aux fournisseurs utilise des types et des règles automatiquement traduits en attributs versionnés, par exemple de type
à type_ver
, où ver correspond au niveau d'API du fournisseur de la partition vendor
.
Lorsque les partitions system_ext
et product
sont basées sur la même version de plate-forme ver, le système de compilation génère des fichiers de mappage de base vers system_ext/etc/selinux/mapping/ver.cil
et product/etc/selinux/mapping/ver.cil
, qui contiennent des mappages d'identité de type
à type_ver
.
La règle du fournisseur peut accéder à type
avec l'attribut versionné type_ver
.
Si seules les partitions system_ext
et product
sont mises à jour, par exemple de ver à ver+1 (ou ultérieurement), tandis que la partition vendor
reste à ver, il est possible que la règle du fournisseur perde l'accès aux types des partitions system_ext
et product
. Pour éviter toute rupture, les partitions system_ext
et product
doivent fournir des fichiers de mappage des types concrets vers les attributs type_ver
. Chaque partenaire est responsable de la maintenance des fichiers de mappage s'il prend en charge la partition ver vendor
avec ver+1 (ou version ultérieure) system_ext
et les partitions product
.
Pour installer des fichiers de mappage dans les partitions system_ext
et product
, les intégrateurs ou fournisseurs d'appareils doivent :
- Copiez les fichiers de mappage de base générés à partir des partitions ver,
system_ext
etproduct
dans leur arborescence source. - Modifiez les fichiers de mappage si nécessaire.
-
Installez les fichiers de mappage sur les partitions ver+1 (ou version ultérieure)
system_ext
etproduct
.
Par exemple, supposons que la partition 202504 system_ext
comporte un type public nommé foo_type
. Ensuite, system_ext/etc/selinux/mapping/202504.cil
dans la partition 202504 system_ext
se présente comme suit :
(typeattributeset foo_type_202504 (foo_type)) (expandtypeattribute foo_type_202504 true) (typeattribute foo_type_202504)
Si bar_type
est ajouté à la partition 202604 system_ext
et que bar_type
doit être mappé sur foo_type
pour la partition 202504 vendor
, 202504.cil
peut être mis à jour de (typeattributeset foo_type_202504 (foo_type))
à (typeattributeset foo_type_202504 (foo_type bar_type))
, puis installé sur la partition 202604 system_ext
. La partition 202504 vendor
peut continuer à accéder aux foo_type
et bar_type
de la partition 202604 system_ext
.
Modifications d'attributs pour Android 9
Les appareils qui passent à Android 9 peuvent utiliser les attributs suivants, mais les appareils lancés avec Android 9 ne le doivent pas.
Attributs du contrevenant
Android 9 inclut les attributs liés au domaine suivants :
data_between_core_and_vendor_violators
. Attribut pour tous les domaines qui ne respectent pas l'exigence de ne pas partager de fichiers par chemin d'accès entrevendor
etcoredomains
. Les processus de plate-forme et de fournisseur ne doivent pas utiliser de fichiers sur disque pour communiquer (ABI instable). Recommandation :- Le code fournisseur doit utiliser
/data/vendor
. - Le système ne doit pas utiliser
/data/vendor
.
- Le code fournisseur doit utiliser
- Attribut
system_executes_vendor_violators
. pour tous les domaines système (saufinit
etshell domains
) qui ne respectent pas l'exigence de ne pas exécuter de binaires de fournisseurs. L'exécution des binaires du fournisseur présente une API instable. La plate-forme ne doit pas exécuter directement les binaires du fournisseur. Recommandation :- Ces dépendances de plate-forme sur les binaires du fournisseur doivent se trouver derrière les HAL HIDL.
OU
- Les
coredomains
qui ont besoin d'accéder aux binaires du fournisseur doivent être déplacés vers la partitionvendor
et ne plus êtrecoredomain
.
- Ces dépendances de plate-forme sur les binaires du fournisseur doivent se trouver derrière les HAL HIDL.
Attributs non approuvés
Les applications non approuvées qui hébergent du code arbitraire ne doivent pas avoir accès aux services HwBinder, à l'exception de ceux considérés comme suffisamment sûrs pour être accessibles à partir de ces applications (voir les services sécurisés ci-dessous). Voici les deux principales raisons :
- Les serveurs HwBinder n'effectuent pas d'authentification du client, car HIDL n'expose actuellement pas les informations UID de l'appelant. Même si HIDL exposait de telles données, de nombreux services HwBinder fonctionnent à un niveau inférieur à celui des applications (comme les HAL) ou ne doivent pas s'appuyer sur l'identité de l'application pour l'autorisation. Par conséquent, pour plus de sécurité, l'hypothèse par défaut est que chaque service HwBinder traite tous ses clients comme étant également autorisés à effectuer les opérations proposées par le service.
- Les serveurs HAL (un sous-ensemble de services HwBinder) contiennent du code avec un taux d'incidence plus élevé de problèmes de sécurité que les composants
system/core
et ont accès aux couches inférieures de la pile (jusqu'au matériel), ce qui augmente les possibilités de contourner le modèle de sécurité Android.
Services Safe
Voici quelques exemples de services sécurisés :
same_process_hwservice
. Ces services (par définition) s'exécutent dans le processus du client et ont donc le même accès que le domaine client dans lequel le processus s'exécute.coredomain_hwservice
. Ces services ne présentent pas les risques associés à la raison n° 2.hal_configstore_ISurfaceFlingerConfigs
. Ce service est spécifiquement conçu pour être utilisé par n'importe quel domaine.hal_graphics_allocator_hwservice
. Ces opérations sont également proposées par le service Bindersurfaceflinger
, auquel les applications sont autorisées à accéder.hal_omx_hwservice
. Il s'agit d'une version HwBinder du service Bindermediacodec
, auquel les applications sont autorisées à accéder.hal_codec2_hwservice
. Il s'agit d'une version plus récente dehal_omx_hwservice
.
Attributs utilisables
Tous les hwservices
considérés comme non sécurisés possèdent l'attribut untrusted_app_visible_hwservice
. Les serveurs HAL correspondants possèdent l'attribut untrusted_app_visible_halserver
. Les appareils lancés avec Android 9 NE DOIVENT PAS utiliser l'attribut untrusted
.
Recommandation :
- Les applications non fiables doivent plutôt communiquer avec un service système qui communique avec le HAL HIDL du fournisseur. Par exemple, les applications peuvent communiquer avec
binderservicedomain
, puismediaserver
(qui est unbinderservicedomain
) communique à son tour avechal_graphics_allocator
.OU
- Les applications qui ont besoin d'un accès direct aux HAL
vendor
doivent avoir leur propre domaine sepolicy défini par le fournisseur.
Tests des attributs de fichier
Android 9 inclut des tests au moment de la compilation qui garantissent que tous les fichiers situés à des emplacements spécifiques possèdent les attributs appropriés (par exemple, que tous les fichiers de sysfs
possèdent l'attribut sysfs_type
requis).
Libellés de contexte SELinux
Pour distinguer les règles sepolicy de la plate-forme de celles du fournisseur, le système crée les fichiers de contexte SELinux différemment pour les séparer.
Contextes de fichier
Android 8.0 a introduit les modifications suivantes pour file_contexts
:
- Pour éviter une surcharge de compilation supplémentaire sur l'appareil au démarrage, les
file_contexts
n'existent plus sous forme binaire. Ils sont plutôt lisibles et se présentent sous la forme de fichiers texte d'expressions régulières, comme{property, service}_contexts
(comme avant la version 7.0). - Les
file_contexts
sont répartis dans deux fichiers :plat_file_contexts
- Plate-forme Android
file_context
sans libellés spécifiques à l'appareil, à l'exception du libellé des parties de la partition/vendor
, qui doit être précis pour assurer le bon fonctionnement des fichiers sepolicy. - Doit résider dans la partition
system
à/system/etc/selinux/plat_file_contexts
sur l'appareil et être chargé parinit
au début avec lefile_context
du fournisseur.
- Plate-forme Android
vendor_file_contexts
file_context
spécifique à l'appareil, créé en combinantfile_contexts
trouvé dans les répertoires pointés parBOARD_SEPOLICY_DIRS
dans les fichiersBoardconfig.mk
de l'appareil.- Doit être installé à l'emplacement
/vendor/etc/selinux/vendor_file_contexts
dans la partitionvendor
et être chargé parinit
au démarrage avec la plate-formefile_context
.
Contextes de propriété
Dans Android 8.0, property_contexts
est divisé en deux fichiers :
plat_property_contexts
- Plate-forme Android
property_context
sans libellés spécifiques à l'appareil. - Doit résider dans la partition
system
à/system/etc/selinux/plat_property_contexts
et être chargé parinit
au début avec le fournisseurproperty_contexts
.
- Plate-forme Android
vendor_property_contexts
property_context
spécifique à l'appareil, créé en combinantproperty_contexts
trouvé dans les répertoires pointés parBOARD_SEPOLICY_DIRS
dans les fichiersBoardconfig.mk
de l'appareil.- Doit résider dans la partition
vendor
à/vendor/etc/selinux/vendor_property_contexts
et être chargé parinit
au démarrage avec leproperty_context
de la plate-forme
Contextes de service
Dans Android 8.0, le fichier service_contexts
est divisé entre les fichiers suivants :
plat_service_contexts
service_context
spécifique à la plate-forme Android pourservicemanager
.service_context
ne comporte pas de libellés spécifiques à l'appareil.- Doit résider dans la partition
system
à/system/etc/selinux/plat_service_contexts
et être chargé parservicemanager
au début avec leservice_contexts
du fournisseur.
vendor_service_contexts
service_context
spécifique à l'appareil, créé en combinantservice_contexts
trouvé dans les répertoires pointés parBOARD_SEPOLICY_DIRS
dans les fichiersBoardconfig.mk
de l'appareil.- Doit résider dans la partition
vendor
à l'adresse/vendor/etc/selinux/vendor_service_contexts
et être chargé parservicemanager
au démarrage avec leservice_contexts
de la plate-forme. - Bien que
servicemanager
recherche ce fichier au démarrage, pour un appareilTREBLE
entièrement conforme, le fichiervendor_service_contexts
NE DOIT PAS exister. En effet, toute interaction entre les processusvendor
etsystem
DOIT passer parhwservicemanager
/hwbinder
.
plat_hwservice_contexts
- Plate-forme Android
hwservice_context
pourhwservicemanager
sans libellé spécifique à l'appareil. - Doit résider dans la partition
system
à/system/etc/selinux/plat_hwservice_contexts
et être chargé parhwservicemanager
au début avecvendor_hwservice_contexts
.
- Plate-forme Android
vendor_hwservice_contexts
hwservice_context
spécifique à l'appareil, créé en combinanthwservice_contexts
trouvé dans les répertoires pointés parBOARD_SEPOLICY_DIRS
dans les fichiersBoardconfig.mk
de l'appareil.- Doit résider dans la partition
vendor
à/vendor/etc/selinux/vendor_hwservice_contexts
et être chargé parhwservicemanager
au démarrage avecplat_service_contexts
.
vndservice_contexts
service_context
spécifique à l'appareil pour levndservicemanager
créé en combinantvndservice_contexts
trouvé dans les répertoires pointés parBOARD_SEPOLICY_DIRS
dans leBoardconfig.mk
de l'appareil.- Ce fichier doit résider dans la partition
vendor
à l'adresse/vendor/etc/selinux/vndservice_contexts
et être chargé parvndservicemanager
au démarrage.
Contextes Seapp
Dans Android 8.0, seapp_contexts
est divisé en deux fichiers :
plat_seapp_contexts
- Plate-forme Android
seapp_context
sans modifications spécifiques à l'appareil. - Doit résider dans la partition
system
à l'adresse/system/etc/selinux/plat_seapp_contexts.
- Plate-forme Android
vendor_seapp_contexts
- Extension spécifique à l'appareil de la plate-forme
seapp_context
créée en combinantseapp_contexts
trouvés dans les répertoires pointés parBOARD_SEPOLICY_DIRS
dans les fichiersBoardconfig.mk
de l'appareil. - Doit résider dans la partition
vendor
à l'adresse/vendor/etc/selinux/vendor_seapp_contexts
.
- Extension spécifique à l'appareil de la plate-forme
Autorisations MAC
Dans Android 8.0, mac_permissions.xml
est divisé en deux fichiers :
- Plate-forme
mac_permissions.xml
- Plate-forme Android
mac_permissions.xml
sans modifications spécifiques à l'appareil. - Doit résider dans la partition
system
à l'adresse/system/etc/selinux/.
- Plate-forme Android
- Hors plate-forme
mac_permissions.xml
- Extension spécifique à l'appareil de la plate-forme
mac_permissions.xml
construite à partir demac_permissions.xml
trouvée dans les répertoires indiqués parBOARD_SEPOLICY_DIRS
dans les fichiersBoardconfig.mk
de l'appareil. - Doit résider dans la partition
vendor
à l'adresse/vendor/etc/selinux/.
- Extension spécifique à l'appareil de la plate-forme