Unix & Shell · L1 · Section 5/7
Réseau et SSH
Progression
#Réseau et SSH
SSH est votre porte d'entrée vers une machine distante. Avec une paire de clés, vous vous authentifiez sans mot de passe et pouvez copier des fichiers, exécuter des commandes, voire créer des tunnels.
#Prérequis et objectifs
Prérequis: processus et jobs (savoir repérer un port occupé). Objectifs: générer une clé moderne, déclarer vos hôtes dans ~/.ssh/config, transférer des fichiers avec rsync et ouvrir un tunnel local vérifiable.
#Clés et configuration
Créez une clé moderne et protégez-la par une passphrase:
1ssh-keygen -t ed25519 -C "prenom.nom@exemple.com"2# Observation attendue:3# Your identification has been saved in /home/antoine/.ssh/id_ed255194# Your public key has been saved in /home/antoine/.ssh/id_ed25519.pubSSH est exigeant sur les permissions du dossier .ssh:
1chmod 700 ~/.ssh2chmod 600 ~/.ssh/id_ed25519 ~/.ssh/configChargez la clé dans l'agent pour ne retaper la passphrase qu'une fois par session, puis déclarez vos hôtes dans ~/.ssh/config pour des commandes concises et stables:
1Host prod-api2 HostName 203.0.113.103 User deploy4 IdentityFile ~/.ssh/id_ed255195 ProxyJump bastionVous pourrez alors simplement taper ssh prod-api. Vérifiez les clés chargées avec ssh-add -l. La première connexion enregistre l'empreinte du serveur dans ~/.ssh/known_hosts; si elle change ensuite, SSH refuse la connexion: ne l'ignorez pas sans comprendre pourquoi.
#Transférer et synchroniser
scp copie de façon ponctuelle. Pour des répertoires ou des gros volumes, préférez rsync, qui ne recopie que les différences et peut reprendre un transfert interrompu:
1rsync -azP --delete site/ prod-api:/var/www/site/2# -a archive les droits et dates, -z compresse, -P montre la progressionAttention au slash final: site/ copie le contenu du dossier, site copie le dossier lui-même.
#Tunneler un service
Si un service n'est pas exposé, créez un tunnel local qui redirige un port de votre machine vers la cible distante:
1ssh -L 5433:localhost:5432 prod-api # accès local à la base distanteVérification, dans un second terminal: ss -tln | grep 5433 montre le port en écoute locale, et nc -vz localhost 5433 affiche succeeded.
#Diagramme: poignée de main SSH (simplifiée)
#Le réseau : graphe, adresses et protocoles
Un réseau se modélise par un graphe: un ensemble de nœuds (sommets) et de liens (arêtes). Les nœuds représentent les ordinateurs, les serveurs, les imprimantes, les nœuds de communication; les arêtes représentent les liaisons. Le cours file l'analogie du réseau routier — routes, échangeurs, convois — et distingue deux échelles: le réseau local, qui relie les machines d'un bâtiment ou d'une entreprise, et le réseau étendu, qui relie des machines distantes de centaines ou milliers de kilomètres.
Trois modes de transmission coexistent. La liaison directe établit une connexion entre deux postes et empêche toute autre connexion. La diffusion fait envoyer l'émetteur dans toutes les directions: tous les récepteurs captent l'information, seuls les destinataires l'utilisent. Ethernet met en œuvre ce principe, chaque organe possédant une adresse Ethernet (adresse MAC) caractéristique dans le monde entier. La transmission passe par plusieurs commutateurs, avec un établissement de liaison temporaire; comme un commutateur n'a qu'un nombre limité de canaux, on découpe l'information en paquets transmis indépendamment et regroupés à l'arrivée.
Adresses. Sur un réseau local, la machine est identifiée par son adresse MAC; sur Internet, par son adresse IP. L'adressage IPv4 est un nombre de 32 bits découpé en quatre octets, dont la première partie identifie le réseau (net id) et la seconde la machine (host id). Il définit cinq classes, dont trois pour les réseaux membres d'Internet:
- classe A — premier octet inférieur à 128, pas plus de 128 très grands réseaux, trois octets pour les machines (l'octet 18 correspond au réseau du MIT);
- classe B — premier octet entre 128 et 192, 16 384 réseaux de 65 536 machines (
134.59est le réseau de l'UNSA); - classe C — premier octet entre 192 et 224, plus de deux millions de petits réseaux de 256 machines.
Le recours au NAT (network address translation), par lequel beaucoup d'entreprises cachent leurs adresses internes, n'a pas suffi: « ce système a atteint ses limites ». Les classes ont été abandonnées dès 1993 avec le CIDR (Classless Inter-Domain Routing), et l'IPv6 sur 128 bits doit remplacer IPv4 à terme. Une adresse IPv6 s'écrit en hexadécimal, en 8 groupes de 16 bits séparés par des deux-points, et le nombre d'adresses théoriques atteint .
Noms. L'adresse IP étant malcommode, on définit des adresses symboliques hiérarchisées en domaines, et des serveurs de noms établissent la correspondance dans les deux sens. La hiérarchie se lit de droite à gauche, le niveau le plus élevé apparaissant en dernier: domaine par pays (fr, uk, za), domaines « apatrides » (org, net, com, biz), domaines réservés aux États-Unis (mil, gov, edu). En France, l'Afnic gère .fr. Les niveaux inférieurs appartiennent à l'organisme propriétaire du domaine, et les alias sont fréquents: sesame-mips.unice.fr et www-mips.unice.fr désignent tous deux polymnie.unice.fr.
Ports. Chaque application utilise un numéro de port spécialisé qui l'identifie, ce qui permet au message arrivé d'être transmis à la bonne application. Les numéros à connaître:
- FTP 21, Telnet 23, SMTP 25, DNS 53, HTTP 80, POP3 110, NNTP 119, NTP 123, IRC 194.
Diagnostic. Quatre commandes suffisent à la plupart des enquêtes.
1host polymnie.unice.fr # nom vers adresse, ou l'inverse2dig polymnie.unice.fr # la même chose, avec beaucoup plus de détails3ping polymnie # accessibilité; C-c pour arrêter4traceroute www.unice.fr # le chemin, routeur par routeurhost interroge un serveur de noms et prend en argument l'une des deux formes d'adresse pour répondre avec l'autre. ping teste l'accessibilité, et en enchaînant des cibles de plus en plus éloignées, on localise l'origine d'une panne — le cours signale que beaucoup de machines ne répondent pas, pour des raisons de sécurité. traceroute montre les routeurs traversés: certains reviennent systématiquement, ce sont les nœuds d'interconnexion. Enfin, l'abréviation ping polymnie fonctionne parce que la machine appartient au domaine local: le serveur de noms complète le nom court.
#Les protocoles de communication
Le cours classe les protocoles selon la présence simultanée qu'ils exigent.
Les protocoles simples et immédiats fonctionnent entre deux personnes. write envoie du texte sur le terminal de quelqu'un d'autre: on repère d'abord son interlocuteur avec who, puis on établit un dialogue à deux, chacun annonçant la fin de son message et terminant par C-d. talk gère lui-même son protocole et découpe la fenêtre en deux parties, mais beaucoup de machines le refusent. Leur inconvénient est structurel: les deux interlocuteurs doivent être présents simultanément, et write impose d'être sur la même machine. La commande mesg n refuse les dialogues dans un terminal, mesg y les accepte.
Le protocole IRC (Internet Relay Chat) étend la communication immédiate à plusieurs personnes: des serveurs reliés entre eux, des canaux nombreux, tout message transmis à tous les serveurs qui servent le canal. Le cours en tire une conséquence pratique: « tout le monde parle ensemble, comme dans une foule, peu de gens écoutent ».
Le protocole NNTP (Network News Transfer Protocol) organise au contraire une communication différée, apparentée à des panneaux d'affichage publics: les articles sont publics, les participants n'ont pas besoin d'être connectés simultanément, les articles sont conservés un certain temps, et les groupes sont organisés hiérarchiquement, le terme le plus général en premier (comp, rec, alt, fr). L'ensemble des serveurs NNTP forme le système Usenet.
Le pair-à-pair (P2P) renverse le modèle client-serveur: tous les ordinateurs, appelés nœuds, jouent directement le rôle de client et de serveur. BitTorrent en est l'exemple canonique pour le partage de fichiers.
#Le courrier électronique
Le courrier électronique met en jeu deux types d'outils. L'agent de transport (MTA) effectue la transmission des messages d'une machine à une autre: il reçoit les requêtes des agents de courrier locaux, écoute sur le port 25 pour recevoir celles des autres agents, analyse les en-têtes, dépose les messages dans les boîtes aux lettres locales, ré-expédie certains messages et en rejette d'autres. L'agent de courrier (MUA) sert à composer, envoyer, recevoir et afficher les messages.
Les boîtes aux lettres gérées par un serveur de courrier sont des fichiers portant le nom d'utilisateur du destinataire, rangés dans un répertoire spécifique comme /var/spool/mail. L'agent de courrier en extrait les messages un à un. À distance, les protocoles POP et IMAP permettent de consulter le courrier sans l'amener localement, avec la limite que le cours rappelle: « il faut un mot de passe transmis en clair ».
Le protocole SMTP s'appuie sur TCP et IP et utilise le port 25 (465 et 587 en version cryptée). Sa trace complète, donnée par le cours, se rejoue à la main avec telnet:
1telnet echo.unice.fr 251220 echo.unice.fr ESMTP Postfix2HELO wfsm3250 echo.unice.fr4MAIL FROM: guingne@echo.unice.fr5250 ok6RCPT TO: guingne@echo.unice.fr7250 ok8DATA9354 End data with <CR><LF>.<CR><LF>10essai pour le cours ...11.12250 Ok: queued as EB26D2C0313QUIT14221 ByeTrois enseignements. Le corps du message est encadré par la commande DATA et se termine par une ligne ne contenant qu'un point. Ensuite, il n'y a aucune authentification: l'expéditeur déclaré dans MAIL FROM n'est vérifié par personne, ce qui rend la fraude triviale et explique la masse des pourriels. Enfin, la même technique telnet permet de dialoguer à la main avec n'importe quel protocole textuel, HTTP compris.
Un message a une structure normalisée: un ensemble d'en-têtes puis un corps. To indique le destinataire (obligatoire, une ou plusieurs adresses séparées par des virgules), Subject le sujet, Cc les destinataires secondaires, Bcc les destinataires cachés, From l'expéditeur — obligatoire, introduit par l'agent de courrier —, Date la date d'expédition avec le fuseau horaire, Return-path l'adresse de retour, In-reply-to la référence du message auquel on répond, et Received le chemin suivi, répété autant de fois qu'il y a eu de relais. Les en-têtes n'utilisent qu'un alphabet sur 7 bits; le codage MIME lève cette limitation en permettant plusieurs alphabets dans un même message, l'inclusion de fichiers de toute nature et des indications de présentation.
#Connexion à distance : du non sécurisé au sécurisé
Avant SSH, la connexion distante reposait sur trois commandes, dont l'étude est instructive parce qu'elle montre exactement ce que SSH est venu corriger.
telnet machine est un outil général de connexion à distance, s'appuyant sur TCP et IP, qui sert de support à la plupart des protocoles de plus haut niveau. Il fonctionne aussi avec d'autres systèmes qu'Unix, et le caractère d'échappement C-] fait passer dans un mode de dialogue interactif (open, close, quit, status). rlogin machine -l utilisateur ne fonctionne qu'entre systèmes Unix, avec un shell interactif sur la machine distante. rsh machine commande fait exécuter une commande à distance, sans processus de connexion.
Le problème est la sécurité. Les connexions ordinaires entre machines ne sont pas cryptées, et la transmission par diffusion permet d'intercepter des paquets assez facilement. Pire, rlogin et rsh acceptent un fichier $HOME/.rhosts qui autorise la connexion sans mot de passe: dès qu'on est parvenu à se connecter sur une des machines, on a accès à toutes les autres où un tel fichier existe pour cet utilisateur. Le cours conclut que cette solution n'est acceptable qu'à l'intérieur d'un réseau local, et que pour des connexions à travers les réseaux il faut des mécanismes sécurisés.
SSH fait le même travail que rlogin, mais avec trois garanties: authentification du client par le serveur, cryptage de la transmission, garantie d'intégrité. Son fonctionnement est client-serveur, et l'identité des deux machines est authentifiée par une clé cryptée propre à chaque machine. Ces clés d'hôte sont conservées dans ~/.ssh et permettent de reconnaître un hôte connu; à la première connexion, l'utilisateur approuve l'identité annoncée par le serveur, et cette démarche n'est à refaire que si le serveur change de clé.
Le mécanisme de mot de passe peut être remplacé par une paire de clés créée avec ssh-keygen. Le cours décrit deux algorithmes, DSA et RSA, et deux fichiers dans ~/.ssh: la clé privée, qui sert à déchiffrer, et la clé publique, qui sert à chiffrer. L'authentification vérifie ensuite l'identité du serveur par sa clé d'hôte dans known_hosts, puis celle du client par sa clé publique dans authorized_keys. L'établissement du canal sécurisé se fait en quatre temps: le serveur envoie sa clé publique en clair, le client génère une clé de chiffrement symétrique et la chiffre avec cette clé publique, il envoie la clé symétrique chiffrée au serveur, et le serveur la déchiffre avec sa clé privée. Les deux extrémités partagent alors la même clé symétrique.
#Fichiers distants et affichage distant
Montages. Le mécanisme NFS (Network File System) permet de monter un volume non local: l'ordinateur distant exporte le volume en jouant le rôle de serveur, le client demande le montage sur un répertoire local, souvent à la demande (auto-montage). La transmission se fait en UDP, plus simple et rapide que TCP mais moins sûr. Samba joue le même rôle et implémente le protocole SMB/CIFS de Windows, ce qui permet le partage d'imprimantes et de fichiers entre Unix et Windows.
Copie. À travers un montage NFS, on accède à tous les fichiers comme s'ils étaient locaux. rcp permet de sortir du domaine NFS en s'appuyant sur les mécanismes de rlogin — donc avec la même insécurité et la même dépendance à .rhosts. scp utilise le protocole de SSH, avec une forme d'appel identique, et permet de copier entre deux machines distantes. La référence à un fichier distant s'écrit [utilisateur]@machine:[chemin].
1scp .ssh/id_ed25519.pub deploy@sesame-mips.unice.fr:.ssh/copieclef2rsync -azP site/ prod-api:/var/www/site/FTP. Le protocole FTP s'appuie sur TCP, IP et Telnet, permet des transferts dans les deux sens et fournit un dialogue interactif (open, user, close, quit, puis dir, cd, get, mget, put, mput, lcd, et ! pour exécuter une commande locale). Il n'est pas sécurisé, ce qui explique que les administrateurs le limitent, l'interdisent ou imposent sftp. Le client NcFTP simplifie l'usage du FTP passif, dans lequel la seconde connexion se fait du client vers le serveur — ce que beaucoup de mécanismes de sécurité refusent dans le mode actif. Des clients graphiques existent: gFTP, FileZilla.
Extraction non interactive. wget [options] URL extrait des fichiers par FTP ou HTTP, peut reprendre une extraction incomplète, travailler en différé et sans intervention, lire des URL depuis un fichier, ou extraire une hiérarchie jusqu'à un certain niveau.
Affichage distant. La connexion graphique à distance pose un problème de temps de réponse, car le dialogue entre clients X et serveur exige un débit important dans les deux sens. La solution est VNC: vncserver lance sur la machine distante un serveur X virtuel, et vncviewer permet d'en visualiser l'écran depuis l'extérieur, si possible à travers un tunnel SSH.
1ssh -X tpsi # transfert X, pour une application graphique ponctuelle#Transferts de port courants
Le transfert local (-L) redirige un port de votre machine vers une cible accessible depuis le serveur distant: idéal pour joindre une base de données privée. Le transfert distant (-R) fait l'inverse: il expose sur le serveur un port qui redirige vers votre machine locale, fonctionnalité puissante mais à utiliser avec prudence. Enfin -D crée un proxy SOCKS dynamique, transformant la connexion SSH en tunnel pour tout trafic TCP, utile pour tester un réseau vu depuis un autre point d'accès.
Sécurité minimale: désactivez l'authentification par mot de passe sur le serveur quand les clés sont en place, surveillez les journaux (journalctl -u ssh), révisez périodiquement les accès, et changez les clés compromises.
#Exercice (15 minutes)
Sécurisez un accès à un service privé: créez une entrée Host dédiée dans ~/.ssh/config, ouvrez un tunnel local vers ce service, puis vérifiez le tunnel sans mot de passe.
Correction:
- Dans
~/.ssh/config:
1Host db-bastion2 HostName bastion.exemple.com3 User deploy4 IdentityFile ~/.ssh/id_ed255195 LocalForward 5433 localhost:5432- Connexion et vérification:
1ssh db-bastion # le tunnel s'ouvre avec la session2ss -tln | grep 5433 # observation attendue: LISTEN sur 127.0.0.1:54333nc -vz localhost 5433 # observation attendue: succeededSi nc réussit, le tunnel fonctionne et le client de base de données peut se connecter sur localhost:5433. Vérification supplémentaire: ssh -G db-bastion affiche la configuration effective, utile pour diagnostiquer une entrée mal lue.
#Exercices d'entraînement
1. Définir TCP et décrire brièvement à quoi cela sert. À quoi sert un numéro de port?
2. Que fait un serveur de noms de domaine? Comment se lit la hiérarchie des domaines?
3. Quelle commande permet de faire une copie sécurisée sur une machine distante? Quel protocole utilise-t-elle? Décrire brièvement ce que fait ce protocole.
4. Combien d'adresses IPv6 existe-t-il théoriquement? Pourquoi l'IPv6 remplace-t-il l'IPv4?
5. Définir IRC et décrire brièvement à quoi cela sert. En quoi diffère-t-il de NNTP?
6. Écrire les commandes qui permettent de se connecter au serveur tpsi avec transfert X, puis d'afficher une horloge carrée de 100 pixels de côté, placée en bas à gauche de l'écran.
7. Rechercher à partir du répertoire /etc tous les répertoires dont le nom contient zsh, en redirigeant les erreurs vers la poubelle.
Corrections détaillées
1. TCP (Transmission Control Protocol) intervient aux deux extrémités de la communication: au départ il découpe le message en paquets et associe à chaque paquet une enveloppe identifiant l'expéditeur, le destinataire, le message et l'ordre des paquets; à l'arrivée il réassemble les paquets. Il assure la sécurité et l'intégrité de la transmission en dialoguant avec l'expéditeur pour redemander les paquets manquants ou mal transmis, et sert de support à de très nombreuses applications. Le numéro de port identifie l'application destinataire: « chaque application utilise un numéro de port spécialisé qui l'identifie, ainsi le message à l'arrivée est transmis à la bonne application ».
2. Le serveur de noms établit la correspondance depuis et vers les adresses IP, car l'adresse numérique est malcommode pour l'utilisateur. La hiérarchie des domaines se lit de droite à gauche, le niveau le plus élevé apparaissant en dernier: un domaine par pays (fr, uk, za), des domaines « apatrides » (org, net, com, biz), des domaines réservés aux États-Unis (mil, gov, edu). Les niveaux précédents sont gérés par l'organisme propriétaire du domaine — l'Afnic pour .fr. Des alias permettent à plusieurs noms de désigner la même machine: sesame-mips.unice.fr et www-mips.unice.fr sont deux alias de polymnie.unice.fr.
3. La commande est scp, et le protocole est SSH. SSH fait le même travail que l'ancien rlogin, mais avec trois garanties: authentification du client par le serveur, cryptage de la transmission, garantie d'intégrité de cette transmission. Il fonctionne en client-serveur: l'identité des deux machines est authentifiée par une clé cryptée propre à chaque machine, conservée dans ~/.ssh, et l'authentification du client se fait soit par mot de passe, soit par signature par clé publique. Le canal sécurisé s'établit en échangeant une clé symétrique chiffrée par la clé publique du serveur, que seul celui-ci peut déchiffrer avec sa clé privée.
4. Une adresse IPv6 fait 128 bits, soit 16 octets, ce qui donne adresses théoriques. IPv4 s'est arrêté à 32 bits, soit environ 4,3 milliards d'adresses, et son découpage en classes A, B et C a été abandonné dès 1993 au profit du CIDR; malgré le recours au NAT, « ce système a atteint ses limites ». C'est la pénurie d'adresses qui motive le remplacement.
5. IRC (Internet Relay Chat) permet la communication entre plusieurs personnes, sous forme immédiate: des serveurs reliés entre eux, des canaux nombreux, chaque message transmis à tous les serveurs qui servent le canal — « tout le monde parle ensemble, comme dans une foule, peu de gens écoutent ». NNTP organise au contraire une communication différée, comme des panneaux d'affichage publics: les articles sont publics, les participants n'ont pas besoin d'être connectés simultanément, les articles sont conservés un certain temps, et les groupes sont hiérarchisés. La différence tient donc à la simultanéité et à la persistance.
6.
1ssh -X tpsi2xclock -geometry 100x100+0-0L'option -X demande le transfert X. Pour xclock, l'option -geometry prend largeur x hauteur suivie des décalages; un signe moins devant un décalage le compte depuis le bord droit ou inférieur. +0-0 place donc la fenêtre collée au bord gauche et au bord inférieur.
7.
1find /etc -type d -name "*zsh*" 2> /dev/null-type d restreint aux répertoires, -name prend un motif en expression générique, et 2> /dev/null envoie la sortie d'erreur vers la poubelle, ce qui supprime les messages d'accès refusé produits par le parcours des répertoires protégés.