A propos de sécurité informatique
SSH sur postes Windows, en 7 mn
Préambule
7 mn : depuis un CD complet de Cygwin, ouverture des packages 4 mn + sélection et copie 2 mn + installation 1 mn.
On va utiliser Cygwin, voir notre page de documentation [http://www.dg77.net/tekno/manuel/cygwin.htm]. Il est fortement conseillé d'avoir mis-à-jour les valeurs d'environnement comme indiqué. Cygwin avec les packages OpenSSH et OpenSSL doit être installé sur tous les postes concernés. cela occupera environ 40 Mo. Pour information : installer au moins les packages cygrunsrv (cf section Admin dans le "setup"), tous ceux de Base, et gawk (Interpreters). Dans ces explications, Cygwin est supposé installé dans c:\cygwin.
Etapes d'installation (serveur)
- Ouvrir une session donnant les droits d'administrateur
- Ouvrir une fenêtre Cygwin et entrer ssh-host-config
- "privilege separation be used" : répondre yes
- "install sshd as a service" : répondre yes
- "CYGWIN=" : entrer ntsec tty
- Démarrage du service : cygrunsrv --start sshd ou : net start sshd
- Arrêt du service : cygrunsrv --stop sshd ou : net stop sshd
- Création des utilisateurs SSH : ouvrir une session sous le profil voulu, et lancer ssh-user-config ce qui crée ~/.ssh
- Petits ajustages : pour commencer à travailler, aller voir le /etc/sshd_config pour permettre l'accès par userid et mot de passe (enlever le "#" devant PasswordAuthentication yes).
- Test : ssh [utilisateur]@127.0.0.1 ou ssh $USER@127.0.0.1 . Sortie : exit
SSH sur le poste client
- Conditions
- Avoir installé Cygwin avec OpenSSH comme indiqué dans le préambule.
- Connexion
- Conformément au fonctionnement de Cygwin, on utilise un profil Windows avec son mot-de-passe.
- ssh [utilisateur]@[id serveur] Le serveur est identifié par son adresse I.P. ou son nom D.N.S.
Considérations de sécurité
Il est clair que les codes utilisateurs sans mots-de-passe sont absolument à bannir.
Il est non moins clair que les trousseaux et les précieux fichiers de configuration dans /etc et ~/.ssh doivent faire l'objet d'attentions et de précautions, notamment de sauvegardes, ces dernières devant étre rangées en lieu sûr. L'ordinateur utilisé ne devrait pas être une machine accessible à tout utilisateur de passage.
Authentification automatique par RSA
Importance
Il est intéressant de pouvoir se connecter sans avoir à entrer un mot-de-passe. C'est possible si on a fourni au préalable sa clef publique au serveur.
Quand cela fonctionnera, on pourra éventuellement interdire l'accès par userid + mot-de-passe. Adapter la ligne concernée dans le sshd_config : il faut avoir PasswordAuthentication no
Première méthode : chargement sur le serveur d'une clef publique créée sur un client
- Sur le serveur, verifier dans son fichier de configuration qu'il accepte ce mode d'authentification
- grep RSA /etc/sshd_config . Ôter éventuellement le " # " devant RSAAuthentication yes pour activer la fonction (dans ce cas, arrêter/redémarrer le service)
- Sur le poste client, générer la paire de clefs
- ssh-keygen -t rsa
- Envoi de la partie publique du trousseau sur le serveur
- On peut utiliser scp, transfert de fichier sécurisé de SSH. scp ~/.ssh/identity.pub [userid]@[serveur]:~/.ssh/div.pub
- Connexion sur le serveur et mise-à-jour du trousseau
- Dans le répertoire ~/.ssh (et non pas /etc), ajout au
fichier par simple "cat"
ssh [userid]@[serveur] cd .ssh cat div.pub >> authorized_keys
- Retour sur le client
- exit
Seconde méthode : chargement sur le client d'une clef privée calculée sur le serveur
- Sur le serveur, se placer dans /etc
- cd /etc
- Génération de la paire de clefs
- ssh-keygen -t rsa en spécifiant, quand c'est demandé, /etc/id_rsa comme emplacement des fichiers de clefs . Le mot de passe peut être laissé à blanc. Deux fichiers sont créés dans /etc : id_rsa et id_rsa.pub
- Ajout aux "authorized_keys" (cf "première méthode")
- cat id_rsa.pub >> authorized_keys
- Copier la clef privée sur le client
- Il s'agit d'ajouter id_rsa dans $HOME/.ssh. $HOME correspond à c:\cygwin\home\[userid]
- Utiliser tout moyen de transmission fiable. Par exemple disquette qui sera reformatée dès le travail terminé, ou CD gravé qu'on passera ensuite au moins 5 s au four à micro-ondes. Si on ne peut faire le déplacement (et à défaut de fidèle esclave sourde-muette, de plus en plus rare), envoi par lettre recommandée avec accusé de réception des fichiers cryptés par GnuPG. En bonne logique ceci exclut tout protocole de transmission réseau ordinaire.
- Dès que ça marche, effacer la clef privée du serveur, où elle n'a rien à faire.
Connexions
- Lancement de ssh-agent en lui spécifiant l'interpréteur à lancer
- ssh-agent /bin/bash On peut
constater le nouvel environnement, exemple :
$ env | grep -i SSH SSH_AGENT_PID=1332 SSH_AUTH_SOCK=/tmp/ssh-oNmeqV1664/agent.1664
- Charger la clef privée dans le cache
- ssh-add
- On peut afficher les clefs en cours dans le cache
- ssh-add -l
- Connexion
- ssh [utilisateur] [ordinateur] Le serveur crée automatiquement un répertoire /home/[utilisateur] s'il n'existe pas encore.
- Attention : si on doit quitter le poste ou s'en éloigner, se déconnecter ne suffit pas, il faut encore vider le cache.
- exit puis (éventuellement) ssh-agent /bin/bash puis ssh-add -D
- Mais le mieux est toujours d'éteindre l'ordinateur.