On néglige trop souvent la sécurité sur un serveur Internet, pourtant, il est vital de se protéger.
Ici, nous aborderons un aspect un peu trop passé aux oubliettes, l’authentification par systèmes de clés privés/clés publiques RSA (la méthode pour DSA est strictement la même, juste changer RSA en DSA dans les étapes suivantes).
On va même aller plus loin à la fin, désactiver complètement root (y compris via les clés) et l’authentification par mot de passe (risqué)
Configuration du serveur
Ouvrez avec votre éditeur de texte favoris le fichier de configuration du démon SSH (/etc/ssh/sshd_config pour Debian par exemple) et ajoutez ces lignes :
RSAAuthentication yes PubkeyAuthentication yes AuthorizedKeysFile %h/.ssh/authorized_keys
(La ligne AuthorizedKeysFile indique à sshd où aller chercher les clés publiques, %h représente le nom de l’utilisateur local du système)
Sauvegardez et fermez la config avant de relancer le démon SSH.
(Trick : un
/etc/init.d/ssh restart
ne kill pas la session SSH a partir duquel il aurait été lancé)
Création des clés
Sous Windows
Nous allons avoir besoin de l’outil PuTTYgen afin de générer les clés RSA.
Lancez le, sélectionnez RSA, et une taille de clé (1024 bits est une bonne valeur, ne descendez pas en dessous de 512 bits), et cliquez sur « Generate ».
Vous devez bouger votre souris dans le cadre prévu à cet effet, ce qui génèrera de l’entropie, afin de s’assurer que la clé sera unique.
Une fois le couple de clés crées, vous pourrez y rajouter un commentaire pour la clé (indispensable pour savoir à qui appartient la clé) et y mettre une passphrase. La passphrase va servir a encrypter la clé privée. Sans cette passphrase, impossible d’utiliser la clé.
Puis enfin, on clique sur « Save Private Key » et « Save Public Key ».
Veillez à bien ranger (voir protéger dans un répertoire Utilisateur crypté) votre clé Privée.
Les fichiers ressemblent à ça :
Clé privée
PuTTY-User-Key-File-2: ssh-rsa Encryption: aes256-cbc Comment: user@machinelocale Public-Lines: 4 AAAAB3NzaC1yc2EAAAABJQAAAIEAga67iAb6FCLKzQN5O/CMwj0tD341I/GkFVQO MK/grigk8V/qrWO+ljiMsGgZrkJ3EPqqhq3kxp83xOTBk/93DeXtnJ3PFZEwwFed RO3Fww3V2oMAa5mbLkxwHXEKPx4V+aRcuZWaTnz8Ej7dyMRk112udJjgYsNrzzuD xtZ+5h0= Private-Lines: 8 CQZH1dkFNNWdaGmG+tljnUDc1/0tFWoUQO9q5Cc8uIW3l17GTTeJuSZ8QRay3/T1 2z3YQhlqfdn5UEAAnIvAFLaL4HFBbNJaaVh//44v0fxXHDpdsLcdDdOEINFVWUAA QaQ+yMHaBhYc864kouZlKJujhZEU7lj90zNZ24Vt0YnLSngNk/3Mvw3UwTXeBOZT 7PckIKpla5ZWINu/iIG8/a+LlRYT8QbDskC7eWKSSj0f5ZDgofcYzg+B8Bxwcasr neg1sv7b4dM7RQe7+GJAeIeHzS2RMv+l9C/gVDL8/sVhX7QXTo2w39s0xcXvNKuh cmvFn+EvFG0LHDbi8MQxhfN9bbJ6NAVKvPUIznM5XCWhVDHRjiytycHL9fpg42u0 Z/BDYNVdB4e06uotgcK8UbFS4rTLnSBBdT5A4AiiqvJoyX7mjcZMpLca542+Gdmq axhr/FPSEUImNEC02u5/Dg== Private-MAC: fed2e7a78bb4ed7e566c506701cf2b5d6f701a32
Clé publique
---- BEGIN SSH2 PUBLIC KEY ---- Comment: "user@machinelocale" AAAAB3NzaC1yc2EAAAABJQAAAIEAga67iAb6FCLKzQN5O/CMwj0tD341I/GkFVQO MK/grigk8V/qrWO+ljiMsGgZrkJ3EPqqhq3kxp83xOTBk/93DeXtnJ3PFZEwwFed RO3Fww3V2oMAa5mbLkxwHXEKPx4V+aRcuZWaTnz8Ej7dyMRk112udJjgYsNrzzuD xtZ+5h0= ---- END SSH2 PUBLIC KEY ----
(Vous noterez que la clé publique est contenue au début du fichier contenant la clé privée)
Afin de rentre compatible votre clé Publique générée, nous allons modifier quelques lignes.
- Copier le commentaire entre les guillemets, a la fin de la clé
- ajouter « ssh-rsa » en début de clé
- Supprimer les deux premières lignes
- Supprimer la dernière ligne
- Supprimer les retours à la ligne
Vous devriez vous retrouver avec un fichier qui ressemble à celui-ci :
ssh-rsa AAAAB3NzaC1yc2EAAAABJQAAAIEAga67iAb6FCLKzQN5O/CMwj0tD341I/GkFVQOMK/grigk8/qrWO+ljiMsGgZrkJ3EPqqhq3kxp83xOTB/93DeXtnJ3PFZEwwFedRO3Fww3V2oMAa5mbLkxwHXEKPx4V+aRcuZWaTnz8Ej7dyMRk112udJjgYsNrzzuDxtZ+5h0= user@machinelocale
Il ne reste qu’à copier la clé publique dans le fichier « $HOME/.ssh/authorized_keys » de du compte utilisateur sur la machine distante (une clé publique par ligne du fichier) et configurer PuTTY :
Indiquez le host sur lequel se connecter, puis renseignez le chemin de la clé privée dans « Connection » -> « SSH » -> « Auth« . Dans la rubrique « Connection » -> « Data » il est également possible de renseigner le login a utiliser automatique à la connexion. (même effet que de mettre login@host dans la case réservée au hostname)
Sous Linux
Pour générer le couple de clés RSA, on va utiliser la commande ssh-keygen :
ssh-keygen -t rsa -b 1024 -C test@machinelocale
L’option -C défini le commentaire qu’on va attribuer à la clé publique.
Le script demandera une éventuelle (fortement recommandée tout de même) PassPhrase.
Par défaut, les clés seront générées dans ‘$HOME/.ssh/id_rsa’ et ‘$HOME/.ssh/id_rsa.pub’ pour les clés privées et publiques. (On peut noter que la clé privée a un masque en 600)
Il ne reste qu’à copier la clé publique dans le fichier « $HOME/.ssh/authorized_keys » de du compte utilisateur sur la machine distante (une clé publique par ligne du fichier).
Si vous avez enregistré votre clé publique à l’endroit par défaut, plus rien a configurer, sinon « ssh -i /path/to/rsa_key.pub ».
Désormais, lors de vos connexions à vos serveur favoris, le système vous demandera la passphrase (si vous en avez configuré une) plutôt que le mot de passe du compte Unix.
Pour aller plus loin
(parce que j’aime bien pousser les choses un peu plus)
N’autoriser la clé que pour une IP en particulier
Il est tout a fait possible de demander au serveur distant de n’autoriser la connexion pour une clé a partir d’une IP, il suffit de rajouter, devant ssh-rsa un champ supplémentaire : from= « ip » . Ainsi, on se retrouve avec :
from="217.174.206.179" ssh-rsa AAAAB3NzaC1yc2EAAAABJQAAAIEAga67iAb6FCLKzQN5O/CMwj0tD341I/GkFVQOMK/grigk8/qrWO+ljiMsGgZrkJ3EPqqhq3kxp83xOTB/93DeXtnJ3PFZEwwFedRO3Fww3V2oMAa5mbLkxwHXEKPx4V+aRcuZWaTnz8Ej7dyMRk112udJjgYsNrzzuDxtZ+5h0= user@machinelocale
Désactivations
- On peut désactiver la connexion root par SSH (enfin il est même nécessaire de désactiver root par SSH, mais activez sudo avant…) :
aptitude install sudo sudoedit /etc/sudoers
et rajoutez une ligne dans ce style (my_secured_account est bien sur le nom de votre compte shell) :
my_secured_account ALL=(ALL) ALL
Puis connectez vous sur votre my_secured_account et tapez sudo -s (il vous demande un mot de passe la première fois, souvenez-vous en !!! et RTFM pour l’utilisation de sudo, mais c’est super simple.) pour obtenir un privilège root par exemple.
Enfin, désactivez le login de root dans sshd_config :
PermitRootLogin no
PasswordAuthentication no UsePAM no
ATTENTION ! Ce n’est pas ma faute si vous n’avez plus accès à votre serveur suite à ces deux dernières modifications (FACULTATIVES bien sur)
Source : Anthony Desvernois
Pour des détails techniques concernant RSA ou DSA, je vous invite a parcourir la Toile, ou a vous rendre ici : http://www.generation-nt.com/reponses/rsa-dsa-entraide-3902.html#22174
MaJ : « N’autoriser la clé que pour une IP en particulier »