UE31 - M3102 : Services Réseaux Enoncé du TP 2 Services SSH et TELNET IUT Aix-Marseille - INFO Aix C. Pain-Barre Table des matières 1 2 Introduction à SSH 1.1 Notion de chiffrement . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.1.A Critique du chiffrement symétrique . . . . . . . . . . . . . . . . . 1.1.B Le chiffrement asymétrique . . . . . . . . . . . . . . . . . . . . . 1.1.B.1 Paires de clés et trousseau . . . . . . . . . . . . . . . . . 1.1.B.2 Cryptage/Décryptage par paire de clés . . . . . . . . . . 1.1.B.3 Signature/vérification par paire de clés . . . . . . . . . . 1.2 Authentification d’un serveur SSH . . . . . . . . . . . . . . . . . . . . . . 1.2.A Emplacement des clés d’un serveur SSH . . . . . . . . . . . . . . . 1.2.B Procédure d’authentification du serveur et cryptage de la connexion 1.2.C Authentification du serveur lors de la première connexion . . . . . 1.2.D Enregistrement de la clé publique du serveur côté client . . . . . . . 1.2.E Hashage des fichiers known_hosts . . . . . . . . . . . . . . . . . . 1.2.F Contrôler manuellement la clé publique du serveur . . . . . . . . . 1.2.G Supprimer manuellement la clé publique d’un serveur . . . . . . . 1.3 Authentification de l’utilisateur . . . . . . . . . . . . . . . . . . . . . . . . 1.3.A Authentification utilisateur par mot de passe . . . . . . . . . . . . . 1.3.B Authentification utilisateur par paire de clés . . . . . . . . . . . . . 1.4 Connexion à allegro avec mot de passe . . . . . . . . . . . . . . . . . . . . Exercice 1 (connexion SSH sur allegro) . . . . . . . . . . . . . . . . . . . 1.5 Création d’une paire de clés sous Linux . . . . . . . . . . . . . . . . . . . Exercice 2 (Génération d’une paire de clés avec ssh-keygen) . . . . . . . . 1.6 Déposer sa clé publique sur le serveur . . . . . . . . . . . . . . . . . . . . Exercice 3 (dépôt manuel de la clé publique sur allegro) . . . . . . . . . . . 1.7 Préparation à l’utilisation de la paire de clés . . . . . . . . . . . . . . . . . Exercice 4 (mise en conformité des droits) . . . . . . . . . . . . . . . . . . 1.8 Connexion avec la paire de clés . . . . . . . . . . . . . . . . . . . . . . . . Exercice 5 (Connexion sur allegro par paire de clés) . . . . . . . . . . . . . 1.9 Le fournisseur de passphrase ssh-agent . . . . . . . . . . . . . . . . . . . . Exercice 6 (utilisation de ssh-agent) . . . . . . . . . . . . . . . . . . . . . Possibilités offertes par SSH 2.1 Exécution de commandes à distance par ssh . . Exercice 7 (exécution de commandes distantes) 2.2 Copie de fichiers/répertoires par scp . . . . . . Exercice 8 (copie sécurisée par scp) . . . . . . 2.3 Transfert de fichiers par sftp . . . . . . . . . . Exercice 9 (transfert de fichiers par sftp) . . . . 2.4 Profils et options de ssh . . . . . . . . . . . . . IUT Aix-Marseille - INFO Aix . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23/12/2014 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3 3 3 4 4 5 5 6 7 7 7 8 8 9 9 10 10 10 11 11 12 13 13 14 14 14 15 15 15 16 . . . . . . . 17 17 18 19 20 20 21 21 - C. Pain-Barre UE31 - M3102 : Services R´eseaux Enonc´e du TP 2 2/31 3 SSH et la redirection de ports (tunneling) 24 3.1 Principe du tunneling . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24 3.2 Mise en place de la redirection de port local avec ssh . . . . . . . . . . . . . . . . . . . . . . . . 26 3.3 Mise en place de la redirection de port distant avec ssh . . . . . . . . . . . . . . . . . . . . . . . 27 4 Et SSH sur Windows ? 5 Jouons un peu avec les services TELNET, SSH et HTTP Exercice 10 (Démarrage d’un lab Marionnet et d’une VM XP) Exercice 11 (Activation du service TELNET sur m2) . . . . . Exercice 12 (Service SSH sur m2 et tunneling SSH) . . . . . . Exercice 13 (Service HTTP sur m2 et tunneling SSH) . . . . . C. Pain-Barre - 23/12/2014 27 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28 28 29 30 31 IUT Aix-Marseille - INFO Aix 3/31 1 Enonc´e du TP 2 UE31 - M3102 : Services R´eseaux Introduction à SSH Le protocole SSH (pour Secure SHell) est le remplaçant de rsh (remote shell) qui correspond grosso-modo à TELNET. Comme nous le verrons, SSH permet bien plus de choses que TELNET. Il permet aussi de transférer des fichiers de façon sécurisée (fiable et cryptée) via les sous-modules SCP et SFTP. SSH existe en deux versions majeures 1 et 2 qui sont incompatibles. La version 2 est la plus sécurisée et à utiliser à chaque fois que c’est possible. Une différence notable entre TELNET (ou rsh) et SSH est que ce dernier établit un canal de transmission full-duplex fiable et crypté entre le client et le serveur. Ainsi, alors que tout le trafic dans le protocole TELNET passe en clair sur le réseau (y compris le nom d’utilisateur et son mot de passe), en SSH ce trafic est crypté. Il est donc beaucoup plus sécurisé. Avant d’établir le canal crypté, SSH prévoit une authentification du serveur par le client. Puis, lorsque ce canal est établi, c’est au serveur qu’il incombe d’authentifier l’utilisateur qui souhaite se loger (ou utiliser ses fonctionnalités). SSH utilise le chiffrement asymétrique pour crypter certains échanges puis utilise un cryptage symétrique une fois les paramètres de la communication négociés. Pour illustrer certaines notions de SSH, nous utiliserons dans un premier temps le client SSH le plus utilisé sur Linux : ssh. Le serveur SSH sous Linux est généralement sshd. 1.1 Notion de chiffrement Il existe deux approches au chiffrement : le chiffrement symétrique et le chiffrement asymétrique. Avant de présenter le chiffrement asymétrique, on va d’abord critiquer le chiffrement symétrique. 1.1.A Critique du chiffrement symétrique Pour le chiffrement symétrique, un fichier est crypté/décrypté à l’aide d’une unique clé. Ainsi, lorsqu’on communique un fichier crypté à quelqu’un, cette personne doit posséder la clé qui a permis le cryptage pour pouvoir décrypter le fichier. Le principe est illustré par la figure 1. clé partagée entre l’émetteur et le récepteur abc efg ijk récepteur émetteur abc efg ijk cryptage décryptage 010 101 010 transmission 010 101 010 F IGURE 1 – Chiffrement symétrique : même clé pour le cryptage/décryptage IUT Aix-Marseille - INFO Aix 23/12/2014 - C. Pain-Barre UE31 - M3102 : Services R´eseaux Enonc´e du TP 2 4/31 Le problème est que quiconque possède cette clé sera en mesure de décrypter les données confidentielles. Ainsi, si la personne à qui on a communiqué notre clé n’est pas très prudente, on court le risque de perdre la confidentialité de nos transmissions. D’autre part, on peut très bien envoyer un fichier crypté à quelqu’un mais souhaiter que cette personne ne puisse pas décrypter les autres fichiers que l’on crypte. Dans ce cas, il faut utiliser une clé spécialement pour l’échange avec cette personne. C’est déjà pénible mais ce n’est pas tout : comment transmettre une clé, en étant sûr que personne ne la récupère et puisse ainsi lire les données transmises ? Les moyens de communication étant régulièrement "écoutés" par différentes "organisations" (si ce n’était pas le cas, ce ne serait pas la peine de mettre en place un cryptage des données. . .), que reste-t-il ? une communication en mains propres ? Manifestement, cette méthode de chiffrement pose de nombreux problèmes et on comprend pourquoi elle est de moins en moins utilisée seule. 1.1.B Le chiffrement asymétrique Le chiffrement asymétrique est une méthode de chiffrement qui apporte une solution intéressante aux problèmes de gestion de clé que connaît le chiffrement symétrique. Il nécessite l’emploi d’une paire de clés : • une clé privée qui, comme son nom l’indique, doit demeurer privée et jamais communiquée. Néanmoins, elle doit être stockée sur l’ordinateur qu’utilise son créateur (possesseur). Celui-ci doit donc impérativement la protéger au mieux, notamment par l’intermédiaire d’une "passphrase" et en la rangeant dans un répertoire et un fichier inaccessibles aux autres. • une clé publique qui, elle, peut être communiquée au reste du monde, sans aucun risque de dévoiler la clé privée. En effet, si les deux clés sont étroitement liées, il n’est pas possible de fabriquer la clé privée à partir de la clé publique. En revanche, si la clé publique est perdue, il sera possible de la générer à partir de la clé privée. Le chiffrement asymétrique permet le cryptage mais aussi la signature numérique de documents, qui ont des objectifs différents : • cryptage : il s’agit de protéger un document en le cryptant. Seuls les détenteurs d’une clé appropriée pourront le décrypter et le lire ; • signature : il s’agit d’authentifier un document ainsi que son rédacteur. Le terme chiffrement est souvent employé dans les documentations à la place de cryptage. Par la suite, nous l’employons dans son sens large, recouvrant la signature. 1.1.B.1 Paires de clés et trousseau Différents utilitaires existent pour créer un paire de clés publique et privée, notamment l’outil libre gpg — abréviation de GnuPG (The GNU Privacy Guard)— qui est disponible à la fois pour Linux et Windows. En utilisant gpg, on crée un trousseau de clé comportant une clé privée et la clé publique associée. En outre, gpg gère aussi les clés publiques que nous ont communiquées les personnes avec lesquelles on désire crypter/signer les échanges. C. Pain-Barre - 23/12/2014 IUT Aix-Marseille - INFO Aix 5/31 Enonc´e du TP 2 UE31 - M3102 : Services R´eseaux gpg pourra alors être utilisé pour crypter/décrypter et/ou signer/vérifier des documents. Nous n’étudions ici que les principes du chiffrement et non la génération de clés ni les opérations de cryptage/décryptage ou signature/vérification avec gpg. On supposera par la suite que les personnes impliquées dans les échanges ont à leur disposition un tel outil. 1.1.B.2 Cryptage/Décryptage par paire de clés Pour envoyer un document crypté à quelqu’un, l’émetteur doit posséder la clé publique du récepteur. Des serveurs de clés (publiques) existent sur Internet afin de faciliter la distribution des clés publiques. clé publique communiquée aux émetteurs potentiels de documents cryptés ur émette ée à l’ u uniq comm clé privée que seul le récepteur possède abc efg ijk émetteur abc efg ijk cryptage (clé publique) décryptage (clé privée) 010 101 010 transmission 010 101 010 récepteur la clé té ue a é publiq F IGURE 2 – Cryptage asymétrique avec la clé publique du destinataire qui décryptera avec sa clé privée. La méthode de cryptage asymétrique est illustrée par le schéma de la figure 2. L’émetteur crypte le document à l’aide de la clé publique du récepteur. Seule la personne possédant la clé privée peut décrypter le document crypté. Ainsi, lorsque le récepteur reçoit le document crypté, il le décrypte à l’aide de sa clé privée. 1.1.B.3 Signature/vérification par paire de clés La signature numérique de document a pour objectif de prouver au récepteur que le document a bien été envoyé par l’émetteur annoncé, et qu’il n’a pas été modifié pendant son transport. D’un autre côté, la signature numérique assure la non-répudiation : l’émetteur ne peut nier avoir envoyé le document. Cette signature est généralement générée par l’algorithme DSA (Digital Signature Algorithm). Le principe de son utilisation est le suivant, illustré par la figure 3 : 1. L’émetteur calcule une empreinte (fingerprint) du document par une fonction de hashage. La fonction de hashage doit être telle qu’une modification minime du document produit une empreinte différente et qu’il est impossible de produire un document à partir d’une empreinte. L’algorithme de hashage généralement utilisé est SHA1. Il existe aussi MD5 réputé plus faible que SHA1 2. L’émetteur crypte l’empreinte avec sa clé privée par une méthode qui rend possible son décryptage par la clé publique associée 3. Le récepteur décrypte l’empreinte avec la clé publique de l’émetteur (authentification de l’émetteur) 4. Le récepteur calcule l’empreinte du message et la compare à celle obtenue à l’étape précédente (vérification de la non modification du message) IUT Aix-Marseille - INFO Aix 23/12/2014 - C. Pain-Barre Enonc´e du TP 2 clé publique communiquée aux récepteurs potentiels de documents signés la clé publiq 6/31 ue a é té com muniq uée au clé privée que seul l’émetteur possède récepte ur émetteur abc efg ijk abc efg ijk récepteur UE31 - M3102 : Services R´eseaux signature (clé privée) vérification (clé publique) abc efg ijk abc efg ijk transmission S S F IGURE 3 – Signature d’un document avec la clé privée de l’émetteur. Le récepteur vérifie avec la clé publique correspondante. 1.2 Authentification d’un serveur SSH Il s’agit de s’assurer que le client se connecte au bon serveur et non pas à une machine qui aurait usurpé l’IP du serveur (mise en place par un attaquant pour voler les mots de passe, par exemple) ni à la machine d’un attaquant située sur le trajet menant au serveur, qui servirait à intercepter ou modifier nos messages. Cette dernière attaque, de type man-in-the-middle, est illustrée par la figure 4. client attaquant connexion serveur connexion SSH mowgli SSH sherekhan bagheera F IGURE 4 – Attaque de type man-in-the-middle Le principe de cette attaque est le suivant : • Le client (sur mowgli) veut établir une connexion SSH sur bagheera • Sur le chemin emprunté par les datagrammes IP se trouve la machine sherekhan de l’attaquant qui intercepte la demande de connexion et répond à la place de bagheera • L’attaquant établit aussi une connexion SSH entre sherekhan et bagheera • Lorsque le client s’identifie (pensant avoir à faire à bagheera), il communique son nom d’utilisateur et son mot de passe qui sont récupérés par l’attaquant • L’attaquant utilise ces informations pour s’identifier sur bagheera • Deux connexions SSH sont alors établies, l’une mowgli↔sherekhan et l’autre sherekhan↔bagheera • L’attaquant fait transiter (automatiquement) les commandes du client vers le serveur, ainsi que les réponses du serveur vers le client, éventuellement en modifiant certaines choses. . . Cette attaque ne peut en principe être possible que lors de la première connexion du client. Si elle réussit, elle peut être reproductible. Pour authentifier le serveur et initier la connexion, SSH utilise une paire de clés publique/clé privée et un mécanisme de chiffrement asymétrique. Lors de l’installation du serveur SSH, une paire de clés est générée. Elle C. Pain-Barre - 23/12/2014 IUT Aix-Marseille - INFO Aix 7/31 Enonc´e du TP 2 UE31 - M3102 : Services R´eseaux doit rester la même tant que l’administrateur n’a pas détecté un risque de vol de la clé privée. La clé publique est destinée à être transmise à tout client qui en fait la demande. 1.2.A Emplacement des clés d’un serveur SSH Les clés publiques et privées d’un serveur SSH sous Linux sont situées dans le répertoire /etc/ssh et sont contenues dans les fichiers : • ssh_host_dsa_key • ssh_host_dsa_key.pub • ssh_host_rsa_key • ssh_host_rsa_key.pub • ssh_host_key • ssh_host_key.pub Ces 6 fichiers définissent 3 paires de clés : • les ssh_host_key* définissent les clés pour SSH version 1 (obsolète) • les ssh_host_dsa_key* définissent les clés DSA pour SSH version 2 • les ssh_host_rsa_key* définissent les clés RSA pour SSH version 2 : ce sont les clés les plus employées. Les clés publiques sont dans les fichiers d’extension .pub et sont lisibles par tous. Les autres fichiers contiennent les clés privées et ne sont accessibles qu’à root. 1.2.B Procédure d’authentification du serveur et cryptage de la connexion Lors de la connexion du client, le serveur lui renvoie sa clé publique. Le client vérifie alors que cette clé correspond bien à celle du serveur qu’il aura au préalable stocké dans un fichier de configuration (voir plus loin). Si c’est le cas, le serveur est authentifié et sa clé publique sera utilisée par le client pour négocier avec le serveur les clés et les algorithmes utilisés pour crypter les transmissions. En particulier, le client transmet au serveur une clé de session cryptée avec la clé publique du serveur (ainsi que l’algorithme utilisé) qui sera utilisée ensuite dans les échanges par un chiffrement symétrique. Le serveur étant le seul à détenir la clé privée, il est le seul qui peut décrypter la clé de session. La clé de session et les algorithmes seront renégociés régulièrement au cours de la communication SSH. Notons qu’il y normalement une clé de session par sens de transmission. ✍ 1.2.C La clé publique du serveur est très importante car elle permet d’authentifier le serveur et de lui transmettre la clé de session. Si l’on connaît la clé publique du serveur, cette méthode rend impossible l’attaque de type man-in-the-middle. Authentification du serveur lors de la première connexion Lors de la première connexion du client, celui-ci ne connaît pas la clé publique du serveur et ne peut donc pas être sûr d’avoir à faire au bon serveur. Selon la configuration du client SSH, celui-ci peut aller jusqu’à refuser le dialogue avec un serveur inconnu. Dans la grande majorité des cas, le client SSH informe l’utilisateur qu’il ne peut assurer l’authenticité du serveur et lui demande s’il doit continuer comme dans l’exemple suivant : IUT Aix-Marseille - INFO Aix 23/12/2014 - C. Pain-Barre UE31 - M3102 : Services R´eseaux Enonc´e du TP 2 8/31 $ ssh allegro.iut.univ-aix.fr The authenticity of host 'allegro.iut.univ-aix.fr (139.124.187.4)' can't be established. RSA key fingerprint is 93:92:5c:40:21:e5:67:e0:9f:53:11:1f:ec:b1:36:52. Are you sure you want to continue connecting (yes/no)? Le nom, l’adresse et les clés d’allegro ont changé depuis la rédaction de ce TP. . . Il revient donc à l’utilisateur de s’assurer que le serveur est le bon ! L’idéal serait que la clé publique du serveur soit communiquée au préalable à l’utilisateur (par exemple sur une page Web) mais ce n’est généralement pas le cas. La plupart des utilisateurs n’ayant aucun moyen de la vérifier, l’acceptent sans autre vérification, ce qui les expose aux attaques de type man-in-the-middle. Une possibilité de contrôle de cette clé est présentée un peu plus loin. Cette acceptation se fait en répondant yes à la question posée précédemment comme sur l’exemple suivant : Are you sure you want to continue connecting (yes/no)? yes Warning: Permanently added 'allegro.iut.univ-aix.fr,139.124.187.4' (RSA) to the list of known hosts. Suite à l’acceptation de la clé publique, le serveur est considéré comme authentifié (il devra néanmoins être capable de décrypter les messages – notamment la clé de session – cryptée avec la clé publique annoncée). 1.2.D Enregistrement de la clé publique du serveur côté client La ligne Warning: qui suit l’acceptation de l’utilisateur indique que l’"identité" du serveur (nom, adresse, clé publique) est enregistrée dans le fichier $HOME/.ssh/known_hosts (de l’utilisateur). Pour les connexions futures, le serveur devrait être automatiquement reconnu grâce à ce fichier. Si le serveur est connu mais que la clé publique annoncée n’est pas la même (elle peut avoir changé ou une attaque man-in-the-middle est en cours), l’utilisateur en sera averti et selon la configuration du client SSH, celui-ci refusera de continuer (mais, le cas échéant, on pourra modifier le fichier $HOME/.ssh/known_hosts pour enlever la ligne concernant l’ancienne clé du serveur puis recommencer la connexion). Il est possible pour l’administrateur système de renseigner le fichier /etc/ssh/ssh_known_hosts pour contenir les identités de serveurs auxquels les utilisateurs peuvent se connecter. Cela leur évite de les authentifier eux-mêmes. . . 1.2.E Hashage des fichiers known_hosts Selon l’installation du client SSH, les fichiers known_hosts contiennent les clés publiques des serveurs plus ou moins en clair. Par exemple, la clé d’allegro serait stockée ainsi (sur une ligne) : $ ssh-keygen -F allegro allegro,139.124.187.4 ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEAntyWXC9hVDfBxhXLQ933/ bWLxEQualfiv65C0FnWb6EQ1Ww13ye1tbCUb4lFgbkoAtSgLRld4/2olbw0Gt37XMW2w95VzeqB66nr aXORQAdk+svyFGGJe5OJ3dCizw0t7LEk0SZ9iLxPF9la1Y+g9P2LCzv+PGvkiuG7lr4dIv6NKTg8oZE LxWA2QV/cEBOjuIxRo5CgXWFt1eEj43ARJEr0vqRaMLbUlsBJ9p9CPhbu+ZPnPffoHtlRWSobsd2Psu BcWDXHrACF7EZwr2Og/W8O4wIUqmxIlnGvdQcx0tx54uSL5g/VeN7+8AI1nypcP1Ib+260UttwrvYqN NdRgQ== C. Pain-Barre - 23/12/2014 IUT Aix-Marseille - INFO Aix 9/31 Enonc´e du TP 2 UE31 - M3102 : Services R´eseaux Dans cet exemple, le nom court du serveur a été suffisant mais il est possible de devoir utiliser son nom complet. Or, on voit que l’adresse IP d’allegro apparaît. Ce n’est pas très sûr car les utilisateurs ont tendance à avoir le même mot de passe sur les ordinateurs qu’ils utilisent. Si un attaquant a réussi à voler le mot de passe d’un utilisateur, alors en consultant ce fichier, il sait que cet utilisateur a probablement le même mot de passe sur les serveurs qu’il contient et peut tenter de s’y introduire. C’est pourquoi généralement les fichiers known_hosts sont hashés et il n’est pas possible de retrouver les noms ou adresses des serveurs correspondants. En cas de hashage (comme sur une Debian récente), l’identité d’allegro est stockée par la ligne suivante : $ ssh-keygen -F allegro |1|pvSbQKVwGqNFKnsm84Dc6KZ+pVQ=|tgobOSbewGa5WvJ5LQ659BAs0yw= ssh-rsa AAAAB3NzaC 1yc2EAAAABIwAAAQEAntyWXC9hVDfBxhXLQ933/bWLxEQualfiv65C0FnWb6EQ1Ww13ye1tbCUb4lFg bkoAtSgLRld4/2olbw0Gt37XMW2w95VzeqB66nraXORQAdk+svyFGGJe5OJ3dCizw0t7LEk0SZ9iLxP F9la1Y+g9P2LCzv+PGvkiuG7lr4dIv6NKTg8oZELxWA2QV/cEBOjuIxRo5CgXWFt1eEj43ARJEr0vqR aMLbUlsBJ9p9CPhbu+ZPnPffoHtlRWSobsd2PsuBcWDXHrACF7EZwr2Og/W8O4wIUqmxIlnGvdQcx0t x54uSL5g/VeN7+8AI1nypcP1Ib+260UttwrvYqNNdRgQ== Dans les deux cas, on peut afficher l’empreinte de la clé publique d’un serveur en ajoutant l’option -l : $ ssh-keygen -F allegro -l # Host allegro found: line 1 type RSA 2048 93:92:5c:40:21:e5:67:e0:9f:53:11:1f:ec:b1:36:52 |1|pvSbQKVwGqNFKnsm84Dc6KZ +pVQ=|tgobOSbewGa5WvJ5LQ659BAs0yw= (RSA) 1.2.F Contrôler manuellement la clé publique du serveur Lors d’une première connexion où l’on a dû accepter manuellement la clé du serveur, il est conseillé, une fois logé en SSH (après s’être authentifié auprès du serveur), de vérifier l’empreinte de cette clé directement sur le serveur, afin d’être [à peu près] sûr qu’on discute bien avec la machine qui nous a répondu. Cela se vérifie en tapant la commande suivante : $ ssh-keygen -l -f /etc/ssh/ssh_host_rsa_key.pub 2048 93:92:5c:40:21:e5:67:e0:9f:53:11:1f:ec:b1:36:52 /etc/ssh/ssh_host_rsa_key.pub (RSA) où le fichier à utiliser doit correspondre au type de clé indiqué lors de la connexion. Ici, l’empreinte correspond bien et l’on peut être rassuré. En cas d’attaque man-in-the-middle, l’attaquant doit intercepter cette commande et répondre par l’empreinte de sa machine (celle communiquée au départ). S’il le fait, là, on est mal. . . 1.2.G Supprimer manuellement la clé publique d’un serveur Il arrive (malheureusement trop souvent) qu’un serveur ait changé sa clé publique, généralement suite à une réinstallation alors que l’administrateur n’a pas pris soin de remettre l’ancienne clé. Dans ce cas, lors d’une nouvelle connexion, on a toutes les chances de voir notre client ssh refuser de continuer. IUT Aix-Marseille - INFO Aix 23/12/2014 - C. Pain-Barre UE31 - M3102 : Services R´eseaux Enonc´e du TP 2 10/31 Si l’on est sûr que le changement de clé est normal et non dû à une attaque, il faut alors supprimer du fichier $HOME/.ssh/known_hosts la clé publique du serveur. Un moyen simple de faire ça (en particulier si le fichier est hashé) est d’utiliser la commande suivante : $ ssh-keygen -R serveur 1.3 Authentification de l’utilisateur Sur le canal crypté établi précédemment, le serveur communique au client les différentes méthodes d’authentification de l’utilisateur qu’il accepte. Il y en a plusieurs. Détaillons celle par mot de passe et celle par paire de clés publique/privée. 1.3.A Authentification utilisateur par mot de passe Le client communique le nom d’utilisateur et un mot de passe que l’utilisateur lui aura indiqués. Si le mot de passe est correct, le serveur réussit à ouvrir un shell avec l’identité de l’utilisateur, et celui-ci est alors authentifié. ✍ 1.3.B Cette méthode a l’inconvénient majeur de faire transiter le mot de passe de l’utilisateur. Si le serveur contacté n’est pas le bon (rappelons-nous de la pertinence de l’authentification du serveur), alors le mot de passe peut être facilement volé. D’autre part, il est possible que le mot de passe soit volé simplement en regardant par dessus l’épaule de l’utilisateur pendant qu’il le tape, ou même par un logiciel (keylogger) qui intercepte les frappes au clavier. . . Authentification utilisateur par paire de clés Dans ce contexte, le mot de passe utilisateur ne sera pas transmis au serveur (sauf lors de la première connexion). Pour cela, l’utilisateur doit au préalable : • générer une paire de clés publique/privée qui sera utilisée pour l’authentification. La clé privée doit être protégée par une passphrase (sa taille peut être bien plus grande qu’un mot de passe unix) • déposer sa clé publique sur le serveur (cette étape nécessite généralement une identification par mot de passe) • configurer le client pour utiliser sa clé privée. Cette étape n’est pas nécessaire avec les clients SSH récents sous Linux. La méthode d’authentification par paire de clés diffère entre SSH1 et SSH2 mais dans les deux cas le client SSH demandera à l’utilisateur la passphrase qui protège sa clé privée pour l’utiliser. En SSH2 (il faut éviter SSH1 qui est vulnérable à l’attaque man-in-the-middle 1 ), le client va signer l’identification de session SSH avec la clé privée de l’utilisateur puis l’envoyer au serveur. Le serveur consulte alors le fichier ~/.ssh/authorized_keys de l’utilisateur à la recherche d’une clé publique correspondante. S’il en trouve une et que la signature de l’identifiant de session est correcte, l’utilisateur est authentifié. 1. Il existe des attaques man-in-the-middle qui réussissent en forçant le client et le serveur à utiliser SSH1. . . C. Pain-Barre - 23/12/2014 IUT Aix-Marseille - INFO Aix 11/31 Enonc´e du TP 2 UE31 - M3102 : Services R´eseaux Bien qu’en apparence plus lourde (car la passphrase est plus longue que le mot de passe), cette méthode n’a que des avantages par rapport à la précédente et devrait être utilisée chaque fois que c’est possible. En effet : • le mot de passe ne circulant pas (sauf la fois où l’on dépose la clé publique), il ne peut être intercepté • cette méthode d’authentification (en SSH2) est immunisée contre les attaques man-in-the-middle car les identifiants de session font partie des informations signées. L’attaquant ayant des identifiants pour les deux connexions ne peut pas utiliser ce qui vient d’une connexion pour le rediriger sur l’autre qui utilise un autre identifiant • même si quelqu’un nous observe quand on tape la passphrase, il y a peu de chances qu’il puisse s’en souvenir car elle doit être longue • même si la passphrase est volée, il faut aussi voler la clé privée or elle est contenue dans un répertoire protégé de l’utilisateur • il est possible d’utiliser un "agent" SSH dont le rôle est de débloquer la clé privée chaque fois que le client SSH en a besoin. Dans ce cas, on fournit une seule fois la passphrase à cet agent qui s’en souviendra durant la session de l’utilisateur pour toutes les connexions SSH qui suivent. 1.4 Connexion à allegro avec mot de passe Nous commencerons par une connexion à allegro en utilisant l’authentification par mot de passe. Pour cela, il faut utiliser ssh, le client SSH sous Linux. Celui-ci accepte de nombreuses options dont certaines seront étudiées au cours de ce TP. Pour une simple connexion à un serveur, 3 syntaxes sont utilisables. Synopsis ssh -l utilisateur {-o options-ssh} serveur ssh {-o options-ssh} utilisateur @serveur ssh {-o options-ssh} serveur Les deux premières formes sont équivalentes et doivent être utilisées pour préciser utilisateur comme nom d’utilisateur si celui-ci diffère entre le client et le serveur. La dernière forme est utilisable si le nom d’utilisateur est le même sur le serveur que sur le client. L’option -o permet d’indiquer des options en suivant la syntaxe du fichier de configuration de ssh. Nous y reviendrons quand nous présenterons ces fichiers. Exercice 1 (connexion SSH sur allegro) 1. Ouvrir un terminal sur le PC 2. Taper ls -a pour voir si le répertoire .ssh existe. Pour les besoins du TP, supprimer ce répertoire (ou éventuellement le renommer) 3. Utiliser ssh pour se connecter à allegro (dont le nom complet est allegro.aix.univ-amu.fr) en utilisant le nom d’utilisateur/mot de passe qui vous ont été communiqués 4. Répondre yes quand l’authentification de la clé publique d’allegro vous est demandée 5. Entrer votre mot de passe quand cela est demandé 6. Une fois logé, vérifier que la clé annoncée est bien celle d’allegro ✍ Laisser cette connexion active, on va s’en servir plus tard. IUT Aix-Marseille - INFO Aix 23/12/2014 - C. Pain-Barre UE31 - M3102 : Services R´eseaux Enonc´e du TP 2 12/31 7. Dans un autre terminal (du PC), vérifier que le répertoire .ssh a bien été (re)créé dans votre répertoire personnel 8. Consulter ce répertoire, il devrait y avoir le fichier known_hosts 9. Afficher ce fichier, il devrait être hashé 10. Exploiter ce fichier pour faire afficher l’empreinte de la clé d’allegro [Corrigé] 1.5 Création d’une paire de clés sous Linux La création d’une paire de clés se fait avec ssh-keygen, qui a de multiples usages. Pour la création de clés, son synopsis est le suivant. Synopsis ssh-keygen -b taille -t type -C commentaire -f fichier où : • -b taille précise la taille en bits de la clé à créer. On prendra de préférence une clé de 2048 bits (les clés DSA sont limitées à 1024 bits) • -t type précise le type de clé à créer où type peut être : rsa1 pour l’utilisation de SSH1 (à éviter) rsa pour une clé RSA en SSH2 (à préférer car plus rapide que DSA) dsa pour une clé DSA en SSH2 (inventé quand RSA était sous licence, rarement utilisé aujourd’hui) on utilisera donc une clé de type rsa • -C commentaire (où commentaire est un seul mot mais on peut éventuellement protéger les espaces) permettra d’identifier la clé de manière à se rappeler pourquoi on l’a créée (on peut créer différentes clés pour différents usages) • -f fichier est la référence du fichier où placer la clé privée. La clé publique associée sera placée dans le fichier fichier.pub. Si l’on ne précise pas cette option, le fichier par défaut est créé dans le répertoire $HOME/.ssh et porte un nom différent selon le type de clé : identity pour RSA de SSH1 id_rsa pour RSA de SSH2 id_dsa pour DSA de SSH2 Cette option n’est utile que si l’on crée plusieurs paires de clés pour des usages différents. En principe, les clients SSH Linux récents utilisent par défaut les bons paramètres. Mais on utilisera tout de même dans ce qui suit les options -b, -t et -C. C. Pain-Barre - 23/12/2014 IUT Aix-Marseille - INFO Aix 13/31 Enonc´e du TP 2 UE31 - M3102 : Services R´eseaux Exemple 1 Voici un exemple de création de clés avec ssh-keygen : $ ssh-keygen -b 2048 -t rsa -C "pour l'iut" Generating public/private rsa key pair. Enter file in which to save the key (/home/cpb/.ssh/id_rsa): Enter passphrase (empty for no passphrase): la passphrase non affichée Enter same passphrase again: la passphrase non affichée Your identification has been saved in /home/cpb/.ssh/id_rsa. Your public key has been saved in /home/cpb/.ssh/id_rsa.pub. The key fingerprint is: 2b:2d:f0:79:55:27:6e:fb:8a:5b:f5:1a:7b:20:8f:25 pour l'iut Comme on le voit, l’utilisateur est invité à entrer une passphrase (et la confirmer) qui protégera (le fichier contenant) la clé privée. Elle peut être vide mais ce n’est pas conseillé car la clé ne serait pas protégée. La passphrase devrait contenir au moins 16 caractères comprenant des caractères non alphabétiques. Elle ne devrait pas être une phrase d’un livre ni d’une chanson. Et l’on doit être capable de s’en souvenir ! Il n’y a aucun moyen de retrouver la passphrase si on l’a oubliée. Les clés qui en dépendent peuvent alors être mises à la poubelle et il faut régénérer une paire de clés. Exercice 2 (Génération d’une paire de clés avec ssh-keygen) Sur un terminal du PC : 1. Générer une clé RSA (SSH2) de 2048 bits avec ssh-keygen. Penser à entrer une passphrase. 2. Consulter le contenu du répertoire ~/.ssh. Il devrait y avoir les fichiers id_rsa (clé privée) et id_rsa.pub (clé publique) 3. Ces fichiers sont des fichiers texte. Les faire afficher. Pas besoin de corrigé. . . 1.6 Déposer sa clé publique sur le serveur Il s’agit de déposer uniquement sa clé publique sur le serveur pour qu’elle soit utilisée. Cette clé doit être placée dans le fichier $HOME/.ssh/authorized_keys de l’utilisateur sur le serveur. Ce fichier peut contenir plusieurs clés publiques, à raison d’une par ligne, car l’utilisateur peut disposer de plusieurs clés privées (réparties éventuellement sur des ordinateurs différents). Il y a plusieurs méthodes pour placer la clé publique dans ce fichier : • manuelle : l’utilisateur édite lui même le fichier et y copie-colle la clé • semi-automatique : l’utilisateur transfère le fichier contenant la clé publique et le renomme ou l’ajoute au fichier authorized_keys • automatique : l’utilisateur utilise la commande ssh-copy-id qui se charge de tout Dans un premier temps, nous allons utiliser la méthode manuelle. IUT Aix-Marseille - INFO Aix 23/12/2014 - C. Pain-Barre UE31 - M3102 : Services R´eseaux Enonc´e du TP 2 14/31 Exercice 3 (dépôt manuel de la clé publique sur allegro) 1. Sur allegro (via la connexion SSH), créer le répertoire .ssh dans votre répertoire personnel 2. Créer le fichier authorized_keys dans .ssh à l’aide d’un éditeur ou en exécutant simplement : cat > ~/.ssh/authorized_keys 3. Sur le PC, afficher le fichier id_rsa.pub 4. Sélectionner le contenu du fichier qui a été affiché (ça le copie) 5. Coller ce contenu dans l’éditeur (si vous utilisez vi, n’oubliez pas de taper i d’abord pour passer en mode insertion) ou directement sur le terminal si vous utilisez cat. Faire bien attention que le tout constitue bien une seule ligne et se termine par un retour à la ligne. 6. Sauver le fichier ou taper CTRL-D si vous utilisez cat 7. Afficher le fichier pour voir si tout est correct Pas besoin de corrigé. . . 1.7 Préparation à l’utilisation de la paire de clés Pour le moment, on ne peut probablement pas utiliser la paire de clés. En effet, SSH est très capricieux concernant les fichiers/répertoires des utilisateurs. En particulier, côtés client et serveur, il faut : • que le répertoire personnel de l’utilisateur soit inaccessible en écriture aux membres du groupe et aux autres. Il faut s’en assurer en exécutant chmod go-w ~ sur les deux machines • que le répertoire .ssh soit complètement inaccessible pour les membres du groupe et les autres, et pleinement accessible pour l’utilisateur. Il faut s’en assurer en exécutant chmod 700 ~/.ssh sur les deux machines • que les fichiers du répertoire .ssh soient totalement inaccessibles pour les membres du groupe et les autres. Il faut s’en assurer en exécutant chmod go-rw ~/.ssh/* sur les deux machines. En réalité, pour ce dernier point il faut surtout protéger la clé privée. Les autres fichiers peuvent être accessibles en lecture mais cela n’a pas d’intérêt (bien au contraire). Exercice 4 (mise en conformité des droits) Faire le nécessaire pour mettre en conformité les droits côtés client et serveur. Pas besoin de corrigé. . . ✍ La commande ssh-copy-id est un script qui se charge de transférer la clé publique et de créer le répertoire .ssh s’il n’existe pas côté serveur, le tout avec les bonnes permissions. En revanche, il ne modifie pas les permissions de ce qui existe (notamment celles du répertoire personnel de l’utilisateur) ni celles de la machine cliente. Son utilisation est quand même bien pratique. C. Pain-Barre - 23/12/2014 IUT Aix-Marseille - INFO Aix 15/31 1.8 Enonc´e du TP 2 UE31 - M3102 : Services R´eseaux Connexion avec la paire de clés La version de ssh actuelle sous Linux est configurée pour tenter l’authentification par paire de clés (RSA SSH2) avant celle par mot de passe. Dans le doute on peut préciser l’option -o PreferredAuthentications= publickey. Une autre option intéressante est celle précisant (le fichier de) la clé privée à utiliser au cas où on en a plusieurs. Cette option est -i fichier-cl´e. Dans notre cas, nous ne devrions avoir besoin d’aucune de ces options. Exercice 5 (Connexion sur allegro par paire de clés) 1. Sur le PC, sur le terminal où il n’y a pas la connexion SSH avec allegro, tenter une connexion SSH avec allegro. Si c’est votre mot de passe qui est demandé et non la passphrase, c’est que l’authentification par paire de clés a échoué. Vous avez mal réalisé l’une des étapes précédentes (copie de la clé publique et/ou mise en conformité des droits). Dans ce cas, faire ce qu’il faut pour corriger le problème et retenter la connexion. 2. Terminer la connexion SSH sur allegro en tapant CTRL-D . Pas besoin de corrigé. . . 1.9 Le fournisseur de passphrase ssh-agent Si l’on est consciencieux, on a utilisé une longue passphrase qui est fastidieuse à taper. Or, si l’on se connecte à nouveau au serveur en utilisant un autre terminal, la passphrase nous sera encore demandée pour débloquer la clé privée. C’est là qu’intervient l’agent ssh-agent. C’est un processus qui s’exécute en tâche de fond et à qui on communique la passphrase qui lui permet de débloquer la clé privée. Ceci fait, chaque fois que ssh a besoin de la clé privée, c’est à ssh-agent qu’elle la demandera, sans intervention de l’utilisateur. Ainsi, on ne la tape qu’une fois par session (entendre par là session gnome, kde ou autre). Dans les distributions récentes, ssh-agent est lancé dès que l’utilisateur ouvre une session. Il n’a donc rien à faire pour l’utiliser. Dans les distributions anciennes, c’est un peu plus compliqué. Il faut : • lancer manuellement ssh-agent par une méthode particulière. En bash, il faut exécuter : $ eval $(ssh-agent) Cette commande exécute ssh-agent et crée les variables d’environnement SSH_AGENT_PID et SSH_AUTH_SOCK dont ssh a besoin pour contacter l’agent • Sur le terminal depuis lequel la commande précédente a été tapée, tout est configuré pour utiliser l’agent • Si l’on exécute d’autres terminaux depuis ce terminal, alors ils bénéficieront aussi de ces variables et l’on pourra utiliser l’agent • En revanche, si on ouvre un autre terminal depuis le bureau, les variables précédentes ne seront pas connues. Il faudra alors les créer pour utiliser l’agent. Pour cela, le plus simple est de taper ssh-agent -s sur le terminal où l’agent a été lancé, ce qui affiche les commandes bash à exécuter dans un autre terminal pour utiliser l’agent : IUT Aix-Marseille - INFO Aix 23/12/2014 - C. Pain-Barre UE31 - M3102 : Services R´eseaux Enonc´e du TP 2 16/31 $ ssh-agent -s SSH_AUTH_SOCK=/tmp/ssh-LhGscH2261/agent.2261; export SSH_AUTH_SOCK; SSH_AGENT_PID=2307; export SSH_AGENT_PID; echo Agent pid 2307; où la dernière ligne a peu d’intérêt. . . Une autre possibilité est d’afficher ces variables sur le terminal où l’agent a été lancé, en tapant par exemple : $ set | grep '^SSH' SSH_AGENT_PID=2307 SSH_AUTH_SOCK=/tmp/ssh-LhGscH2261/agent.2261 puis, sur le nouveau terminal, il faudra taper : $ export SSH_AGENT_PID=2307 $ export SSH_AUTH_SOCK=/tmp/ssh-LhGscH2261/agent.2261 On comprend pourquoi dans les distributions récentes l’agent est exécuté avant le bureau de manière à ce que les variables soient connues par tous les processus exécutés par l’utilisateur. . .. L’agent étant exécuté, il reste à lui communiquer la passphrase de la clé qu’on veut utiliser. Pour cela, il faut utiliser la commande ssh-add. Bien qu’admettant un certain nombre d’options, l’utilisation qu’on en fait est des plus basiques. Synopsis ssh-add [fichier-cl´e ] où fichier-cl´e est optionnel et est la référence du fichier contenant la clé privée qu’on souhaite utiliser. Par défaut, le fichier utilisé est $HOME/.ssh/id_rsa (ça tombe bien, non ?). L’agent demande alors la passphrase servant à débloquer la clé correspondante. Comme son nom ne l’indique pas, ssh-add permet aussi de supprimer la gestion de certaines clés par l’agent. Consulter le manuel de cette commande pour les options disponibles. Exercice 6 (utilisation de ssh-agent) 1. Sur le PC (sur le terminal où la connexion SSH est terminée), exécuter ssh-add 2. Communiquer la passphrase à l’agent 3. Ouvrir un nouveau terminal à partir du bureau 4. Depuis ce terminal, se connecter à allegro par ssh. Aucune passphrase ne doit être demandée et la connexion doit réussir 5. Terminer la connexion sur allegro en tapant CTRL-D ou exit Pas besoin de corrigé. . . C. Pain-Barre - 23/12/2014 IUT Aix-Marseille - INFO Aix 17/31 2 Enonc´e du TP 2 UE31 - M3102 : Services R´eseaux Possibilités offertes par SSH Les utilisations possibles de SSH sont trop nombreuses pour être toutes énumérées ici. Se reporter au manuel de ssh pour avoir une liste plus détaillée. Pour une utilisation courante que nous étudierons ici, on peut ne retenir que : • l’exécution de commandes à distance • la copie sécurisée de fichiers/répertoires par la commande scp • un transfert de fichiers de type FTP mais sécurisé par la commande sftp • la redirection de ports locaux ou distants par tunneling • la redirection X11 (affichage de fenêtres graphiques) • la définition de profils qui paramètrent le client ssh via le fichier $HOME/.ssh/config À cela peut s’ajouter la création de tunnels de type VPN mais cela nécessite les droits d’administrateur côté client et serveur car les tunnels créent des interfaces réseau virtuelles et modifient les tables de routage. 2.1 Exécution de commandes à distance par ssh La possibilité d’exécuter des commandes à distance via le réseau, comme s’il s’agissait de commandes locales a été historiquement offerte sous Unix par la commande rsh et s’apparente à l’appel de procédure à distance (Remote Procedure Call). rsh est maintenant obsolète car n’est pas sécurisée. ssh assure le même service que rsh mais à travers la connexion sécurisée. On complète alors le synopsis de ssh. Synopsis ssh {-o options-ssh} [-i fichier-cl´e ] [-l utilisateur ] [-C] [-t] [utilisateur @]serveur [commande] Ainsi, ce qui suit le serveur est la commande à exécuter sur le serveur, à la place d’un login-shell. La commande peut être limitée à un seul mot (comme ls) ou prendre des options ou arguments (comme ls -l rep). Mais elle peut être aussi une succession de commandes (comme cd rep ; ls -l | less) mais dans ce cas il faut protéger les caractères spéciaux. Le mieux est donc d’encadrer commande par des guillemets ou des quotes. L’entrée standard et les sorties de commande sont redirigées pour être celles de ssh. Les options -o, -i et -l sont celles vues précédemment. L’option -C est introduite ici mais n’est pas spécifique à l’exécution d’une commande à distance : elle demande une compression de ce qui est transféré. Elle est utile s’il y a beaucoup de données qui circulent (dans un sens ou dans l’autre). L’option -t demande la création d’un terminal et doit être utilisée si commande nécessite une interaction avec l’utilisateur (comme ls -l | less). IUT Aix-Marseille - INFO Aix 23/12/2014 - C. Pain-Barre UE31 - M3102 : Services R´eseaux Enonc´e du TP 2 18/31 Exemple 2 Pour ces exemples, ssh-agent est actif et connaît la passphrase : pc$ ssh [email protected] 'ls -l public/unix/a*.txt' -rw-r--r-- 1 cpb prof 4840 Mar 16 16:44 public/unix/a_decouper.txt -rw-r--r-- 1 cpb prof 446 Sep 6 2005 public/unix/acrostiche.txt -rw-r--r-- 1 cpb prof 422 Sep 5 2002 public/unix/amphi.txt -rw-r--r-- 1 cpb prof 1168 Sep 5 2002 public/unix/amphigouri.txt ➪ affiche les informations détaillées des fichiers commençant par a et se terminant par .txt sur le répertoire public/unix d’allegro pc$ ssh [email protected] 'ls -l public/unix/a*.txt' > fichiers.txt ➪ même chose que précédemment mais place le résultat dans le fichier fichiers.txt pc$ ssh -t [email protected] 'ls -l public/unix | less' ... ➪ affiche en paginant les informations détaillées du répertoire public/unix d’allegro. Cela nécessite l’emploi de l’option -t pc$ cat fic | ssh [email protected] 'cat > fic.sve && echo "ok"' ok ➪ une façon de copier le fichier fic sur allegro. . . Exercice 7 (exécution de commandes distantes) Sur le PC, depuis le terminal précédent (où la connexion avec allegro est terminée), utiliser l’exécution de commandes à distance pour : 1. faire afficher le contenu du fichier cigale.txt du répertoire de l’utilisateur cpb sur allegro 2. créer un répertoire tpres sur allegro, y créer le fichier toustxt contenant la concaténation de tous les fichiers d’extension .txt de ~cpb/public/unix, puis de faire afficher les informations détaillées sur ce fichier 3. copier le contenu du fichier (contenant la clé publique) ~/.ssh/id_rsa.pub du PC dans le répertoire tpres d’allegro, puis le faire afficher, et le supprimer. [Corrigé] C. Pain-Barre - 23/12/2014 IUT Aix-Marseille - INFO Aix 19/31 2.2 Enonc´e du TP 2 UE31 - M3102 : Services R´eseaux Copie de fichiers/répertoires par scp La copie de fichiers à distance via le réseau a été historiquement offerte sous Unix par la commande rcp (remote copy). rcp est obsolète car n’est pas sécurisée et est maintenant supplantée par scp (secure copy). La commande scp est analogue à la commande cp et suit les mêmes principes concernant le traitement des sources et de la destination, sauf que ces fichiers/répertoires sont situés sur des ordinateurs (éventuellement) différents. Par cela, scp établit une connexion SSH afin de copier des fichiers ou répertoires d’un ordinateur à l’autre. scp utilisant ssh, les options -i et -C sont aussi reconnues par scp qui les lui communique. Certaines options sont néanmoins spécifiques à scp. Synopsis scp [-rp] {-o options-ssh} [-i fichier-cl´e ] [-C] [[utilisateur @]serveur:]source {[[utilisateur @]serveur:]source} [[utilisateur @]serveur:]destination Les : qui suivent serveur sont obligatoires ! Les options -o, -i et -C sont celles vues précédemment. L’option -r demande une copie récursive et doit être utilisée si une source est un répertoire. L’option -p demande que les fichiers obtenus par la copie aient les mêmes dates de modification et d’accès, ainsi que les mêmes permissions que les fichiers d’origine. Comme le laisse entendre le synopsis, scp peut même copier des fichiers entre deux ordinateurs différents de l’ordinateur depuis lequel la commande est exécutée ! Malheureusement, cette possibilité n’est pas aussi simple que ça à mettre en œuvre car il faut que l’authentification entre les hôtes distants soit automatique, ce qui nécessite : • que la clé publique soit déjà déposée sur l’hôte destination de la copie • que la clé privée soit utilisable par l’hôte source de la copie. Cela est rendu possible en utilisant l’option ForwardAgent yes de ssh mais cette option ne peut pas être passée par l’option -o de scp. Il faut utiliser un profil spécifique qui l’active (voir section 2.4, page 21) ✍ Il est possible d’utiliser les motifs de noms de fichiers pour la copie. Cependant, ces motifs sont interprétés par le bash courant. Ce n’est pas un problème si les sources sont locales mais si elles sont distantes, il faut protéger ces motifs pour qu’ils soient interprétés par l’hôte distant (voir exemples). Exemple 3 Pour ces exemples, ssh-agent est actif et connaît la passphrase : pc$ scp [email protected]:public/unix/cigale.txt . cigale.txt 100% 677 0.7KB/s ➪ 00:00 copie dans le répertoire de travail le fichier public/unix/cigale.txt d’allegro IUT Aix-Marseille - INFO Aix 23/12/2014 - C. Pain-Barre UE31 - M3102 : Services R´eseaux pc$ ls *.txt bidule.txt cigale.txt truc.txt pc$ scp -C *.txt cpb@allegro:tmp bidule.txt cigale.txt truc.txt ➪ Enonc´e du TP 2 100% 100% 100% 20/31 6 677 6 00:00 00:00 00:00 copie les fichiers du répertoire de travail se terminant par .txt dans le répertoire tmp d’allegro. La compression des transferts est activée. pc$ mkdir textes pc$ scp -Cp 'cpb@allegro:public/unix/a*.txt' textes a_decouper.txt 100% 4840 acrostiche.txt 100% 446 amphi.txt 100% 422 amphigouri.txt 100% 1168 ➪ 0.0KB/s 0.7KB/s 0.0KB/s 4.7KB/s 0.4KB/s 0.4KB/s 1.1KB/s 00:00 00:00 00:00 00:00 copie (avec compression) les fichiers du répertoire public/unix de allegro commençant par a et se terminant par .txt dans le répertoire textes. Les fichiers obtenus ont les mêmes droits et les mêmes dates que les fichiers d’origine. Le motif a*.txt est protégé car il doit être interprété sur allegro et non localement. Exercice 8 (copie sécurisée par scp) Depuis le terminal précédent, utiliser scp pour : 1. copier dans votre répertoire de travail les fichiers commençant par c du répertoire ~cpb/public/unix d’allegro 2. copier récursivement dans votre répertoire de travail votre répertoire tpres d’allegro en le nommant tpres.sve et en préservant les dates et les permissions des fichiers d’origine. Vérifier son existence. [Corrigé] 2.3 Transfert de fichiers par sftp La commande sftp (secure file transfer program) est une alternative sécurisée à l’emploi de FTP qui ne l’est pas. Comme scp, sftp utilise ssh pour ses transferts. Comme (la commande) ftp, sftp est par défaut interactif et propose des commandes internes similaires. sftp ne permet pas de transférer des répertoires (du moins simplement). On peut utiliser sftp pour des objectifs différents, chacun ayant sa propre syntaxe. C. Pain-Barre - 23/12/2014 IUT Aix-Marseille - INFO Aix 21/31 Enonc´e du TP 2 UE31 - M3102 : Services R´eseaux Synopsis sftp sftp sftp sftp [-C] [-C] [-C] [-C] {-o {-o {-o {-o options-ssh} options-ssh} options-ssh} options-ssh} [utilisateur @]serveur [utilisateur @]serveur :r´epertoire [utilisateur @]serveur :source [destination] -b fic-commandes [utilisateur @]serveur La première forme sert pour se connecter au serveur et travailler en mode interactif (à la manière de ftp). La deuxième forme est identique à la première mais on se place directement dans r´epertoire sur le serveur. La troisième forme est non interactive et permet simplement de copier le fichier source dans destination. C’est donc une utilisation similaire à scp mais plus limitée. La quatrième forme est non interactive et demande à sftp d’exécuter les commandes internes (sftp) contenues dans le fichier fic-commandes. Elle est pratique pour automatiser des transferts. Elle nécessite une authentification par paire de clés. Les options -C et -o sont celles vues précédemment. On remarque l’absence d’option -i mais il existe une option-ssh qui la remplace (voir plus loin). ✍ La liste des commandes internes sftp est trop longue pour être décrite ici, consulter le manuel en ligne pour les connaître. Une autre possibilité est de taper la commande interne help sur le prompt de sftp. Exercice 9 (transfert de fichiers par sftp) 1. Dans un nouveau terminal du PC, afficher les pages de manuel de sftp pour avoir la liste des commandes internes 2. Dans un autre terminal (du PC), utiliser sftp pour établir une connexion ssh/sftp sur allegro 3. Récupérer le fichier fruit.price qui devrait se trouver dans le répertoire ~cpb/public/unix 4. Quitter la session sftp. [Corrigé] 2.4 Profils et options de ssh Lorsqu’elle est utilisée, directement ou indirectement par scp ou sftp, ssh prend en compte les options qui lui sont communiquées, soit sur la ligne de commandes, soit par l’intermédiaire de fichiers de configuration. Son traitement des options suit l’ordre suivant : 1. les options de la ligne de commande : celles indiquées par l’option -o option-ssh 2. les options du fichier de configuration utilisateur $HOME/.ssh/config 3. les options du fichier de configuration commun à tous les utilisateurs /etc/ssh/ssh_config Une option pouvant figurer aussi bien sur la ligne de commandes que dans les fichiers de configuration, la première trouvée est celle retenue. IUT Aix-Marseille - INFO Aix 23/12/2014 - C. Pain-Barre UE31 - M3102 : Services R´eseaux Enonc´e du TP 2 22/31 Les fichiers de configuration sont organisés en sections où chaque section débute par le mot clé Host suivi d’un motif. Dans le synopsis des commandes précédentes (ssh, scp, sftp), si serveur correspond au motif, alors les options de la section correspondante s’appliquent pour la connexion (sauf si elles sont redéfinies sur la ligne de commandes). ✍ Une section permet donc de définir des profils SSH, chacun avec ses propres options. Le motif peut prendre plusieurs formes : adresses IP ou chaînes (de type nom DNS). Il peut contenir * qui représente n’importe quelle chaîne de caractères, ou ? qui représente n’importe quel caractère (ou chiffre dans une adresse IP). On peut donc définir un profil pour les connexions concernant n’importe quel serveur se terminant par .univ-aix.fr en commençant une section par Host *.univ-aix.fr (aucune résolution DNS n’est faite à ce stade, il s’agit juste de comparer serveur et le motif). Une utilisation très courante de la définition d’une section est la possibilité de définir différents profils pour des connexions vers un même ordinateur. Cela se fait en combinant le mot clé Host et le mot clé Hostname comme dans l’exemple si-dessous. Exemple 4 Si $HOME/.ssh/config contient les lignes suivantes : Host iut1 Hostname allegro.iut.univ-aix.fr Options spécifiques au profil iut1 Host iut2 Hostname allegro.iut.univ-aix.fr Options spécifiques au profil iut2 Alors, en utilisant iut1 en lieu et place de serveur, on utilisera les options du profil iut1 pour se connecter à allegro, alors que si l’on utilise iut2 on se connectera toujours à allegro mais en utilisant les options du profil iut2. Enfin, une section d’ordre général peut être définie en utilisant Host *. Toutes les options de cette section s’appliquent aux connexions, sauf les options ayant déjà été définies sur la ligne de commande ou définies par une section précédente qui correspondait. ✍ Cette section, si elle est utilisée, doit normalement être placée en fin des fichiers de configuration $HOME/.ssh/config et/ou /etc/ssh/ssh_config. Parmi les options possibles pouvant figurer dans les sections, certaines nous intéressent particulièrement : • User suivi du nom d’utilisateur sur le serveur. Cela évite d’utiliser l’option -l de ssh ou les spécifications de type utilisateur @ • IdentityFile suivi du chemin absolu du fichier contenant la clé privée à utiliser (même rôle que l’option -i de ssh et de scp) • Port suivi du numéro de port du serveur SSH sur la machine distante. Par défaut, cette option vaut 22 • Compression suivi de yes ou no selon que l’on veut ou non activer la compression (même rôle que l’option -C) C. Pain-Barre - 23/12/2014 IUT Aix-Marseille - INFO Aix 23/31 Enonc´e du TP 2 UE31 - M3102 : Services R´eseaux • ForwardAgent suivi de yes ou no selon que l’on veut ou non que l’agent ssh local puisse débloquer la clé privée pour un ssh exécuté à distance (via une connexion SSH). Cette option doit être activée pour pouvoir réaliser une copie entre hôtes distants par scp. Celles qui suivent ont généralement des valeurs par défaut adéquates mais on peut les spécifier au cas où : • HashKnownHosts suivi de yes ou no selon que l’on veut ou non que le fichier known_hosts soit hashé. Sur Debian, cette option est activée par défaut dans /etc/ssh/ssh_config • PasswordAuthentication suivi de yes ou no selon que l’on souhaite ou non utiliser l’authentification par mot de passe. Cette option est active par défaut et vaut yes • PreferredAuthentications permet d’indiquer un ordre de préférence pour l’authentification de l’utilisateur. Nous n’avons vu ici que les authentifications password et publickey. On peut définir l’ordre publickey,password (qui est déjà celui par défaut) • Protocol permet d’indiquer un ordre de préférence sur la version de SSH à utiliser. Par défaut, vaut 2,1 (si SSH2 n’est pas disponible, bascule en SSH1) mais on peut totalement désactiver l’emploi du SSH1 en indiquant seulement 2 • PubkeyAuthentication suivi de yes ou no selon que l’on souhaite ou non utiliser l’authentification par paire de clés. Le défaut est yes • StrictHostKeyChecking suivi de yes, no ou ask. Si c’est yes, ssh refusera de se connecter à un serveur dont la clé publique n’existe pas dans les fichiers $HOME/.ssh/known_hosts et /etc/ssh/ssh_know Si c’est no, ssh ajoutera la clé publique d’un serveur inconnu dans le fichier $HOME/.ssh/known_hosts sans demander l’autorisation à l’utilisateur et si la clé du serveur a changé, l’utilisateur en sera averti. Si c’est ask, alors ssh demandera à l’utilisateur s’il doit ajouter la clé publique d’un serveur inconnu ou pas, et refusera de se conecter à un serveur dont la clé a changé. Par défaut cette option vaut ask. Quelle que soit la valeur de l’option précédente, la clé publique du serveur sera toujours vérifiée. Les options sont trop nombreuses pour être décrites dans ce document, exécuter man ssh_config pour afficher le manuel qui les décrit toutes. Nous en verrons celles qui concernent la redirection de port et de X11 dans la suite. L’option -o de ssh, scp et sftp Cette option permet de spécifier une option ssh à l’aide d’un mot clé utilisé précédemment. Cependant dans ce cas, on ne sépare pas le mot clé de sa valeur par des blancs mais par le signe =. ✍ Pas toutes les options de ssh peuvent être modifiées avec l’option -o. Par exemple, ForwardAgent n’est pas activable par l’option -o de scp et le seul moyen de l’utiliser avec cette commande est de créer un profil qui l’active. ✍ On pourra remarquer que c’est le seul moyen de spécifier un fichier clé privée pour la commande sftp. IUT Aix-Marseille - INFO Aix 23/12/2014 - C. Pain-Barre UE31 - M3102 : Services R´eseaux 3 Enonc´e du TP 2 24/31 SSH et la redirection de ports (tunneling) Ainsi que nous l’avons vu par l’intermédiaire de scp et de sftp, SSH est bien plus qu’un TELNET sécurisé. Il propose de multiples autres utilisations dont une qui est particulièrement intéressante : la création de tunnels combinée à la redirection de port (Port forwarding). 3.1 Principe du tunneling Supposons que depuis notre ordinateur mowgli l’on ait accès à la machine bagheera qui héberge un serveur SSH, ainsi qu’un serveur POP3 (protocole simple permettant de gérer une boîte aux lettres électronique). On démarre alors une session SSH distante depuis mowgli vers bagheera comme illustré par la figure 5, où le client SSH utilise le port TCP 12345 sur mowgli. #12345 connexion SSH #22 mowgli bagheera F IGURE 5 – Connexion SSH standard La connexion SSH est sécurisée : à part une attaque de type man-in-the-middle à l’établissement de la connexion, le trafic sur cette connexion n’est pas déchiffrable par une tierce personne. Laissons de côté un instant cette connexion. Si régulièrement on utilise son client de messagerie préféré pour rapatrier son courrier contenu sur bagheera depuis mowgli, alors on établit à chaque fois une connexion avec le serveur POP3 de bagheera, comme illustré par la figure 6, où le client de messagerie POP3 utilise le port TCP 54321 sur mowgli, et la connexion se fait sur le port 110 (serveur POP3). #54321 connexion POP3 #110 #12345 connexion SSH #22 mowgli bagheera F IGURE 6 – Connexions SSH et POP3 Ici, la connexion POP3 n’est pas sécurisée : toute la discussion circule en clair. Cela comprend le nom d’utilisateur et le mot de passe qui circulent en ASCII et peuvent être "observés" sur le réseau. Cependant on peut utiliser la connexion SSH établie afin de faire "passer" une ou plusieurs autres connexions. Cela est possible en créant un tunnel à travers la connexion SSH, comme illustré par la figure 7. #55555 #110 tunnel pour connexion POP3 #12345 mowgli connexion SSH #22 bagheera F IGURE 7 – Connexion POP3 à travers un tunnel SSH Sur la figure, le tunnel SSH relie le port TCP 55555 de mowgli au port TCP 110 de bagheera. Tout se passe comme si un serveur POP3 était actif sur mowgli, en écoute sur le port 55555. C. Pain-Barre - 23/12/2014 IUT Aix-Marseille - INFO Aix 25/31 Enonc´e du TP 2 UE31 - M3102 : Services R´eseaux En général, ce "serveur" n’accepte que des connexions locales (pas d’une machine autre que mowgli) et utilise alors l’adresse 127.0.0.1. On peut toutefois configurer le tunnel pour que le serveur accepte des connexions de machines distantes (il utiliserait alors son adresse IP). Pour le moment, on considère que le serveur n’accepte que des connexions locales. Ci-dessous on voit un extrait du résultat de la commande netstat sur la machine mowgli (139.124.187.34) qui a établi une connexion SSH avec bagheera (139.124.187.4) et un tunnel à partir du port 55555. Le tunnel n’est pas (encore) utilisé car aucune connexion n’est établie avec ce serveur. On remarque que rien ici ne permet de savoir qu’il y a un lien entre le serveur 127.0.0.1:55555 et le client SSH 139.124.187.34:12345 : mowgli$ netstat -tan Connexions Internet actives (serveurs et établies) Proto Recv-Q Send-Q Adresse locale Adresse distante tcp 0 0 127.0.0.1:55555 0.0.0.0:* tcp 0 0 0.0.0.0:80 0.0.0.0:* tcp 0 0 139.124.187.34:12345 139.124.187.4:22 Etat LISTEN LISTEN ESTABLISHED Si un client local à mowgli se connecte au port 55555 de mowgli, alors la connexion est redirigée à travers le tunnel SSH vers le port 110 de bagheera. Tout le trafic sur la connexion SSH étant crypté, la connexion ainsi redirigée est elle aussi cryptée. Voici ci-dessous le résultat de la commande netstat lorsque la connexion entre un client de messagerie (139.124.187.34:55326) est établie avec le "serveur" 127.0.0.1:55555 sur mowgli : mowgli$ netstat -tan Connexions Internet actives (serveurs et établies) Proto Recv-Q Send-Q Adresse locale Adresse distante tcp 0 0 127.0.0.1:55555 0.0.0.0:* tcp 0 0 0.0.0.0:80 0.0.0.0:* tcp 0 0 139.124.187.34:12345 139.124.187.4:22 tcp 0 0 127.0.0.1:55555 127.0.0.1:55326 tcp 0 0 127.0.0.1:55326 127.0.0.1:55555 Etat LISTEN LISTEN ESTABLISHED ESTABLISHED ESTABLISHED Sur bagheera, le serveur SSH qui se trouve à l’autre bout du tunnel doit alors établir une connexion avec le serveur POP3. Voici l’affichage avec netstat des connexions TCP actives sur bagheera : bagheera$ netstat -tn Connexions Internet actives (sans serveurs) Proto Recv-Q Send-Q Local Address tcp 0 0 139.124.187.4:110 tcp 0 0 139.124.187.4:46204 tcp 0 0 139.124.187.4:22 Foreign Address 139.124.187.4:46204 139.124.187.4:110 139.124.187.34:12345 State ESTABLISHED ESTABLISHED ESTABLISHED On voit bien que bagheera (139.124.187.4) a établi une connexion vers son port 110 à partir de son port 46204 (utilisé pour l’occasion par le serveur SSH), ceci pour contacter le serveur POP3. Les échanges de cette connexion sont redirigés à travers la connexion SSH puis sur mowgli (139.124.187.34) entre le port 55555 (détenu par le client SSH) et le port 55326 (du client de messagerie). ✍ La précédente opération s’appelle la redirection de port local (local port forwarding). Il existe aussi la redirection de port distant (remote port forwading) qui a un objectif similaire. IUT Aix-Marseille - INFO Aix 23/12/2014 - C. Pain-Barre UE31 - M3102 : Services R´eseaux 3.2 Enonc´e du TP 2 26/31 Mise en place de la redirection de port local avec ssh Pour mettre en place la redirection de port local il faut utiliser l’option -L de ssh sur la ligne de commandes. La syntaxe de cette option est la suivante : -L port local:machine distante:port distant Ainsi, dans l’exemple précédent, la mise en place de la connexion SSH et de la redirection de port se fait sur mowgli par la ligne de commandes suivante : mowgli$ ssh -L 55555:bagheera:110 bagheera Redirection de port local et fichier de configuration À la liste des options figurant dans les sections des fichiers $HOME/.ssh/config et /etc/ssh/ ssh_config, on peut ajouter l’option LocalForward demandant de réaliser la redirection de port local : LocalForward port local:machine distante:port distant Quelques remarques importantes : • machine distante est interprété par le serveur SSH à l’autre bout de la connexion. Dans l’exemple, l’autre bout de la connexion est bagheera qui devrait se connaître lui-même. . .On aurait tout aussi bien pu utiliser localhost à la place de bagheera. On peut aussi utiliser un nom long de type bagheera.jungle.org ou encore une adresse IP • La destination n’est pas forcément la même machine que celle sur laquelle est ouverte la session SSH. En effet, on peut créer un tunnel pour contacter un serveur sur une machine que l’on ne pourrait pas atteindre directement. C’est une possibilité particulièrement intéressante de SSH. Supposons que le serveur POP3 n’est pas hébergé par bagheera mais par baloo et qu’un firewall empêche mowgli d’accéder à baloo (ou simplement à son port TCP 110). La solution consiste à établir une session SSH entre mowgli et bagheera et d’utiliser cette session pour réaliser un port forwarding depuis (par exemple) le port 55555 de mowgli vers le port 110 de baloo (atteint via bagheera) comme l’illustre la figure 8. #54321 #5678 #110 tunnel pour connexion POP3 connexion normale non cryptée #12345 mowgli connexion SSH #22 bagheera baloo F IGURE 8 – Connexion POP3 par rebond via le tunnel SSH Pour cela, il suffit d’indiquer en destination baloo:110 (ou le nom complet ou l’adresse IP à la place de baloo). la connexion entre bagheera et baloo n’est pas cryptée. Il est alors possible à quelqu’un situé entre bagheera et baloo d’espionner cette connexion. • On peut mettre en place plusieurs tunnels sur une même connexion SSH. • On peut mettre bout à bout les tunnels. • Il est possible de mettre en place un tunnel sans que la session SSH n’ouvre un terminal (exécute un login-shell). C. Pain-Barre - 23/12/2014 IUT Aix-Marseille - INFO Aix 27/31 3.3 Enonc´e du TP 2 UE31 - M3102 : Services R´eseaux Mise en place de la redirection de port distant avec ssh Cette redirection est assez rarement utilisée. Elle produit l’effet inverse, à savoir rediriger les connexions provenant d’un port du serveur sur le port d’un ordinateur (peut être celui du client). Elle est utile lorsque l’on veut utiliser un client sur le serveur SSH mais qu’un firewall empêche la connexion de ce client, alors qu’elle est possible à partir du client SSH. Pour mettre en place la redirection de port distant il faut utiliser l’option -R de ssh sur la ligne de commandes. Sa syntaxe est la suivante : -R port serveur :machine:port Si un client sur le serveur SSH se connecte au port port serveur alors la connexion est redirigée sur la connexion SSH et le client SSH établit une connexion (non sécurisée) sur le port port de machine. ✍ machine est cette fois interprété par le client SSH et non par le serveur. Redirection de port distant et fichier de configuration À la liste des options figurant dans les sections des fichiers $HOME/.ssh/config et /etc/ssh/ ssh_config, on peut ajouter l’option RemoteForward demandant de réaliser la redirection de port distant : RemoteForward port serveur :machine:port 4 Et SSH sur Windows ? Des clients (et des serveurs) SSH existent sous Windows. On peut faire la même chose avec ces clients que ce que l’on peut faire avec ssh. Le plus célèbre d’entre eux est Putty. La suite Putty est composée de divers exécutables : • plink : correspond à ssh • pscp : correspond à scp • psftp : correspond à sftp • puttygen : correspond à ssh-keygen • pageant : correspond à ssh-agent • putty : un client ssh avec une interface graphique permettant de configurer des tunnels et des redirections X11, et sauver ces configurations dans des profils. IUT Aix-Marseille - INFO Aix 23/12/2014 - C. Pain-Barre UE31 - M3102 : Services R´eseaux Enonc´e du TP 2 28/31 F IGURE 9 – Environnement de travail dans Marionnet 5 Jouons un peu avec les services TELNET, SSH et HTTP Exercice 10 (Démarrage d’un lab Marionnet et d’une VM XP) Nous allons travailler sur des machines virtuelles mises en réseau dans le simulateur Marionnet, conformément à la figure 9. 1. Télécharger le fichier m3102_tp2_lab1.mar, l’ouvrir dans Marionnet et cliquer sur Tout Démarrer. Outre le switch S1 dont on ne s’occupera pas, les équipements de ce réseau virtuel sont : • m1 : machine linux non encore configurée ; • m2 : machine linux d’adresse 10.0.2.10/24 ; • B1 : machine Windows XP non encore intégrée au réseau virtuel • G1 : routeur d’accès vers Internet, qui possède l’adresse 10.0.2.2/24 dans Marionnet 2. Télécharger le script m3102_tp2_mkxp4mario.bash et l’exécuter pour créer et démarrer la machine virtuelle Windows XP qui est représentée par B1 dans Marionnet 3. Une fois m1 démarrée, s’y loger en tant que root (mot de passe root) et la configurer : (a) en affectant l’adresse IP 10.0.2.15/24 à son interface eth0 (b) en lui donannt G1 comme routeur par défaut 4. Vérifier que la configuration de m1 est correcte avec un ping de m2 C. Pain-Barre - 23/12/2014 IUT Aix-Marseille - INFO Aix 29/31 Enonc´e du TP 2 UE31 - M3102 : Services R´eseaux 5. Une fois la VM XP démarrée, se loger en tant que iutinfo (compte Administrateur sans mot de passe) et la configurer avec l’adresse 10.0.2.100/24 et G1 comme passerelle (routeur par défaut) pour jouer le rôle de B1. Pour cela, deux possibilités : • soit aller dans le menu Démarrer −→ Panneau de Configuration, puis Connexions réseau et doublecliquer sur la carte Connexion au réseau local. Sur la fenêtre qui s’affiche, cliquer sur Propriétés, puis sélectionner Protocole Internet (TCP/IP) et cliquer sur Propriétés. Sélectionner Utiliser l’adresse IP suivante et renseigner les champs correspondants • soit en ouvrant un invite de commandes (menu Démarrer −→ Exécuter. . .) et utiliser netsh (sur une seule ligne) : C:\>netsh int ip set address "Connexion au réseau local" static adresse-ip masque passerelle m´etrique où l’on prendra 20 (valeur arbitraire. . .) comme m´etrique. 6. Vérifier que la configuration de cette VM XP est correcte avec un ping de m2 depuis l’invite de commande [Corrigé] Exercice 11 (Activation du service TELNET sur m2) Dans cet exercice, on va activer le service TELNET sur m2 et permettre à root de s’y conecter. On pourra constater à nouveau que ce service manque de sécurité. . . 1. Sur m2, se loger en tant que root (mot de passe root) 2. Pour activer le service TELNET sur m2, on va utiliser le super-serveur inetd : (a) éditer avec vi son fichier /etc/inetd.conf, et modifier la ligne : #<off># telnet stream tcp nowait telnetd /usr/sbin/tcpd tcp nowait root /usr/sbin/tcpd /usr/sbin/in.telnetd pour qu’elle devienne : telnet stream /usr/sbin/telnetd (b) recharger la configuration du démon inetd en tapant : m2# /etc/init.d/openbsd-inetd reload Le service devrait être maintenant opérationnel. 3. Depuis m1, tenter de se loger en root sur m2 avec telnet. On devrait remarquer que le service est bien actif (demande un login), mais que l’accès en root est pour le moment impossible 4. Sur m2, éditer le fichier /etc/securetty pour ajouter les lignes : pts/0 pts/1 pts/2 qui autorisent root à se loger par TELNET sur les 3 terminaux virtuels correspondants 5. Depuis m1, se loger en root sur m2 avec telnet juste pour vérifier que c’est possible puis quitter la session TELNET en tapant exit. IUT Aix-Marseille - INFO Aix 23/12/2014 - C. Pain-Barre UE31 - M3102 : Services R´eseaux Enonc´e du TP 2 30/31 6. Sur m2, exécuter la commande suivante : # tcpdump -A -i eth0 tcp dst port 23 qui demande d’afficher en ASCII le contenu des trames parvenant à l’interface eth0 et qui contiennent un segment TCP destiné à un serveur TELNET. Autrement dit, cette commande va permettre de visualiser les envois du client vers le serveur TELNET. ✍ Sur le principe, la visualisation de ce traffic peut se faire avec cette commande depuis n’importe quelle machine qui voit passer ces trames, soit parce qu’elle est sur le trajet (routeur), soit parce que le réseau fonctionne par inondation comme l’Ethernet partagé (ce qui serait le cas si on avait un hub à la place du switch) 7. Placer les fenêtres de m1 et m2 côte à côte. Depuis m1, se loger en root sur m2 avec telnet, tout en observant sur m2 le dernier caractère de certains segments transmis lors de l’authentification. On devrait pouvoir reconstituer le nom de l’utilisateur et son mot de passe, car ils sont transmis en clair !. . . 8. Arrêter la capture et sortir de la session TELNET. On a pu comprendre pourquoi l’accès root via TELNET est désactivé par défaut. On va voir qu’on ne peut espérer plus de sécurité en se logeant avec un utilisateur pour passer ensuite root. 9. Sur m2, créer un utilisateur toto en tapant : m2# adduser toto et en lui donnant un mot de passe simple, tel que truc 10. Exécuter à nouveau la même commande tcpdump sur m2 11. Depuis m1, se loger en toto sur m2 avec telnet, tout en vérifiant que la capture est opérationnelle 12. Une fois logé en toto sur m2, exécuter su pour passer root. Son mot de passe est alors demandé. Le saisir et remarquer qu’il est toujours transmis en clair. . . 13. Terminer la session TELNET, et arrêter la capture. [Corrigé] Exercice 12 (Service SSH sur m2 et tunneling SSH) Cet exercice a principalement pour but d’illustrer le principe des tunnels SSH et de la redirection de ports. Sur m2 un serveur SSH est déjà actif. 1. Quelle modification de la commande tcpdump précédente faudrait-il faire pour capturer le traffic à destination du serveur SSH ? On fera l’économie de cette capture car on ne verrait pas grand chose d’exploitable. . . 2. Vérifier que l’accès SSH sur m2 depuis m1 est bien possible, puis terminer aussitôt la session SSH. 3. Sur la VM XP, utiliser Putty pour accéder à m2 en SSH. Une fois logé, terminer aussitôt la session SSH. 4. On va empêcher l’accès SSH à m2 depuis la VM XP. Pour cela, sur m2 éditer le fichier /etc/hosts.deny et y ajouter la ligne : sshd : 10.0.2.100 5. Sur la VM XP, utiliser à nouveau Putty pour tenter d’accéder à m2 en SSH. Cette fois, ce ne devrait pas être possible. C. Pain-Barre - 23/12/2014 IUT Aix-Marseille - INFO Aix 31/31 Enonc´e du TP 2 UE31 - M3102 : Services R´eseaux 6. Vérifier que l’accès SSH sur m2 depuis m1 reste possible, puis terminer aussitôt la session SSH. 7. Sur la VM XP, configurer Putty de la manière suivante : • dans la partie Host Name, mettre l’adresse de m1 car on va y ouvrir une session SSH • dans le menu SSH −→ Tunnels, saisir : dans Source port : 20000 dans Destination : 10.0.2.10:22 puis cliquer sur Add. On vient de paramétrer une rediction de port local vers le serveur SSH de m2. . . • Cliquer sur Open, ce qui va établir une connexion SSH sur m1, et s’y loger. 8. Tout en gardant cette connexion SSH, ouvrir à nouveau Putty sur la VM XP et le paramétrer avec : • Host name : localhost • Port : 20000 puis cliquer sur Open. Cette fois, on ouvre une session SSH sur m2 ! Pouvez-vous expliquer ce qui s’est passé, alors qu’on n’avait pas accès au serveur SSH de m2 depuis la VM XP ? 9. La configuration du serveur SSH de m2 se fait en éditant le fichier /etc/ssh/sshd_config. Parcourir son contenu. Utiliser le man de sshd_config afin de déterminer quelle directive empêche l’authentification par mot de passe (indice : il y Password dans son nom. . .). [Corrigé] Exercice 13 (Service HTTP sur m2 et tunneling SSH) 1. Sur m2, éditer le fichier /etc/apache2/apache2.conf et y ajouter la directive suivante : <Location /> Order deny,allow Deny from 10.0.2.100 </Location> Qui empêchera l’accès au serveur Web de m2 depuis la VM XP 2. Toujours sur m2, démarrer le serveur Web en tapant : # /etc/init.d/apache2 start 3. Sur m1, taper : # lynx 10.0.2.10 pour s’assurer que le serveur Web de m2 est opérationnel 4. Sur la VM XP, ouvrir un navigateur et tenter d’accéder au site http://10.0.2.10. Ce ne devrait pas être possible. Si le site s’affiche quand même, soit vous n’avez pas modifié correctement la configuration d’apache sur m2, soit vous avez accédé au site depuis la VM Windows avant que cela soit empêché par la configuration d’apache, et le site est stocké dans le cache du navigateur. Dans ce dernier cas, vider le cache du navigateur et retenter de charger la page. . . 5. Sur la VM XP, utiliser les possibilités offertes par SSH (et Putty) afin de contourner ces restrictions. [Corrigé] IUT Aix-Marseille - INFO Aix 23/12/2014 - C. Pain-Barre
© Copyright 2024 Paperzz