C'est désormais une certitude, les simples mots de passe ne sont plus suffisants pour assurer l'accès à des services critiques. En ce qui me concerne j'utilise, dès que cette option existe, le système de double authentification ("authentification à facteurs multiples"). Le principe est d'associer un mot de passe classique avec un deuxième identifiant à usage unique. Beaucoup utilisent Google Authenticator, ou bien la réception d'un SMS pour obtenir cette information.
Il existe une solution un peu moins connue mais particulièrement intéressante : Yubikey. Il s'agit d'une petite clé usb (cf. la photo d'illustration de ce billet) particulièrement robuste, légère et ne nécessitant pas de pile. Il suffit de l’insérer dans un port USB et d'appuyer sur le bouton central. La Yubikey se comporte alors comme un clavier (pas besoin de driver spécifique) et génère automatiquement le code à usage unique. Cette clé est vendue sur le net à un tarif abordable (environ 23€ sur Amazon). Certaines sociétés (comme OVH, par exemple) ont adopté massivement ce dispositif afin de sécuriser l'accès à leur système d'information.
J'utilise une Yubikey depuis quelques mois et je dois reconnaître que cette dernière est particulièrement pratique (pour sécuriser l'accès à mon compte LastPass par exemple). J'ai également commencé à sécuriser l'accès SSH de certains de mes serveurs avec ce dispositif et j'ai décidé de créer ce how-to pour aider ceux qui souhaiteraient faire de même.
Comme d'habitude, ce tuto est basé sur Debian 7, mais il devrait être assez facilement utilisable avec d'autres distributions.
Avertissement important : durant toutes ces opérations ne redémarrez pas le service SSH (ni votre serveur), vous risqueriez de ne plus pouvoir vous connecter ! Une fois la configuration achevée (et le service SSH relancé) conservez votre session SSH ouverte et testez en lançant une nouvelle connexion en parallèle : si les choses tournent mal (connexion impossible) vous conserverez ainsi un accès
La première opération à réaliser est d'installer la librairie PAM pour Yubico/Ybikey
apt-get install libpam-yubico
Il faut ensuite créer le fichier qui va contenir la liste des Yubikey habilitées à se connecter avec un compte utilisateur donné
mkdir ~/.yubico
vim ~/.yubico/authorized_yubikeys
Pour mémoire le "~" représente le home directory de l'utilisateur actuellement connecté. Si vous êtes connecté en root, le fichier sera donc créé dans "/root/.yubic/authorized_yubikeys"
et d'y placer la liste des Yubikey autorisées à se connecter de la façon suivante
username:token_ID
Le username correspond à votre login Unix (root par exemple) et le token_ID peut être récupéré à cette adresse.
Rendez-vous sur cette page, insérez votre Yubikey sur un port USB, sélectionnez "OTP" (1) dans "source format" et générez une clé en appuyant sur le bouton de votre clé (2).
Vous obtiendrez en retour une "input string" composé de 12 caractères et commençant par 6 fois la lettre "c". De la forme "ccccccabcdef". Cette chaine est votre "token_ID". Ajuster le fichier "authorized_yubikeys" avec cette valeur. On obtient donc quelque chose comme "root:ccccccabcdef".
Si vous devez donner l'accès à plusieurs Yubikey pour le même login vous pouvez accumuler les Token_ID avec quelque chose du type "root:token_yubikey1:token_yubikey2..."
On édite ensuite le fichier
/etc/pam.d/sshd
Ajoutez la ligne suivante après "@include common-auth"
auth required pam_yubico.so id=16
Si vous préférez devoir générer votre code à usage unique avant d'avoir à mentionner votre mot de passe placez cette ligne avant "@include common-auth" (à vous de décider ce que vous souhaitez faire).
Éditez ensuite le fichier
/etc/ssh/sshd_config
Afin de modifier la directive suivante
ChallengeResponseAuthentication yes
Redémarrez SSH
/etc/init.d/ssh restart
Essayez d'ouvrir une nouvelle session (conservez la session en cours active - on ne sait jamais ...). Vous devriez obtenir ça
- Crédit photo : Aspherical Element