TP SSH - ENSEEIHT

publicité
Anas Abou El Kalam
Sécurité
SSH
SSH
1 Introduction
La possibilité de travailler .à distance. a toujours été une fonctionnalité très
appréciée des utilisateurs de machines UNIX. Cela est traditionnellement possible
suivant plusieurs modes de connexion: telnet, rlogin, rsh, ftp, ...
Le gros problème avec ces modes de connexions c'est que l'authentication que
vous devez fournir pour vous connecter sur la machine distante circule .en clair.
sur le réseau. C'est à dire que n'importe quelle personne qui a accès au réseau où
vous vous trouver peut à l'aide de programmes appelés .sniffeurs. récupéré votre
mot de passe.
2 Versions disponibles
Il existe un certain nombres de logiciels utilisant les connexions sécurisées.

Une version UNIX openssh : contient les partie serveurs et clientes de ssh

Une version Windows putty : contient une partie cliente pour Windows.
3 Principes de fonctionnement.
ssh est basé sur un mécanisme de clé publique clé privé. Ces deux clés
sont .mathématiquement reliée. Typiquement la clé publique sert à chiffrer un
message et la clé privé sert à le déchiffrer. Prenons un exemple.
Si je veux me connecter sur la machine distante java, je tape
ssh java
J'obtiens alors le message suivant :
The authenticity of host 'java (157.159.15.20)' can't be established.
RSA key fingerprint is
d7 :69 :a7 :db :89 :71 :ff :13 :54 :ce :b4 :0d :55 :f6 :a9 :04.
Are you sure you want to continue connecting
(yes/no)? yes
Comme je ne me suis jamais connecté sur la machine java je ne connais pas sa clé
publique. Je vais donc répondre yes. J'obtiens alors les messages suivants :
Warning : Permanently added 'java,157.159.15.20' (RSA)
to the list of known hosts.
[email protected]'s password :
Je rentre alors mon mot de passe qui va être chiffré avec la clé publique de la
machine java. La machine java va utilisé sa clé privée pour déchiffrer le mot de
passe et ainsi va pouvoir vérier mon identité. On ne peux donc pas me .sniffer.
mon mot de passe.
Si je me Re connecte sur java j'obtiens immédiatement la ligne
[email protected]'s password :
Anas Abou El Kalam
Sécurité
SSH
4 Ne plus rentrer son mot de passe
On peut aller encore plus loin et générer des clés d'identication personnelle. Le
principe est de générer une clé associée à un texte et de propager la partie
publique de la clé sur toutes les machines auxquelles vous souhaitez vous
connecter. Voici comment il faut procéder si vous voulez vous connecter d'une
machine (e.g., nommé rezo)sur la machine distante java.
4.1 Première étape
Sur la machine rezo il faut générer les clés d'authentication. Ces clés sont liées à
un compte particulier. On va donc créer ces clés pour notre compte courant. Nous
allons donc travailler avec le compte grocanar. Cela se fait en tapant la commande
ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/home/grocanar/.ssh/id_rsa) :
Enter passphrase (empty for no passphrase) :
On doit donc alors entrer une .passphrase. qui va protéger la clé privée générée. Il
faut que cette phrase ait au moins 20 caractères.
Même si il est possible de ne pas rentrer cette pass phrase cela n'est pas du tout
conseillé. En effet c'est le seul moyen de protéger vos clés si quelqu'un arrive à
accéder à votre compte.
Après avoir tapé deux fois cette phrase on obtient alors les messages suivants :
Enter same passphrase again :
Your identification has been saved in /home/grocanar/.ssh/id_rsa.
Your public key has been saved in
/home/grocanar/.ssh/id_rsa.pub.
The key fingerprint is :
ea :9c :c8 :0f :89 :5a :12 :52 :81 :3e :c1 :21 :0e :fd :37 :07
[email protected]
On voit donc que le clé privée est sauvegardée dans le chier .ssh/id_rsa et la clé
publique dans le chier .ssh/id_rsa.pub
4.2 Deuxième étape
Sur la machine java on va créer le fichier authorized_keys dans le répertoire .ssh et
l'onva y rajouter la clé publique de la machine zero avec un simple éditeur de
texte. On complique un peu la chose en utilisant un compte différent sur la
machine java. en effet on va utiliser le compte toto
4.3 Étape nale : la connexion
Anas Abou El Kalam
Sécurité
SSH
On va donc maintenant se connecter à distance sur la machine java en tapant
ssh toto@java
On obtient alors le message suivant :
Enter passphrase for key '/home/grocanar/.ssh/id_rsa' :
On rentre alors la .pass phrase. que l'on a utilisé pour .protéger. la clé privée.
5 Ne plus rentrer la pass phrase.
5.1 Problématique
Dans la manipulation décrite ci dessus on a perdu en simplicité d'utilisation. En
effet au lieu de rentrer son login et mot de passe, on dois donner son login et
sa .pass phrase. Cette opération est bien plus longue que l'opération habituelle.
Il existe un moyen de s'affranchir de ces opérations qui peuvent s'avérer
fastidieuse si on multiplie les connexions distantes : ssh-agent et sh-add
5.2 Principes
ssh-agent est un démon dont le rôle est :

. Intercepter la clé privée lorsque le programme ssh-add l'aura déchifré en
utilisant la passphrase que vous allez rentrer une et une seule fois.

. La transmettre à tous programmes dont il sera l'ancêtre et qui le lui
demandera. On verra que cette contrainte de .descendance UNIX. amène a
certaines contraintes de mise en place.
Ainsi vous n'avez plus qu'a rentrer une seule fois votre passphrase à votre
connexion initiale sur la machine et vous n'avez plus besoin de la rentrer lors de
vos connexions sur d'autres machines.
5.3 Mise en place pratique
Dans cet exemple de mise en place je prends l'exemple d'une machine Linux
utilisant une distribution RedHat 7.3 ou ultérieur avec un environnement Gnome.
Cela donne néanmoins une idée générale sur la manière de procéder.

Aller dans le menu principal symbolisé par un chapeau rouge.

Sélectionnez le menu Préférences => Préférences supplémentaires => Sessions

On obtient alors une fenêtre comme ci dessous (voir 1)

Il faut alors cliquer sur le menu Programme au démarrage.



On obtient alors la fenêtre suivante (voir 2)
Il faut alors rentrer la commande /usr/bin/ssh-add dans le champs Commande
de démarrage
et ajuster la priorité (champs ordre) afin que cette commande ait la plus
grande valeur. Une bonne valeur est 70. On obtient alors la fenêtre (voir3).
5.4 Utilisation
L'utilisation est alors très simple. A la connexion une fenêtre s'ouvre et demande
Anas Abou El Kalam
Sécurité
SSH
de rentrer la .passphrase. (voir 4). Une fois celle ci tapée la session se déroule
normalement et on ne demandera plus la passphrase ni de mot de passe pour
toutes les connexions sur les machines où l'on a propagé sa clé publique.
Anas Abou El Kalam
Sécurité
SSH
6 Le clientWindows
Putt peut être téléchargée à partir de
http://www.chiark.greenend.org.uk/~sgtatham/putty/download.html
Normalement, celui ci intégre plusieurs composants :

putty un émulateur terminal compatible ssh

puttygen Un générateur de clé

psftp un client ftp compatible ssh

pageant un équivalent à ssh-agent
7.1 Génération des clés
La génération des clés se fait avec puttygen.
On lance le logiciel et on obtient la fenêtre suivante (voir 5). On doit alors générer
la clé en faisant bien attention de générer une clé SSH2(DSA) de 1024 bits. On
clique alors sur Generate. On obtient alors la fenêtre suivante (voir 6).
Anas Abou El Kalam

Sécurité
SSH
. copier et coller dans le chier authorized_keys comme on a vu pour unix. En
particulier notez bien que l'indication donné par putty est fausse. Le fichier à

modier est authorized_keys et non pas authorized_keys2

. Entrez une pass phrase pour protéger sa clé privée

. Sauvegardez ses clés publiques et privées.
6.2 Conguration de l'agent ssh
l'agent ssh est le logiciel pageant (PuTTY authentication agent). Quand on lance
celui ci il va se nicher dans la barre des applications. Il faut alors aller cliquer
dessus pour l'utiliser. On obtient alors la fenêtre suivante (voir 7)
On clique alors sur Add key et on ajoute la clé privé que l'on a précedement
sauvegardé. On obtient alors la fenêtre suivante (voir 8)
Anas Abou El Kalam
Sécurité
SSH
Il faut donc alors rentrez la pass-phrase qui protège notre clé privée (voir 9).
6.3 Conguration de putty
On va maintenant passer à la conguration de putty. Il faut noter qu'il est
préférable de lancer putty à partir de pageant.
On configure d'abord le protocole ssh utilisé (voir 10). Puis la clé utilisée (voir11 )
Voici alors la fenêtre de connexion de putty (voir 12).
On se connecte alors au serveur sans rentrer son mot de passe.
Ouf ! ! !
Il est préférable de sauvegarder la conguration que l'on va appeler comme le
serveur sur lequel on se connecte ; On va donc sauvegarder tout cela dans la
congfiuration java. (voir13)
Anas Abou El Kalam
Sécurité
SSH
Anas Abou El Kalam
Sécurité
SSH
-.4 Importation des clés
Il peut être intéréssant de ne pas multiplier le couple de clés privées publiques sur
les différents systèmes sur lesquelles on va travailler. En particulier si on doit
travailler sous windows et linux depuis la même machine il est un peu ridicule de
générer deux couples de clés. On va donc montrer ici comment importer dans
puttygen la clé privé précédement généré avec openssh.
On lance puttygen et on obtient la fenêtre de gestion de clé (voir 14)
Il suft alors de cliquer sur load. On charge alors le chier la clé privée générée par
openssh que l'on aura préalablement transféré par un moyen adéquat et alors on
obtient une clé privé tout a fait utilisable dans putty comme montrée
précedement.
Anas Abou El Kalam
Sécurité
SSH
7 SSH le tunnel du pauvre
SSH est souvent appelé le .tunnel du pauvre. car il permet à un utilisateur donné
de pallier pour la majorité des fonctionnalités à l'usage d'un VPN.
7.1 Principe
On part du principe que l'on a accèes a une connexion sur un serveur ssh
accessible depuis sa machine et que l'on veut acceder à un service sur son réseau
interne mais que le firewall l'interdit directement pour des raisons de sécurité.
On va pouvoir grace à ssh .contourner. cette interdiction mais en toute sécurité.
Ce n'est donc pas un contournement de la sécurité.
Voici ce qui se passe quand un portable sur internet crée un tunnel sécurisé
depuis internet pour accéder à un serveur FTP sur l'intranet (voir15)
On procéde en deux étapes.

On crée un tunnel ssh entre le portable et le serveur ssh librement
accessible.

On utilise un client FTP .classique. pour accéder au serveur FTP qui n'est pas
directement accessible et on a tout le confort .comme si on y accédait
directement.
Anas Abou El Kalam
Sécurité
SSH
8.2 Exemple sous linux
Nous imaginons qu'un utilisateur nomade a besoin d'acceder à un serveur qui se
trouve dans l'ENSEEIHT, par exemple pollux depuis son portable qui s'appelle rezo.
Evidement l'adminstrateur ne tolère pas à juste titre que des connexions passent à
travers internet sur cette machine.
Par contre Il peut se connecter en ssh sur la machine java depuis n'importe quelle
point de l'internet.
On va donc creer un tunnel ssh entre la machine rezo et java afin de pouvoir se
connecter en telnet sur pollux. Evidement il faut que le réseau entre la machine
java et pollux soit sécurisé.
pour que la démonstration soit valable.
On tape donc dans une fenêtre la commande suivante
ssh -N -L2023 :pollux.enseeiht.fr :23 [email protected]
Si on a scrupuleusement suivi les directives présentées dans les chapitres
précédents on ne doit recevoir aucun message. Le tunnel est en place. On
remarque que le port local du tunnel est 2023 . On ne peut en effet créer de
tunnel avec un numéro de port inférieur à 1024 si on n'est pas super utilisateur.
On tape alors sur la machine locale
telnet 127.0.0.1 2023
Trying 127.0.0.1...
Connected to 127.0.0.1.
Escape character is '^]'.
SunOS 5.7
login : toto
Password : *********
Last login : Mon Nov 17 17 :16 :45 from java.enseeiht.
...
On a pu donc accéder au service telnet sur une machine qui n'était pas accessible
Anas Abou El Kalam
Sécurité
SSH
directement et en toute sécurité.
7.3 Exemple sous windows
Nous allons utiliser la conguration précédente sauvegardée sous le nom de java et
y rajouter deux tunnels.

. Un tunnel pour faire du FTP sur la machine pollux

. Un tunnel pour faire du telnet sur la machine pollux
Voici les différents étapes
7.3.1 Création des tunnels
On crée les tunnels de la façon suivante :



. Il faut choisir un port local : 2021
. On choisit la destination Unemachine.enseeiht.fr :21
. On coche local

. On clique sur Add

. On répete la même opération pour le tunnel pour telnet

. On sauvegarde la conguration dans le menu Session
7.3.2 Création du tunnel
Une fois conguré on va lancer pageant. On effectue les opérations decrites
auparavant. On lance alors la session java.
Le tunnel est crée. On va pouvoir l'utiliser.
7.3.3 Telnet
On lance le telnet comme ci dessous (voir 18)
Comme on le voit on se connecte au port local du tunnel. En l'occurence c'est le
port 2023.
7.3.4 ftp
on va utiliser le logiciel lezilla. Celui nécéssite quand même une certaine
conguration. On va donc lancer le gestionnaire de site sur de lezilla. On obtient la
fenêtre suivante : (voir 20).
On constate qu'on rentre l'adresse de l'extrémité locale du tunnel ssh comme
adresse de destination. En l'occurence localhost pour la nom de machine et 2021
pour le port. On clique alors sur le bouton Avancé. On obtient alors la fenêtre
suivante : (voir 21). On indique qu'on veut utiliser le mode passif pour se
connecter. Tout est alors prêt.
Anas Abou El Kalam
Sécurité
SSH
On lance lezilla en sélectionnant le site que l'on vient de sauvegarder et on obtient
la fenêtre suivante : (voir 21)
Téléchargement