Plusieurs services communs doivent être actifs pour que les accès au système de fichiers réseau NFS soient utilisables. Le mécanisme de gestion des appels de procédures distants appelé RPC ou Remote Procedure Call constitue le point de départ dans la mise œuvre de ces services communs.
Le logiciel de gestion des appels de procédures distants a évolué avec les différentes versions du système de fichiers NFS et l'arrivée du protocole réseau IPv6. La configuration étudiée ici doit permettre de fonctionner de la façon la plus transparente possible avec les versions 3 et 4 du système de fichiers NFS.
Note | |
---|---|
Les manipulations présentées ici ne traitent pas le volet authentification et chiffrement des échanges sur le réseau. On considère que les services Kerberos, SPKM-3 et LIPKEY ne sont pas actifs sur les systèmes étudiés. |
Q55. |
Quels sont les deux logiciels disponibles chargés de la gestion des appels RPC ? Qu'est-ce qui les distinguent ? La présentation Systèmes de fichiers réseau introduit les principes de fonctionnement des appels de procédures distants. Rechercher dans le support Linux NFS-HOWTO le service «historique» utilisé par NFS pour le multiplexage des appels de procédures distants. |
|||
Le support Linux
NFS-HOWTO présente le service «historique» utilisé par
NFS pour le multiplexage des
appels de procédure distants : Le démon |
||||
Q56. |
Quel est le paquet qui correspond à la gestion des appels de procédure distants ?. Utiliser les outils de recherche dans les répertoires de noms de paquets et dans leurs descriptions : apt-cache, dpkg, aptitude. |
|||
Comme indiqué dans la documentation, on recherche un paquet
portant le nom apt search rpcbind En train de trier... Fait Recherche en texte intégral... Fait rpcbind/testing 1.2.6-6+b1 amd64 conversion de numéros de programmes RPC en adresses universelles sudo apt install rpcbind |
||||
Q57. |
Quel est le numéro de port utilisé par le service ? Quel est le principe de fonctionnement du service pour le traitement des appels de procédures distants ? Utiliser les commandes qui permettent d'obtenir les informations sur :
|
|||
|
||||
Q58. |
Quelle est a commande qui permet de lister les services accessibles via un appel RPC ? À quel paquet appartient cette commande ? Rechercher dans le support Linux NFS-HOWTO et dans la liste des fichiers du paquet sélectionné pour la gestion des appels RPC. |
|||
La commande présentée dans le support Linux NFS-HOWTO est appelée rpcinfo. On vérifie sa présence sur le système étudié de la façon suivante. dpkg -S $(which rpcinfo) rpcbind: /usr/sbin/rpcinfo C'est l'option rpcinfo -s program version(s) netid(s) service owner 100000 2,3,4 local,udp,tcp,udp6,tcp6 portmapper superuser La copie d'écran ci-dessus montre que le gestionnaire d'appel
|
||||
Q59. |
Donner deux exemples d'exécution de la commande pour lister le(s) service(s) ouvert sur le système local puis sur le système voisin. Reprendre la commande utilisée dans la question précédente en indiquant l'adresse IPv4 ou IPv6 du système voisin. |
|||
L'exemple d'exécution de la commande en local est donné dans la copie d'écran de la question précédente. Pour connaître les services accessibles sur un autre poste, on utilise la même commande suivie de l'adresse IP de cet hôte. rpcinfo -s 192.168.51.194 program version(s) netid(s) service owner 100000 2,3,4 local,udp,tcp,udp6,tcp6 portmapper superuser rpcinfo -s fe80::baad:caff:fefe:2 program version(s) netid(s) service owner 100000 2,3,4 local,udp,tcp,udp6,tcp6 portmapper superuser Ces copies d'écran montrent la même liste de paramètres que lors de l'exécution de la commande en local. Les configurations sur les deux hôtes sont donc identiques à ce stade de la configuration. |
||||
Q60. |
Réaliser une capture à l'aide de l'analyseur réseau lors de l'exécution de la commande et relever : le protocole de transport utilisé, les numéros de ports caractéristiques de cette transaction ainsi que le nom de la procédure RPC utilisée. système 1 système 2 ---------------------------------------------------------- <commande> --- requête ---> <processus> <-- réponse ---- |
|||
Voici un exemple de capture en mode console qui donne les éléments demandés.
Pour une requête IPv4, on obtient : tshark -i enp0s1 Capturing on 'enp0s1' 192.168.51.195 → 192.168.51.194 TCP 74 53284 → 111 [SYN] Seq=0 192.168.51.194 → 192.168.51.195 TCP 74 111 → 53284 [SYN, ACK] Seq=0 Ack=1 192.168.51.195 → 192.168.51.194 TCP 66 53284 → 111 [ACK] Seq=1 Ack=1 192.168.51.195 → 192.168.51.194 Portmap 110 V3 DUMP Call 192.168.51.194 → 192.168.51.195 TCP 66 111 → 53284 [ACK] Seq=1 Ack=45 192.168.51.194 → 192.168.51.195 Portmap 754 V3 DUMP Reply (Call In 4) 192.168.51.195 → 192.168.51.194 TCP 66 53284 → 111 [ACK] Seq=45 Ack=689 192.168.51.195 → 192.168.51.194 TCP 66 53284 → 111 [FIN, ACK] Seq=45 Ack=689 192.168.51.194 → 192.168.51.195 TCP 66 111 → 53284 [FIN, ACK] Seq=689 Ack=46 192.168.51.195 → 192.168.51.194 TCP 66 53284 → 111 [ACK] Seq=46 Ack=690 Pour une requête IPv6 avec l'adresse unique, on obtient : tshark -i enp0s1 2001:678:3fc:1f5:baad:caff:fefe:3 → 2001:678:3fc:1f5:baad:caff:fefe:2 TCP 94 51134 → 111 [SYN] Seq=0 2001:678:3fc:1f5:baad:caff:fefe:2 → 2001:678:3fc:1f5:baad:caff:fefe:3 TCP 94 111 → 51134 [SYN, ACK] Seq=0 Ack=1 2001:678:3fc:1f5:baad:caff:fefe:3 → 2001:678:3fc:1f5:baad:caff:fefe:2 TCP 86 51134 → 111 [ACK] Seq=1 Ack=1 2001:678:3fc:1f5:baad:caff:fefe:3 → 2001:678:3fc:1f5:baad:caff:fefe:2 Portmap 130 V3 DUMP Call 2001:678:3fc:1f5:baad:caff:fefe:2 → 2001:678:3fc:1f5:baad:caff:fefe:3 TCP 86 111 → 51134 [ACK] Seq=1 Ack=45 2001:678:3fc:1f5:baad:caff:fefe:2 → 2001:678:3fc:1f5:baad:caff:fefe:3 Portmap 774 V3 DUMP Reply (Call In 4) 2001:678:3fc:1f5:baad:caff:fefe:3 → 2001:678:3fc:1f5:baad:caff:fefe:2 TCP 86 51134 → 111 [ACK] Seq=45 Ack=689 2001:678:3fc:1f5:baad:caff:fefe:3 → 2001:678:3fc:1f5:baad:caff:fefe:2 TCP 86 51134 → 111 [FIN, ACK] Seq=45 Ack=689 2001:678:3fc:1f5:baad:caff:fefe:2 → 2001:678:3fc:1f5:baad:caff:fefe:3 TCP 86 111 → 51134 [FIN, ACK] Seq=689 Ack=46 2001:678:3fc:1f5:baad:caff:fefe:3 → 2001:678:3fc:1f5:baad:caff:fefe:2 TCP 86 51134 → 111 [ACK] Seq=46 Ack=690
Pour une requête IPv6 avec l'adresse de lien local, on obtient : tshark -i enp0s1 -f "! port 22" Capturing on 'enp0s1' 1 0.000000000 fe80::baad:caff:fefe:3 → fe80::baad:caff:fefe:2 Portmap 102 V3 DUMP Call 2 0.000265556 fe80::baad:caff:fefe:2 → fe80::baad:caff:fefe:3 Portmap 746 V3 DUMP Reply (Call In 1) 2 packets captured Ici, le protocole de couche transport utilisé est UDP. Comme UDP est non orienté connexion, on ne relève aucune trace d'ouverture ou de fermeture de connexion. On remarque que la copie d'écran ci-dessus utilise une syntaxe
de capture qui permet de filtrer tous les segments qui font appel
au port numéro tshark -i enp0s1 -f "! port 22" Pour exploiter toutes les informations du trafic capturé, il est conseillé de stocker les résultats dans un fichier à l'aide de la syntaxe suivante. tshark -i enp0s1 -f "! port 22" -w /var/tmp/rpcbind.pcap Capturing on 'enp0s1' 3 ^C Dans ce dernier cas, seul le compte des trames capturées apparaît à la console. On peut alors transférer le fichier de capture via la commande scp pour une exploitation via l'interface graphique de Wireshark ou afficher les détails directement à la console. Dans l'exemple ci-dessous, on affiche toutes les informations relatives à la première trame capturée. tshark -r /var/tmp/rpcbind.pcap -V -Y "frame.number == 1" |