Le système d'exploitation Android contient des utilitaires réseau Linux standards
comme ifconfig
, ip
et ip6tables
.
Ces utilitaires résident sur l'image système et permettent de configurer
l'ensemble de la pile réseau Linux. Sur les appareils équipés d'Android 7.x ou version antérieure,
le code du fournisseur est autorisé à appeler directement ces binaires, ce qui présente le
les problèmes suivants:
- Comme les utilitaires réseau sont mis à jour dans l'image système, ils n'ont pas de fournir une implémentation stable.
- Le champ d'application des utilitaires de mise en réseau est si vaste qu'il est difficile de faire évoluer l'image système tout en garantissant un comportement prévisible.
Sur les appareils équipés d'Android 8.0 ou version ultérieure, la partition des fournisseurs reste la même. tandis que la partition système reçoit une mise à jour. Pour ce faire, Android 8.0 permet de définir une interface stable avec versions gérées tout en utilisant Restrictions de SELinux pour maintenir l'interdépendance du fournisseur et de l'image système ensemble connu.
Les fournisseurs peuvent utiliser les utilitaires de configuration réseau fournis par la plate-forme pour
configurer la pile réseau Linux, mais ces utilitaires n'incluent pas encore
Wrapper d'interface HIDL. Pour définir une telle interface, Android 8.0 inclut le
Outil netutils-wrapper-1.0
.
Wrapper Netutils
L'utilitaire wrapper netutils
fournit un sous-ensemble du package Linux
configuration de la pile réseau qui n'est pas affectée par les mises à jour des partitions système.
Android 8.0 contient la version 1.0 des wrappers, ce qui vous permet de transmettre le
les mêmes arguments que les utilitaires encapsulés, installés dans la partition système à l'adresse
/system/bin
comme suit:
u:object_r:system_file:s0 /system/bin/ip-wrapper-1.0 -> netutils-wrapper-1.0 u:object_r:system_file:s0 /system/bin/ip6tables-wrapper-1.0 -> netutils-wrapper-1.0 u:object_r:system_file:s0 /system/bin/iptables-wrapper-1.0 -> netutils-wrapper-1.0 u:object_r:system_file:s0 /system/bin/ndc-wrapper-1.0 -> netutils-wrapper-1.0 u:object_r:netutils_wrapper_exec:s0 /system/bin/netutils-wrapper-1.0 u:object_r:system_file:s0 /system/bin/tc-wrapper-1.0 -> netutils-wrapper-1.0
Les liens symboliques indiquent les utilitaires réseau encapsulés par netutils
.
qui inclut les éléments suivants:
ip
iptables
ip6tables
ndc
tc
Pour utiliser ces utilitaires dans Android 8.0 et versions ultérieures, les implémentations des fournisseurs doivent respectent les règles suivantes:
- Les processus du fournisseur ne doivent pas s’exécuter
/system/bin/netutils-wrapper-1.0
directement ; tente de le faire entraîne une erreur. - Tous les utilitaires encapsulés par
netutils-wrapper-1.0
doivent être lancés à l'aide de leurs liens symboliques. Par exemple, modifiez le code fournisseur qui effectuait cette opération auparavant. (/system/bin/ip <FOO> <BAR>
) jusqu'à/system/bin/ip-wrapper-1.0 <FOO> <BAR>
- L'exécution des wrappers sans transition de domaine est interdite sur la plate-forme Règles de SELinux Cette règle ne doit pas être modifiée et fait l'objet d'un test dans le Android Compatibility Test Suite (CTS)
- Exécuter directement les utilitaires (par exemple,
/system/bin/ip <FOO> <BAR>
) des processus du fournisseur est également interdite dans les règles de la plateforme SELinux. Cette règle ne doit pas être modifiées et sont testées dans CTS. - Tout domaine (processus) de fournisseur devant lancer un wrapper doit ajouter le paramètre
règle de transition de domaine suivante dans la règle SELinux:
domain_auto_trans(VENDOR-DOMAIN-NAME, netutils_wrapper_exec, netutils_wrapper)
Filtres de wrapper Netutils
Les utilitaires encapsulés peuvent être utilisés pour configurer presque tous les aspects de Linux la pile réseau. Toutefois, pour s'assurer qu'il est possible de maintenir un niveau et autoriser les mises à jour de la partition système, seules certaines combinaisons d'arguments de ligne de commande sont autorisés. les autres commandes sont rejetées.
Interfaces et chaînes des fournisseurs
Le wrapper est associé à un concept d'interface fournisseur. Il s'agit d'interfaces généralement gérées par le code fournisseur, comme les interfaces de données mobiles. Généralement, les autres types d'interfaces (comme le Wi-Fi) sont gérés par les HAL et le d'infrastructure. Le wrapper reconnaît les interfaces de fournisseurs par leur nom (à l'aide d'un d'expression) et permet au code fournisseur d'effectuer de nombreuses opérations sur ceux-ci. Actuellement, les interfaces fournisseurs sont les suivantes:
- Interfaces dont le nom se termine par "oem" suivi d'un nombre, par exemple
oem0
our_oem1234
. - Interfaces utilisées par les implémentations actuelles SOC et OEM, telles que
rmnet_data[0-9]
Noms des interfaces généralement gérées par le framework (comme
wlan0
) ne sont jamais des interfaces de fournisseurs.
Le wrapper utilise un concept semblable aux chaînes de fournisseurs. Ceux-ci sont utilisés
dans les commandes iptables
et sont également reconnus par leur nom. Actuellement,
chaînes de fournisseurs:
- Commencez par
oem_
. - sont utilisés par les implémentations actuelles des SOC et des OEM (chaînes commençant par
nm_
ouqcom_
.
Commandes autorisées
Les commandes actuellement autorisées sont listées ci-dessous. Les restrictions sont appliquées via
un ensemble d'expressions régulières dans les lignes de commande exécutées. Pour en savoir plus, consultez
à system/netd/netutils_wrappers/NetUtilsWrapper-1.0.cpp
.
adresse IP
La commande ip
permet de configurer les adresses IP, le routage,
le chiffrement et un certain
nombre d'autres paramètres réseau. Le wrapper permet au
les commandes suivantes:
- Ajouter et supprimer des adresses IP dans les interfaces gérées par le fournisseur
- Configurez le chiffrement IPsec.
iptables et ip6tables
Les commandes iptables
et ip6tables
permettent de
configurer le pare-feu, la gestion des paquets,
la NAT et d'autres traitements par paquet.
Le wrapper autorise les commandes suivantes:
- Ajouter et supprimer des chaînes de fournisseurs.
- Ajoutez et supprimez des règles dans toute
chaîne faisant référence aux paquets entrants
(
-i
) ou sur (-o
) une interface fournisseur. - Accédez à une chaîne de fournisseurs à partir de n'importe quel point de n'importe quelle autre chaîne.
ndc
ndc
permet de communiquer au daemon netd
que
effectue la majeure partie de la configuration réseau sur Android. Le wrapper permet ce qui suit :
commandes:
- Créer et détruire des réseaux OEM (
oemXX
) - Ajoutez des interfaces gérées par le fournisseur aux réseaux OEM.
- Ajoutez des routes aux réseaux OEM.
- Activez ou désactivez le transfert IP de manière globale et sur les interfaces des fournisseurs.
à confirmer
La commande tc
permet de configurer la mise en file d'attente et la mise en forme du trafic.
sur les interfaces des fournisseurs.