TP-1 Utilisation du réseau sous Unix et pratique de SSH

par Joseph Razik, le 2024-02-02

1   Objectif

L'objectif de ce premier TP est triple :

  • Mettre en place un réseau virtuel,
  • Étudier la configuration des interfaces réseaux existantes de votre machine sous linux et des machines virtuelles,
  • Étude d'outils de connexion, d'exécution de commandes à distance ou de transfert de fichier sécurisé (ssh).

2   Mise en place du réseau virtuel

La première chose à faire est de mettre en place le réseau virtuel que nous allons utiliser au cours des différents TPs.

Pour ce faire, seules deux étapes sont nécessaires à réaliser : l'installation des machines et leur démarrage.

Les détails de la composition de ce réseau virtuel et de sa manipulation sont présentés à cette page : NetDemo : Un réseau virtuel.

3   Étude de la configuration réseau de votre machine et des machines virtuelles

Vous allez analyser la configuration réseau de plusieurs machines d'un point de vue Ethernet et des services Internet offerts.

Pour chacun des fichiers ci-dessous vous regarderez la page du manuel (commande man) sur la machine physique, puis vous regarderez son contenu sur votre machine physique et les deux machines virtuelles serveur et client. Vous ferez les liens avec les notions vues en cours telles que les adressages et la résolution d'adresse.

3.1   Les fichiers de configuration

  • Fichiers /etc/netplan/10-vlan-uprime.yaml (machine physique) et /opt/ethX.sh (machines virtuelles, X étant un numéro d'interface) : affichez leur contenu. À quoi peuvent servir ces fichiers ? Comparez sur les informations données pour les trois machines.
  • Fichier /etc/hosts : affichez son contenu (en utilisant la commande less). À quoi sert ce fichier (man hosts) ? Pourquoi ne contient-il pas le nom de l’ensemble des machines de l’université ?
  • Fichier /etc/resolv.conf : affichez son contenu. À quoi sert ce fichier (man resolv.conf) ?
  • À quoi correspond l'interface loopback _?
  • Fichier /etc/ethertypes : affichez son contenu. À quoi sert ce fichier ? À quelle couche OSI correspondent ces valeurs ?
  • Fichier /etc/protocols : affichez son contenu. À quoi sert ce fichier ? À quelle couche OSI correspondent ces valeurs ?
  • Fichier /etc/services : affichez son contenu. À quoi sert ce fichier ? Retrouvez le numéro de port des services TELNET, FTP et SMTP.

3.2   Les commandes liées à la configuration

  • Commandes ip et ifconfig : en utilisant la commande man, expliquez à quoi servent ces commandes. Quelles sont les paramètres permettant d'avoir les informations au niveau MAC et IP ? Combien d’interfaces Ethernet actives possède chaque machine ? À quoi correspond le paramètre MTU ?

  • Indiquez pour chaque réseau

    • La valeur de son MTU,
    • La longueur du préfixe réseau (et du masque quand cela a un sens)
    • L'adresse de réseau et l'adresse de broadcast (quand cela a un sens) ?
  • Commande netstat : expliquez le rôle de la commande netstat.

    • À l’aide d'une combinaison d'options dont l'option -a de la commande netstat, retrouvez les services TCP actifs sur votre machine physique ainsi que la liste des connexions TCP en cours. Remarquez la notation host:numero port et l’état courant d’une connexion TCP.
    • À l’aide des options -nr de netstat, précisez les passerelles liées à votre machine physique, quel est leur rôle ? Comparez avec la commande route -n et la bonne option de la commande ip. Pourquoi mettre l'option -n à netstat ou route ?

4   Utilisation de ssh

sshd (openssh) est un serveur qui permet de communiquer de façon sécurisée, en établissant un canal de communication chiffré entre lui et ses clients. Il s'éxecute et attends les connexions des clients sur le port 22.

Pour en savoir plus sur le serveur ssh, lisez en détail man sshd. Les fichiers de configuration sont placés dans /usr/local/etc/ssh/ pour les machines virtuelles, et les fichiers de configuration et d'informations sauvegardées du client ssh sont placés dans ~/.ssh/ pour chaque utilisateur.

Consultez le répertoire .ssh/ sur votre machine. Le répertoire existe-t-il ? S'il contient des fichiers, que contiennent-ils ?

4.1   Connexion à distance avec ssh

La syntaxe (courte) de la commande est la suivante : ssh user@machine, user étant un compte valide existant sur machine (nom ou adresse IP).

Depuis la machine hôte, connectez-vous au compte user, mot de passe user, de client. À quoi correspond et à quoi sert la question qui est posée lors de la première connexion ?

Une fois la connexion établie, vous êtes dans la même situation qu’avec le service telnet : prise de contrôle / terminal à distance. Vous testerez quelques commandes (listage de répertoires, ...).

Consultez le répertoire .ssh/ sur votre machine hôte. Que contiennent maintenant les fichiers ?

4.2   Tranfert de fichiers avec scp

La commande scp (secure copy), permet de copier des fichiers et des arborescences, en utilisant ssh pour sécuriser les transferts.

La syntaxe générale est scp [-r] source destination, où source et destination désignent respectivement l’ensemble des fichiers à copier et le répertoire d’accueil. source et destination peuvent avoir la forme suivante [user@machine:]chemin. user et machine sont les paramètres normaux de la commande ssh et chemin est un chemin absolu (sur machine) ou relatif au répertoire home de user sur machine.

Exemples classiques :

  • La commande suivante

    scp -r monLogin@monServeur:monDossierDistant monRepertoireLocal
    

    permet de copier localement le répertoire monDossierDistant (situé dans le répertoire home de l'utilisateur monLogin du serveur monServeur. Ce répertoire sera renommé localement en monRepertoireLocal. Attention, si le répertoire destination existe déjà la copie se fera l'intérieur.

  • La commande suivante

    scp -r monRepertoireLocal monLogin@monServeur:monDossierDistant
    

    permet de déposer des fichiers locaux sur un serveur distant.

  • Sur la machine hôte, créez un répertoire Test qui contient les fichiers vides f1 et f2. À partir de la machine hôte, copiez le répertoire Test complet sur le compte user de la machine client.

  • Sur la machine client, créez un fichier titi.txt. À partir de la machine hôte, copiez ce fichier distant localement tout en le renommant toto.txt, en une seule commande scp.

4.3   Connexion avec une paire de clés

ssh autorise un autre mécanisme d’authentification utilisant une méthode cryptographique à clé publique.

Chaque utilisateur désireux d’utiliser ssh avec une authentification à clé publique doit tout d'abord générer un couple de clés à l'aide de la commande ssh-keygen. La commande commence par la création de la paire de clés (une publique et une privée) et demande à l’utilisateur de saisir une phrase de passe (un mot de passe long et complexe) pour protéger la clé privée.

La clé privée servira à chiffrer les données et ne devra jamais être diffusée. La clé publique servira à déchiffrer les données et devra être disponible, connue des destinataires.

Sur la machine hôte, générez une paire de clés et vérifiez que les clés sont bien créées dans ~./ssh.

Pour que la connexion soit autorisée à tout utilisateur possédant la clé privée, ajoutez la clé publique dans le fichier ~/.ssh/authorized_keys des comptes user des machines client, server, ... Dans le cas général, comment transférer la clé publique sur une autre machine ? Attention, le répertoire .ssh doit avoir les bons droits pour protéger les clés sinon elles ne seront pas utilisées.

La commande suivante permet d'ajouter les clés de façon simple et sécurisée :

ssh-copy-id [-i [identity_file]] [user@]machine

Vous pouvez donc faire depuis l'hôte :

ssh-copy-id user@192.168.56.X

Dans le cas des machines du département, comme elles partagent toutes les mêmes fichiers via NFS (Network File System), est-il nécessaire d'effectuer la même procédure de transfert de clé ?

Essayez ensuite de vous connecter sur une autre machine (vous activerez l'option -v de ssh).

Normalement, c'est la passphrase qui doit être demandée et non le mot de passe. Expliquez pourquoi.

En apparence, nous avons donc remplacé la saisie d'un mot de passe par une passphrase plus longue. Expliquez quelle différence existe en ce qui concerne la circulation du mot de passe sur le réseau.

Pour finir, afin d'éviter d'avoir à saisir la passphrase à chaque commande, étudiez l'utilisation de la commande ssh-add et ssh-agent pour utiliser ssh et scp.