Le Secure SHell UNIX

Ce document est inspiré des pages web de l'INRIA


Table des matières



Introduction

Ce document décrit le fonctionnement du service SSH mis en place sur le site de l'ISC.

Ce document n'est pas une documentation sur ssh, ou un subsitut aux nombreuses ressources sur SSH accessibles sur Internet, parmi lesquelles:

Elle n'est pas non plus une page de manuel ssh pour les clients Windows, MacOS9 ou antérieur. Vous trouverez leurs documentations sur les sites respectifs des clients. Elle se focalise sur UNIX, donc les Linux, FreeBSD et Mac OS X (qui est un UNIX BSD) où ssh fonctionne en mode terminal. L'utilisation et la configuration des utilitaires en environnement graphique (comme Fugu pour MacOS X) ne seront pas décrites ici.
Merci à la Free Software Foundation d'avoir effectué les démarches auprès de la DCSSI pour l'import et l'utilisation de openssl (brique cryptographique de base de openssh) en France.

Choix de déploiement

Les choix de déploiement sont les suivants:

  • L'ISC dispose d'un seul point d'accès SSH, c'est donc un service "centralisé". Le serveur SSH se nomme : "ssh.isc.cnrs.fr".
  • Les seuls modes d'authentification autorisés de l'exterieur sont :
    • l'authentification par clé RSA dont les conséquences/prérequis techniques seront détaillés dans un paragraphe suivant. 
    • l'authentification à mot de passe unique qui n'est pas une fonctionnalité de SSH mais du serveur ajoutée par l'administrateur du site. 
  • Les accès SSH en mode console sont limités en fonctionnalités.
  • Le serveur autorise les transferts de fichiers par sftp et scp.
  • La redirection de port ne fonctionne que vers l'interne.
  • Il est interdit d'effectuer une connection ssh depuis le serveur.

Les conditions NECESSAIRES pour que ssh fonctionne

Pour que vos connexions ssh soient possibles vous devez :

  1. Avoir un compte sur le serveur de mail de l'ISC
  2. Avoir suivi mis en fonctionnement l'authentification à mot de passe unique ou que les conditions suivantes doivent être respectées:
    •   Vous devez avoir généré un couple de clés (clé publique / clé privée)
    •   La clé publique doit être sur le serveur SSH (dans le fichier ~/.ssh/authorized_keys)
    •   La clé privée doit être sur le client (dans le fichier ~/.ssh/id_rsa.pub)
    •   Le client doit permettre de faire une authentification par clé publique/clé privée
    •   Vous devez fournir le bon nom d'utilisateur au serveur, si votre login n'est pas le même sur le client et sur le serveur

Si une seule de ces conditions n'est pas respectée, alors la session ssh se terminera sur un message de type "Permission denied".

Approche pratique

Nous allons expliquer comment établir les 3 premières conditions. Les conditions 4 et 5 peuvent être forcées par des options de lancement de ssh comme expliqué dans le paragraphe sur les options de lancement.

En suivant ces exemples pas à pas, vous devriez être capable d'utiliser le serveur ssh

Création d'un couple de clés (clé publique, clé privée) à l'aide de la commande ssh-keygen

votre-console-UNIX-%  ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/home/USER/.ssh/id_rsa): Appuyer sur Entrée
Created directory '/home/USER/.ssh'.
Enter passphrase (empty for no passphrase): ATTENTION: ce mot de passe doit être TRES sûr !
Enter same passphrase again: Le même mot de passe
Your identification has been saved in /home/USER/.ssh/id_rsa.
Your public key has been saved in /home/USER/.ssh/id_rsa.pub.
The key fingerprint is:
11:22:33:44:55:66:78:90:aa:bb:cd:ef:34:54:23:43 USER@votre-UNIX
votre-console-UNIX-%

      Vous venez de génére une clé publique (fichier ~/.ssh/id_rsa.pub) et une clé privée (~/.ssh/id_rsa) sur votre machine. La clé publique est en clair et peut être propagée partout où vous en avez besoin, en particulier sur le serveur ssh.isc.cnrs.fr. C'est la présence de cette clé privée sur la machine d'où vous vous connectez qui vous permettra d'accéder au serveur SSH.

Corrolaires :

  1. Pas de clé privée sur le client ou pas de clef publique sur le serveur = pas de connexion !
  2. La clé privée est une donnée sensible que vous seul(e) devez pouvoir accéder. C'est pourquoi elle est stockée de manière chiffrée sur le disque dur.
  3. Protégez toujours votre clé privée par un password de bonne qualité.
  4. Ne laissez pas traîner des clés privées derrière vous.

Le password que la commande ssh-keygen vous demande est celui qui permet de chiffrer/déchiffrer cette clé.

Ce password doit être le plus complexe possible et surtout être différent de votre autres mots de passes unix (sur le site ou ailleurs). La protection de votre compte et donc du site en dépend.

Dépot de la clé publique sur le serveur SSH

      Il faut maintenant déposer la clé publique de ce couple de clés dans votre sur le serveur SSH. Cette opération ne peut se faire que si vous avez déjà un accès au serveur, par l'authentification par mot de passe unique ou à l'aide du compte mail si vous vous connectez depuis un poste du réseau interne de l'ISC.

Par exemple depuis une connection interne :
votre-console-UNIX-% ssh -tl votreloginmail ssh.isc.cnrs.fr "umask 077 ; mkdir -p .ssh/ ;"
The authenticity of host 'ssh.isc.cnrs.fr (195.220.109.20)' can't be established.
RSA key fingerprint is 5a:80:3c:21:61:5a:9d:2a:00:6d:c1:94:0a:5d:c8:99.
Are you sure you want to continue connecting (yes/no)? yes puis Entrée
votre-console-UNIX-% scp ~/.ssh/id_rsa.pub votreloginmail@ssh.isc.cnrs.fr:.ssh/authorized_keys2
id_rsa.pub 100% 223 0.2KB/s 00:00
votre-console-UNIX-%
Autre exemple d'une connection via skey depuis l'extérieur, vous ajoutez le suffixe ":skey" a votre login et utilisez les fonctionnalités des pipes UNIX :
votre-console-UNIX-% cat ~save/.ssh/id_rsa.pub | \
 ssh -tl votreloginmail:skey ssh.isc.cnrs.fr \
"umask 077 ; mkdir -p .ssh/ ; cat >>.ssh/authorized_keys2 ; ls -al .ssh"
Pseudo-terminal will not be allocated because stdin is not a terminal.
otp-md5 92 meri09476
S/Key Password: JUNK THIS IUSE WHAT TIME LAST
total 16
drwx------ 2 maurin-test users 512 Jan 1 17:57 .
drwxr-xr-x 4 maurin-test users 512 Jan 1 17:57 ..
-rw------- 1 maurin-test users 223 Jan 1 18:10 authorized_keys2
votre-console-UNIX-%

Se connecter sur le serveur SSH

Vous avez maintenant initialisé toute la mécanique pour utiliser les commandes ssh:

  • ssh: connexion ou lancement de commande à distance
  • sftp: ftp sécurisé
  • scp: copie de fichiers sécurisée

Exemple de première utilisation

votre-console-UNIX-% ssh -l votreloginmail ssh.isc.cnrs.fr
The authenticity of host 'ssh.isc.cnrs.fr (195.220.109.20)' can't be established.
RSA key fingerprint is 5a:80:3c:21:61:5a:9d:2a:00:6d:c1:94:0a:5d:c8:99.
Are you sure you want to continue connecting (yes/no)? yes puis Entrée
Warning: Permanently added 'ssh.isc.cnrs.fr (195.220.109.20)' (RSA) to the list of known hosts.
Enter passphrase for key '/home/USER/.ssh/id_rsa': votre password
Last login: Sun Jan 1 01:01:01 2001 from MONUNIX.isc.cnrs.fr
Welcome to ISC Secure SHell server

You are allowed to use this service if you
sent a signed copy of CNRS's computer chart to :
INSTITUT DES SCIENCES COGNITIVES CNRS/UCBL UMR5015
Service informatique Sylvain MAURIN, B112
67 bd. Pinel - 69675 BRON Cedex
Fax : +33 437911210

You will find usage documentations at :
http://www.isc.cnrs.fr/informatique/ssh/
And manuals at :
http://www.openbsd.org/cgi-bin/man.cgi

ssh.isc.cnrs.fr:~$

Fonctionnalités avancées

Tunnelling d'une session VNC

On suppose qu'il existe un serveur VNC sur le réseau interne (le serveur VNC est généralement celui de votre équipe, mais pas forcément).

votre-console-UNIX-% ssh -l votreloginmail -L5900:SERVEUR-VNC.isc.cnrs.fr:5900 ssh.isc.cnrs.fr
Enter passphrase for key '/home/USER/.ssh/id_rsa': votre password
Last login: Sun Jan 1 01:01:01 2001 from MONUNIX.isc.cnrs.fr
Welcome to ISC Secure SHell server
[...]
ssh.isc.cnrs.fr:~$

La signification de la commande est: se connecter sur le serveur ssh.isc.cnrs.fr, et installer un tunnel entre SERVEUR-VNC:5900 (serveur VNC interne), vers le port local 5900 de la machine executant 'votre-console-UNIX-%'.

Le serveur-SSH ne sert que de relai chiffrant.

Pour acceder au server VNC distant, il suffit maintent de vous connecter localement avec le client VNC : 

votre-console-UNIX-% xvncviewer localhost

Les seules contraintes du point de vue de l'utilisateur sont:

  1. De ne pas avoir de serveur VNC lancé sur le poste client (ou c'est celui-ci qui serait contacté au lieu du serveur VNC de l'ISC,
  2. De s'assurer que le serveur VNC accepte des sessions sur le port 5900 (port par defaut).
  3. De garder ouverte la fenetre de console ou est lance le client ssh pendant toute la durée d'utilisation du tunnel
Tunnelling vers le proxy web

Un proxy web est un serveur donnant un accès aux web avec une adresse de l'ISC. Cela autorise par exemple de consulter les ressources documentaires de l'IFNL ou d'accéder aux outils universitaires en Intran pour la gestion depuis votre poste client SSH.

Le tunnel ci-dessus a l'inconvénient d'obliger une reconfiguration son navigateur pour utiliser l'utilisation d'un proxy local (entrée du tunnel SSH).

votre-console-UNIX-% ssh -l votreloginmail -L3128:proxy.isc.cnrs.fr:3128 ssh.isc.cnrs.fr
Enter passphrase for key '/home/USER/.ssh/id_rsa': votre password

Last login: Sun Jan 1 01:01:01 2001 from MONUNIX.isc.cnrs.fr
[...]
ssh.isc.cnrs.fr:~$

La signification de la commande est: se connecter sur le serveur ssh.isc.cnrs.fr, et installer un tunnel depuis proxy.isc.cnrs.fr:3128 (proxy web de l'ISC), vers le port local 3128.

Pour utiliser ce tunnel, il suffit de configurer le proxy de son navigateur comme étant localhost:3128, puis d'utiliser les URL classiques: http://manager.isc.cnrs.fr/ (par exemple)

Utilisation de ssh-agent

ssh-agent est un proxy d'authentification, auquel peut s'adresser le client ssh (dans certaines conditions) pour simplifier la vie de l'utilisateur. En effet, grâce à ce proxy d'authentification, on ne tappe son password qu'une seule fois et ensuite toutes les sessions ssh seront complètement transparentes (sans password).
Attention: l'utilisation de ssh-agent doit être réservée dans les cas où on est complètement sûr de l'environnemenent de travail.

Exemple d'utilisation:

lancement de ssh agent (substituez bash par le nom de votre shell le cas échéant)

votre-console-UNIX-% ssh-agent bash
votre-console-UNIX-% (ceci est un sous shell lance dans le shell precedent !)

donnez la clé privée à ssh-agent:

votre-console-UNIX-% ssh-add
Enter passphrase for /home/USER/.ssh/id_rsa: votre password
Identity added: /home/USER/.ssh/id_rsa (/home/USER/.ssh/id_rsa)
votre-console-UNIX-%

connectez-vous sans retaper votre password:

votre-console-UNIX-% ssh ssh.isc.cnrs.fr
Last login: Sun Jan 1 01:01:01 2001 from MONUNIX.isc.cnrs.fr
Welcome to ISC Secure SHell server
[...]
ssh.isc.cnrs.fr:~$

En fait, seuls les processus fils afiliés avec ssh-agent pourront bénéficier de ce proxy d'authentification. Donc pour rendre les choses le plus transparent possible, on a intérêt à lancer le ssh-agent le plus tôt possible lors de sa session unix. Corrolaire, il est intéressant de le lancer dans les scripts de lancement de session X11 ou de votre profile de login.
Voici un exemple de fichier .xsession qui permet de le faire (à adapter si vous n'utilisez pas bash):

#!/bin/bash
#
# exemple de configuration initiale de l ecran sous X11
#
AGENT=/usr/local/openssh/bin/ssh-agent
[ "$ALREADY_IN_SSH" -a -f "$AGENT" ] || { export ALREADY_IN_SSH=TRUE ; exec $AGENT $0 ; }
. $HOME/.bash_profile
${KDEDIR}/bin/startkde 

On peut également supprimer sa clé privée de la mémoire du proxy ssh-agent:

votre-portable-% ssh-add -d 
Identity removed: /home/USER/.ssh/id_rsa (/home/USER/.ssh/id_rsa.pub)

Remarque pour windows :

Pour se connecter en ssh depuis une machine windows, il y a deux possibilités:

  1. Utiliser la suite cygwin, qui contient l'ensemble des commandes openssh. Dans ce cas, tout ce qui précede et qui concerne unix est valable également si le package openssh est installé. Il vous suffit donc de lire et d'appliquer les commandes définies ci-dessus. Attention : Cygwin est une couche d'émulation UNIX sous windows. Son utilisation sous-entend donc une bonne comprehension des systèmes UNIX.
  2. Utiliser les logiciels putty ou winscp qui sont diffusés en interne. Contrairement à cygwin/ssh, putty dispose d'un interface graphique de configuration et d'utilisation. L'ISC publie une page d'explication sur putty qui est un point de départ pour une utilisation simplifiée de ce logiciel.

Les dangers de ssh


L'utilisation de ssh n'est pas la panacée en matière de sécurité et il faut prendre quelques précautions d'usage.

Le point le plus important est:
Il ne faut jamais taper le password de déblocage de la clé RSA  ou la phrase secret de skey de manière non sûre. Il faut avoir une confiance absolue dans votre terminal et dans le logiciel ssh que vous utilisez. Ne jamais taper ce password à travers une session X (Xwin32 en windows, terminal X), ou une session distante non sécurisée (telnet, rlogin)...

ssh est sensible au type d'attaque "man in the middle", càd interception de la communication par un tiers. Commencez à réfléchir si vous avez le message d'erreur suivant:

votre-pconsole-UNIX-% ssh ssh.isc.cnrs.fr
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@ WARNING: HOST IDENTIFICATION HAS CHANGED! @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
IT IS POSSIBLE THAT SOMEONE IS DOING SOMETHING NASTY!
Someone could be eavesdropping on you right now (man-in-the-middle attack)!
It is also possible that the host key has just been changed.
Please contact your system administrator.
Add correct host key in /home/USER/.ssh/known_hosts to get rid of this message.
Agent forwarding is disabled to avoid attacks by corrupted servers.
X11 forwarding is disabled to avoid attacks by corrupted servers.

Comme indiqué dans le message, ssh vient de se rendre compte que la clé d'authentification RSA du serveur a changé, ce qui peut signifier deux choses:

  • le serveur a réellement changé de clé, mais l'administrateur du serveur devrait le savoir (le contacter donc)
  • quelqu'un essaie de se faire passer pour le véritable serveur (IP spoofing): dans ce cas, la consigne est évidemment de ne pas se connecter (là encore, contacter l'administrateur du vrai serveur)

Remarque:

Il y a quelques lacunes dans la gestion de tout ceci. Le serveur se rend compte que quelque chose a changé, car il a stocké les clés publiques des serveurs lors des connexions passées. Il y a donc une petite plage de vulnérabilité lors de la première connexion, qui est acceptée sans vérification (et pour cause). De même, si vous (ou quelqu'un d'autre) détruisez le fichier ssh.isc.cnrs.fr:~/.ssh/known_hosts, vous devenez vulnérable lors de la première connexion.

On voit donc bien que ssh est un produit qu'il faut faire tourner depuis des machines de confiance (il faut que l'utilisateur ait confiance dans le contenu de ~/.ssh/known_hosts).

Quelques options de lancement de ssh

L'option magique de debug est l'option -v qui permet de mettre ssh en mode verbose est est très utile pour traquer les problèmes de connexion.

Sinon, les autres options de lancement du client ssh sont définies dans un fichier de configuration globale (généralement /etc/ssh/ssh_config sur unix). Ce fichier a pour seule rôle de simplifier la vie des utilisateurs de ssh, donc généralement il valide les options les plus utiles de ssh (tunelling X11, etc,..).

Il est néanmoins possible qu'une option utile de ssh soit dévalidée dans ce fichier, auquel cas, il faut forcer l'option au lancement de ssh. Il faut faire man ssh pour savoir toutes les options utiles, on peut néanmoins citer les plus courantes comme:

  •     -l votreloginmail : permet d'utiliser le nom de login monvrainom sur le serveur
  •     -C : force la compression des données

Il est également possible de fournir des options plus complexes à ssh. Par exemple:

  •     -o 'RSAAuthentication yes' : qui permet l'authentification par clé publique/clé privée si cette option n'est pas configurée par défaut sur le client.

Institut des Sciences Cognitives UMR 5015 CNRS UCB Lyon 1
67, boulevard Pinel 69675 BRON cedex

Tél: 04 37 91 12 16 Fax: 04 37 91 12 10 Mail: web@isc.cnrs.fr

Accueil ISC Informatique SSH