Documente Academic
Documente Profesional
Documente Cultură
De lutilisateur ladministrateur
Version novembre 2008
F. Bongat [fbongat@lmd.ens.fr]
Prsentation
Remplace : rcp, rlogin, rsh, telnet (ftp par sftp en SSH V2)
SSH chiffre et compresse un canal de communication qui scurise les donnes transmises (permet dviter les sniffers rseaux) Non seulement le mot de passe est chiffr lors de la connexion mais les informations circulant sur le rseau entre les deux machines le sont aussi.
Prsentation
Terminologie de SSH :
Cest un protocole c'est--dire cest une mthode standard permettant des machines d'tablir une communication scurise dclin en 2 versions : Version 1 et version 2 : le protocole v1 possdait une faille permettant un pirate d'insrer des donnes dans le flux chiffr Cest aussi un produit : SSH Communications Security Inc (V1 et V2) Initialement dvelopp par Tatu Ylnen (payant) dernire version gratuite v1.2.12 OpenSSH du projet OpenBSD (V1 et V2) apparat en 1999, aujourdhui cest le plus utilis Produit en accord avec la lgislation franaise sur la cryptographie
http://www.ssi.gouv.fr/fr/reglementation/index.html#produits_crypto
Prsentation
OpenSSH
Prsentation
Serveur : sshd Clients : ssh, scp, sftp (ssh = slogin) Des outils de gestion: ssh-add, ssh-agent, ssh-keygen, sshkeyscan Les fichiers de configuration (OpenSSH) sont souvent dans:
Pour le serveur : /etc/ssh Pour les clients : /etc/ssh et $HOME/.ssh
Prsentation
Repose sur les algorithmes d'OpenSSL Algorithmes asymtriques: RSA et DSA Algorithmes symtriques: 3DES, Blowfish, AES, Arcfour ...
SSH
Client
Serveur S divulguent les versions de protocoles autoriss Port 22 C envoie la version de protocole choisie S transmet la liste des informations paramtres (chiffrement, authentification, compression etc) et transmet aussi sa cl publique, cl de session et octets de contrle C envoie S sa cl de session chiffre avec la cl publique de S et lalgorithme utilis S dchiffre la cl de session puis envoie un message de confirmation chiffr avec la cl de session reue de C Fin de la phase de lauthentification du serveur
Prsentation
Le principe dauthentification du serveur se fait par chiffrement cl publique du protocole SSH. Le client doit donc connatre la cl publique du serveur sur lequel il veut se connecter avant toute connexion. Ainsi, il existe un mcanisme pour la machine cliente pour stocker les cls d'un serveur afin de les rutiliser ensuite; Il pourra ainsi vrifier la cl d'un serveur chaque nouvelle connexion avec celle enregistre lors de la premire connexion; Cela permet d'viter les attaques du type man-in-the-middle
Prsentation
Une fois que la connexion scurise est mise en place entre le client et le serveur, le client doit s'identifier sur le serveur afin d'obtenir un droit d'accs.
Par mot de passe: Le client envoie un nom d'utilisateur et un mot de passe au serveur au travers de la communication scuris et le serveur vrifie si l'utilisateur concern a accs la machine et si le mot de passe fourni est valide Par cls publiques : Si l'authentification par cl est choisie par le client, le serveur va crer un challenge et donner un accs au client si ce dernier parvient dchiffrer le challenge avec sa cl prive Par hte de confiance : systme quivalent aux systmes utilisant rhost ou hosts.equiv en utilisant les cls publiques des serveurs Et aussi par Kerberos, SmartCard, PAM
Prsentation
Le support d'un protocole de VPN est une fonctionnalit apparue rcemment dans OpenSSH. Le principe est le mme que pour OpenVPN mais il est bas sur le protocole SSH (diffrents des tunnels TCP SSH) Supporte les interfaces rseaux virtuelles Tun/Tap (niveau 3/niveau 2) Option activer du ct serveur : PermitTunnel
10
Prsentation
Chaque processus lors de son excution ne possde que les privilges ncessaires, et na alors accs quaux lments ncessaires son excution
chroot est une commande des systmes d'exploitation UNIX permettant de changer pour un programme le rpertoire racine de la machine hte Cette commande permet d'isoler l'excution d'un programme et d'viter ainsi certaines malveillances
exemple: l'exploitation d'un dpassement de tampon, pour ensuite accder au rpertoire racine de la machine hte.
11
Prsentation
12
Prsentation
OpenSSH intgre la directive ChrootDirectory permettant de chrooter dans un rpertoire aprs la connexion. Cette fonctionnalit est principalement utilise pour du SFTP on peu parfaitement configurer l'ensemble pour les utilisateurs SSH Il faut construire l'environnement ncessaire
13
Prsentation
SSH Tectia
SSH Secure Shell for Workstation (nom du produit) http://www.ssh.com/support/downloads/secureshellwks/non-commercial.html Seul le client Tectia 3 (ex-ssh.com) est gratuit, les versions Tectia sont payantes. Inconvnient de la version gratuite : le module de connexion base de certificats X509 est dsactiv ainsi que le transfert dagent Clients regroupant toutes les commandes connues sous OpenSSH http://www.chiark.greenend.org.uk/~sgtatham/putty/download.html Outil graphique de transfert de fichiers (scp/sftp, donc pas de ssh) trs performant http://winscp.net/eng/docs/lang:fr/ http://www.cygwin.com/ sshd aussi disponible seul sans lenvironnement Cygwin complet (attention au problmes de scurit lis ce serveur moins robuste)
Putty
Winscp (v3)
14
Prsentation
Mac
MacOS 9 et infrieur :
client nifty-telnet (v1 uniquement) http://www.lysator.liu.se/~jonasw/freeware/niftyssh/ clients/serveur natifs (OpenSSH) fugu : outil graphique de transfert de fichiers http://www.columbia.edu/acis/software/fugu/
MacOS X :
Unix (tous)
OpenSSH
15
Ct client
SSH
vu du ct client
16
simple : ssh
: ssh login@machine_distante
*******
Ou
17
*******
simple : ssh
*******
18
Il est ncessaire de rpondre yes la question demande pour se connecter. En fait, il sagit dautoriser lenregistrement de la cl publique du serveur distant dans un fichier de configuration (known_hosts)
simple : ssh
dune commande shell distance
Ici on liste le contenu du rpertoire $HOME/bin sur la machine distante fantasio *******
Execution de la commande shell ls afin dafficher le $HOME/bin distant
19
Bote outils qui comprend un ssh, sftp, scp, ssh-agent et utilise des cls (compatibles avec les cls OpenSSH) 7 binaires ( ou un fichier zip) dont 5 indispensables (pageant, pscp, psftp,putty et enfin puttygen) copier (ou dcompresser) dans le dossier : C:\Program Files\PuTTY
20
21
pageant : agent dauthentification (voir chapitre authentification forte) plink : ssh en mode commande dans une console (~ Invite de Commande) pscp : scp en mode console psftp : sftp en mode console putty : ssh en mode graphique puttygen : gestion des cls en mode graphique puttytel : telnet en mode graphique (pas besoin !)
SSH
22
SSH
Ajout de la cl publique dans la base de registres (quivalent au fichier known_hosts) Rpondre oui pour passer la suite !
23
SSH
Taper le login aprs le prompt login as Puis entrer le mot de passe Connexion en ssh sur la machine distante avec PuTTY
24
*******
25
SFTP
Ouvrir une console Invite de commandes Tapper psftp dans cette fentre
psftp login@machine
26
! Si la commande nest pas trouve, rfrez vous la partie configuration avance pour configurer le PATH
scp
simple : scp
*******
*******
27
simple : scp
*******
Fichiers transfrs Et rpertoire cr % du transfert / Vitesse de transfert Taille transfre / Temps du transfert
28
SCP
Ouvrir une console Invite de commandes Tapper pscp dans cette fentre
29
! Si la commande nest pas trouve, rfrez vous la partie configuration avance pour configurer le PATH
Exemple : contenu du fichier config : Host fantas Hostname fantasio.bdnet User fbongat lors dune connexion ssh et que les comptes sur les 2 machines sont diffrents, on pourra grce la configuration ci-dessus faire: ssh fantas ( la place de ssh fbongat@fantasio.bdnet) qui renverra systmatiquement le user fbongat, ce qui permettra de ne plus spcifier lutilisateur avec les options -l ou @
30
31
Configuration avance
Utiliser le profile
le slectioner Puis le charger load
32
Ne pas configurer de variable $DISPLAY dans les scripts de connexion (.cshrc, .profile, .bashrc etc..), ssh doit remplir lui-mme cette valeur
Il est ncessaire davoir un serveur X11 sur la machine du client et de le mettre en fonctionnement Pour windows, il existe un serveur X11 gratuit, simple et efficace qui interagit trs bien avec PuTTY
Xming : http://freedesktop.org/wiki/Xming
Loption -X active lX11 en cas de non configuration de la variable ForwardX11 dans le fichier /etc/ssh/ssh_config : voir partie ct serveur
ssh X login@machine
33
Avec le client Windows, il faut spcifier le demande de redirection du traffic X11 Unix dans la session ssh Option : X11 Forwarding dans PuTTY :
Lancer putty Menu SSH Tunnels Cocher la case : Enable X11 forwarding
34
Noubliez pas sous Windows, il faut aussi lancer un mulateur X11 (Xming)
Ct serveur
SSH
vu du ct serveur
35
Ct serveur : sshd
Le serveur : sshd
36
Ct serveur : configuration
Configuration
sshd_config
du serveur : sshd
Fichiers de configuration :
: paramtrages lors des connexions vers le serveur local, ce fichier sapplique au dmon sshd : paramtrages base et gnral du client ssh, ce fichier sapplique donc pour les commandes ssh, scp, sftp
ssh_config
37
Ct serveur : sshd_config
Protocol : choix du protocole utiliser (initialiser de prfrence 2 ou si besoin dune compatibilit SSH V1, sshd_config laisser : 2,1) (partie 1) PermitRootLogin : autorise le compte root se connecter (de prfrence initialiser no) StrictModes yes : vrifie les permissions des fichiers et rpertoires importants (accs au propritaire uniquement) RSAAuthentication yes : mthode d'authentification par RSA uniquement en V1 et V2 PubkeyAuthentication yes : mthode dauthentification forte (rsa ou dsa) en V2 uniquement AuthorizedKeysFile .ssh/authorized_keys : nom et localisation du fichier de cls publiques individuelles sur les htes locaux.
38
Ct serveur : sshd_config
PasswordAuthentication yes : autorise la connexion par sshd_config mot de passe PermitEmptyPasswords no : interdit les connexions sans (partie 2) mot de passe X11Forwarding yes : active le transfert X pour sshd X11DisplayOffset 10 : rservation dun numro daffichage X11 afin dviter les collisions entre sshd et le vrai serveur X. X11UseLocalhost yes : bind sur linterface de la boucle locale, permet dviter les problmes de proxy Subsystem sftp /usr/lib/ssh/sftp-server : active le systme de transfert de fichiers via sftp
39
Ct serveur : sshd_config
Variables : AllowUsers et DenyUsers AllowGroups et DenyGroups Permettre l'accs certains utilisateurs et pas d'autres un accs ssh
Configuration pour autoriser les deux utilisateurs (fbongat et bob) et aucun autre se connecter en ssh: DenyUsers AllowUsers fbongat bob
40
Ct serveur : ssh_config
ssh_config
Host
* : spcifie les htes concerns par la configuration qui suit (adresse ip ou nom DNS, * = toutes) ForwardAgent yes : indique l'agent que lagent d'authentification doit tre renvoy vers la machine distante ForwardX11 yes : autorise la redirection du serveur graphique (possibilit de lancer des applications graphiques dans la session ssh) ForwardX11Trusted yes: noblige pas le client ssh crer un untrusted X cookie de sorte que les attaques sur la retransmission X11 ne puissent pas devenir des attaques des clients X11 depuis une machine distante
41
Ct serveur : ssh_config
ssh_config
VerifyHostKeyDNS
yes : Le client ssh peut vrifier la clef publique RSA/DSA dun serveur SSH laide du DNS yes/ask/no
StrictHostKeyChecking
42
no : automatise la gestion des cls dhtes dans known_hosts. Si la cl nexiste pas, la connexion ne sera pas refuse, et sera rajoute sans le demander lutilisateur (lutilisateur ne verra pas les changements de cls du serveur) ask : demande lutilisateur sil veut ajouter la cl dans le fichier known_hosts, puis permet la connexion, si la cl du serveur change, un message davertissement sera envoy (voir page 31) lutilisateur
Ct serveur : ssh_config
ssh_config
StrictHostKeyChecking
yes : vrifie que la cl publique de lhte distant existe sur lhte qui cherche se connecter et ensuite autorise la demande de connexion. Une non connaissance de la cl ou un changement de cl du serveur implique alors un chec de la connexion ssh Il faut donc fournir la cl publique du serveur distant la configuration cliente qui cherche se connecter /etc/ssh/ssh_known_hosts : base de donnes des cls dhte On ne peut donc pas se connecter la premire fois sans avoir la cl installe
43
Ct serveur : StrictHostKeyChecking
Exemple dune premire connexion un serveur
StrictHostKeyChecking ask
*******
StrictHostKeyChecking no Connexion avec message davertissement au dbut de la connexion
*******
StrictHostKeyChecking yes
44
Connexion chouant
Alerte lors dune connexion alors que la cl enregistr dans le fichier known_host nest plus la mme que celle du serveur sur lequel on cherche se connect
45
Dans le cas dun tel message dalerte, il est ncessaire de prvenir ladministrateur du serveur afin de vrifier si ce changement a bien t volontaire Ensuite afin de pouvoir se connecter, il faut supprimer lancienne cl dans le fichier .ssh/known_hosts, cest--dire la ligne avec le nom de lhte concern (pour tous les utilisateurs) La cl du 192.168.225.1 a chang, supprimer
cette ligne afin de ne plus avoir le message dalerte prcdent
Fichier : known_hosts
46
47
48
de cls du serveur
49
Alerte lors dune re-connexion alors que la cl du serveur a chang : Alerte pour tous les utilisateurs qui chercheront se connecter sur le serveur sshd
50
Ct serveur : gnralits
Toutes les communications ssh passent par ce port (ssh, scp, sftp, tunnels ...)
Mode debug :
Mode debug du serveur sshd : # sshd d Sur un port non privilgi : (pour des tests) # sshd d p 5555
Document sous Licence GFDL
51
Ct serveur : dmarrage/arrt
Lancement du serveur :
# /etc/init.d/sshd start (ou # service sshd start)
Arrt du serveur :
# /etc/init.d/sshd stop (ou # service sshd stop)
52
SSH
et lauthentification forte
53
Authentification forte
Base sur une procdure d'identification plus complexe et diffrente de celle des systmes Unix classiques (nom et mot de passe) Cette procdure repose sur un principe dune paire de cls publique/prive dont la cl prive est protge par une phrase didentification
ATTENTION ! la scurit de ssh par authentification forte repose alors sur la protection de la cl prive : il faut imprativement mettre une VRAI PHRASE DAUTHENTIFICATION (au moins 14 caractres) qui est en fait plus qu'un simple mot de passe, mais une vritable phrase (moins de limitation)
Permet lutilisation de caractres blancs (sparateur) et dautres, mais attention aux caractres utiliss cause des diffrents types de claviers afin de pouvoir taper la passe-phrase
L'utilisateur s'identifiera alors sans utiliser le mot de passe de la connexion classique (mot de passe Unix), qui lui circule sur le rseau, mais par sa phrase didentification sur lhte local
54
Authentification forte
Utilise un algorithme trs puissant pour le chiffrement (algorithme RSA/DSA) Ainsi chaque utilisateur possde son propre jeu de cls uniques (une cl prive = secrte, une cl publique = accessible par tous) une nouvelle connexion ncessite linstallation de la cl prive sur le client et de la cl publique sur le serveur le serveur va crer un challenge et donner un accs au client si ce dernier parvient dchiffrer le challenge avec sa cl prive
55
Commandes lies :
Cration
ssh-keygen Options : -t algorithme : choix de lalgorithme (rsa1, rsa et dsa) -p changer sa phrase didentification
Mise
Chargement
ssh-add
56
$HOME/.ssh
authorized_keys (ensemble des cls publiques sur la (ensemble des cls des serveurs utiliss)
57
*******
*******
On peut de la mme manire gnrer des cls avec un autre algorithme de cryptage : DSA
ssh-keygen t dsa
58
59
60
61
62
des cls
63
des cls
Problmatique de linstallation de la cl prive (id_rsa.pub) sur le serveur distant dans le fichier des cls (authorized_keys) :
Soit
transfrer la cl publique
On dispose de la cl publique sur la machine locale Il faut la transfrer et copier son contenu dans un fichier nomm authorized_keys sur la machine distante Ce fichier (authorized_keys) sur la machine distante va donc pouvoir contenir plusieurs cls publiques dutilisateurs
Soit
envoyer le fichier (cl publique) ladministrateur du serveur distant qui linstallera sur la machine
64
La cl prive ct client : identity ou id_rsa (id_dsa) La cl publique sur le serveur dans le fichier :
authorized_keys = cls publiques situes dans $HOME/.ssh
client
serveur
Puis dans $HOME/.ssh/ Faire : cat id_rsa.pub >> authorized_keys chmod 600 authorized_keys
65
installe la cl publique dans la liste des clefs autorises (authorized_keys) d'une machine distante
client
serveur
# ssh-copy-id serveur Transfrer la cl publique sur la machine distante dans $HOME/.ssh et le fichier authorized_keys directement
66
Pour activer lauthentification forte dun client vers un serveur lorsque celui-ci laisse tous les choix dauthentification, il suffit dans la configuration du client de configurer le fichier config
en spcifiant la variable PubkeyAuthentication ou RSAAuthentication dindiquer la cl prive utilise (avec son path)
67
Par
Phrase dauthentification
ssh :
Par
sftp :
68
ssh l f ~/.ssh/authorized_keys
69
70
71
PermitRootLogin no
Pour des besoins spcifiques, il est possible d'utiliser ce compte via ssh en forant l'utilisation de l'AF
PermitRootLogin without-password La connexion n'tabliera que si un cl publique de l'utilisateur est installe dans le compte root Cela vite les tentatives d'attaque ssh force brute sur le compte root
72
AF : ssh agent
Va permettre dinitier des connexions scurises en sauthentifiant quune seule fois (dbut dune session ou partir dun terminal), et ensuite de ne plus avoir redonner sa phrase dauthentification Seffectue en 2 phases :
Lancement dun agent avec la commande ssh-agent dans un shell # ssh-agent /bin/bash puis stockage en mmoire avec la commande ssh-add # ssh-add A partir de ce moment toutes les connexions lances de la fentre shell ou des xterm qui en dpendent, se font sans authentification supplmentaire.
73
74
Toutes les nouveaux terminaux lancs (xterm) partir du terminal dans lequel on a lanc lagent hrite de cette proprit
75
Ajout de lAF via les scripts shell de dmarrage linux Le programme keychain permet de rutiliser les instances de ssh-agent + ssh-add dans des sessions diffrentes et, si dsir, d'inviter l'utilisateur entrer les phrases de passe chaque ouverture de session.
Package installer sur linux keychain Lanc dans les scripts dinitialisation shell
/etc/profile.d/keychain.sh
76
ssh-agent lanc dans /etc/X11/Xsession (par dfaut rien faire) Script : ssh-add rajouter dans le rpertoire : $HOME/.kde/Autostart/
Script ssh-add
77
Autre mthode :
Via les menus : Prfrences Prfrences Supplmentaires Sessions puis longlet Programme au dmarrage Ou bien suivant les linux : Configuration GNOME Avanc Sessions et enfin longlet Programme au dmarrage
Ajouter un programme au dmarrage dune session cliquer sur Ajouter, puis entrer /usr/bin/ssh-add Donner une priorit de 60
78
Valider
Lancer lagent en double cliquant sur licne pageant : Il apparat alors dans la barre des tches actives : Cliquer avec le bouton droit de la souris pour faire apparatre le menu contextuel du pageant et cliquez ensuite sur Add Key pour ajouter les cls prives gres par lagent ssh
pageant actif
79
80
dagent
de cascader les htes sans avoir donner dauthentification supplmentaire Ncessite une configuration administrateur sur toutes les machines cascader.
Il faut dmarrer un agent au dpart de la machine cliente source, et activer le chargement des cls en mmoire Et activer le transfert dagent au niveau de tous les serveurs concerns dans le fichier de configuration client
81
dagent
transfert dagent
82
Transfert dagent
relais des demandes dauthentification entre hte partir dun client PuTTY
Cocher la case : Allow agent forwarding
83
Utilisation pour le batch : lancement de scripts de manire autonome et sans mot de passe
Forcer ladresse IP mettrice pour forcer la source Sur la machine cible, dans le fichier authorized_keys
84
Forage de lIP
Forage de la commande
Suite de la cl publique
Mode Hostbased
C'est une authentification par hte de confiance On utilise une paire de cls publique et prive pour tablir une connexion scurise et de confiance
Donne
l'accs sans passphrase tous les utilisateurs d'une machine de confiance vers une autre. Utilisation pour le batch notamment pour les fermes de calcul
85
Mode Hostbased
Configuration
Rcupration et installation des cls des machines de confiance # ssh-keyscan -t rsa machine1 machine 2 ... > /etc/ssh/ssh_known_hosts # cat /etc/ssh/ssh_known_hosts | cut -d" " -f1 > /etc/hosts.equiv Fichier ssh_config HostbasedAuthentication yes EnableSSHKeysign yes
86
Fichier sshd_config RhostsRSAAuthentication yes HostbasedAuthentication yes # vrifier les droits : chmod u+s /usr/lib/ssh/ssh-keysign
Tunneling
Cest une mthode d'utilisation de SSH pour scuriser les autres applications TCP sensibles.
Son principe est de crer un tunnel chiffr entre deux machines et d'y faire passer les applications dedans. Ainsi, on peut continuer utiliser des outils comme FTP, IMAP, POP, smtp ... de manire scuris (pour FTP: cela dpend du paramtrage du serveur ftp)
Au niveau scurit, les tunnels posent quelques soucis car les ports locaux sur lesquels des transferts sont tablis sont accessibles tous les utilisateurs de la machine (notamment les passerelles)
87
Tunneling
- Transfert de port local
Position
du problme :
Il s'agit donc de rediriger des services souhaits et que lon ne peut accder normalement car ils sont filtrs; et dutiliser la connexion ssh (seule accepte) pour y faire passer ces services
88
Connexion ssh uniquement accessible depuis lextrieur Port local : 18000 (> 1024) Port ouvert : 22 Passerelle Port serveur : 80 ServWeb
89
localhost
machine1
Serveur - Port : 22
machine2
90
-L : spcifie que les donnes arrivant sur le port 14300 de la machine1 doivent tre envoyes sur le port 143 lhte distant (machine2) -N : permet de pas donner de prompt aprs la connexion (ou mettre le sleep en secondes)
PuTTY et smtp
Envoi dun message vers un relai smtp filtr via une passerelle ssh
Lancer putty Aller dans la valeur SSH Tunnels Remplir les champs lis au tunneling dans la fentre Puis valider cliquant sur Add
91
Lancement du tunnelssh :
Le tunnel est configur Il faut maintenant lancer la connexion Open Donner son mot de passe afin dobtenir une connexion ssh classique Le tunnel sera ainsi prt Configurer lapplication pour quelle se connecte sur :
92
PuTTY et smtp
Exemple en simulant une connexion dun client de mail par un telnet en localhost sur le port 4321
Le serveur rpond enfin ! On peux envoyer des messages depuis ce serveur bien quil soit filtr
93
Conclusion
SSH est une bote outils complte Les connexions sont scurises
Existe diffrentes possibilits de connexions et de transferts de fichiers Les relais possibles des applications TCP permettent daccder de nouvelles ressources Install en standard sur tous les systmes (client et serveur) Unix et MacOS X De trs bons clients Windows notamment PuTTY, Winscp notamment en les associant Xming
94