De la médecine générale

Comme certains lecteurs l’auront noté, je pratique un sport peu connu et assez peu médiatisé, le roller de vitesse (Inline Speed Skating en anglais), depuis maintenant 4 ans. La saison 2017/2018 m’ayant offert de participer aux championnats de France de roller indoor, il va de soi que cette opportunité ne vient pas sans une bonne dose d’entraînement hebdomadaire et de régularité.

J’ai été confronté lors de ma deuxième année de pratique à des « problèmes » de genou, caractérisés tout d’abord par quelques douleurs. Douleurs, que j’ai choisi, à l’époque, d’ignorer. Comme beaucoup, je suis allé consulter mon médecin généraliste, qui m’a immédiatement prescrit des anti-inflammatoires en pommade, avec comme diagnostic : inflammation des cartilages. Je pouvais donc continuer à patiner, utilisant le médicament fournit quand survenait la douleur. Évidemment, la douleur n’a pas disparu et est même devenue plus fréquente. A la visite suivante, j’ai eu le droit aux anti-inflammatoires en gélule, pour un effet garanti. J’ai donc continué à patiner.

Bien plus tard dans l’année, la douleur a refait son apparition et j’ai fait mon retour dans le cabinet du médecin. À nouveau prescription d’anti-inflammatoire et d’un examen IRM en plus. Je me rappellerai toujours la réponse du médecin à ma question de réduire ma fréquence d’entraînement, en paraphrasant, en voici la teneur : « Non, continuer comme d’habitude. En cas de douleur, utiliser la crème avant, et après l’entraînement ». Je suis allé passer mon examen IRM, pas de lésions. Néanmoins, la réponse du médecin m’avait profondément dérangé.

Continuer la lecture de « De la médecine générale »

Connexion SSH avec gpg-agent

Dans l’épisode précédent, je décrivais comment j’avais créé mes clefs et sous-clefs et la façon dont j’avais exporté les sous-clefs sur une YubiKey. Place à une mise en application du côté de la connexion SSH entre un poste client et un serveur. J’utilise déjà le processus d’authentification par clef SSH pour me connecter sur mes machines serveurs, distantes géographiquement ou pas, virtuelles ou non. Le principe est donc d’utiliser la clef d’authentification pour se connecter en SSH aux machines.

On gagne en praticité, car une seule clef va nous permettre de nous connecter à chacune de nos machines une fois celles-ci configurées. Cela passe néanmoins par une configuration de la machine cliente pour utiliser gpg-agent en lieu et place de ssh-agent, chose qui n’est pas forcément aisée. Je vais décrire la configuration que j’ai mise en place, résultat de plusieurs échecs successifs avant d’arriver à quelque chose de fonctionnel et en sachant que j’utilise Xorg et I3 pour la partie affichage et interface.

Configuration côté serveur

La première étape consiste à récupérer les informations de la clef nécessaires à la configuration du serveur. Après avoir inséré notre YubiKey, nous exécutons donc la commande suivante :

$ ssh-add -L
ssh-rsa BFFEB3NzaC ... pdqsdfwX6m1 cardno:000123456789

Nous pouvons alors copier les informations renvoyées par cette commande et les insérer dans le fichier authorized_keys de notre serveur.

Configuration côté client

Le but est maintenant de remplacer ssh-agent par gpg-agent. Nous commençons donc par configurer ce dernier en éditant le fichier .gnupg/gpg-agent.conf :

enable-ssh-support 
pinentry-program /usr/bin/pinentry-curses
max-cache-ttl 300
default-cache-ttl 300

Dans le fichier .pam_environment, nous ajoutons les lignes suivantes :

SSH_AGENT_PID   DEFAULT= 
SSH_AUTH_SOCK DEFAULT="${XDG_RUNTIME_DIR}/gnupg/S.gpg-agent.ssh"

Et enfin dans .zshrc :

export GPG_TTY=$(tty) 
gpg-connect-agent updatestartuptty /bye >> /dev/null

Il me semble que cette configuration est suffisante pour obtenir quelque chose de fonctionnel. Sur mon poste, j’ai quelques déclarations supplémentaires du côté des fichiers .profile, .zprofile qui font doublon pour la déclaration de la variable GPG_TTY. Il devrait être possible de les supprimer sans risques.

Test unique

Pour réaliser un test unique, après configuration de gpg-agent et avant d’effectuer toutes les modifications ci-dessus et de tester la persistance au redémarrage, j’ai utilisé les commandes ci-dessous pour tester la connexion au serveur avec la clef d’authentification et vérifier cette première étape.

sudo killall gpg-agent
sudo killall ssh-agenteval $( gpg-agent --daemon --enable-ssh-support )

Nous pouvons alors essayer la connexion SSH vers notre serveur et retrouver la configuration utilisant ssh-agent après un simple redémarrage. L’utilisation de l’option -vvv étant particulièrement utile pour suivre les étapes de connexion et détecter d’éventuels problèmes.

ssh user@server -vvv

Conclusion

Avec cette configuration, je suis donc en mesure de me connecter à mes serveurs via SSH en utilisant ma clef d’authentification stockée sur ma YubiKey et le PIN associé à la clef. S’il est plutôt aisé de réaliser une première connexion réussie, la principale difficulté concerne la persistance de la configuration et le lancement correcte des composants à l’ouverture de la session; en particulier pour l’affichage de l’interface de saisi du PIN via pinentry-curses.

Sources

Using GnuPG (2.1) for SSH authentication
YubiKey for SSH, Login, 2FA, GPG and Git Signing

GnuPG, clefs, YubiKey : c’est parti

L’enchaînement  et le choix des commandes et des configurations qui vont suivre sont essentiellement extraites du blog de Simon Josefsson dans son article Offline GnuPG Master Key and Subkeys on Yubikey NEO Smartcard.

Après m’être documenté sur la génération de clefs, GnuPG et les possibilités  d’intégration au système, je me suis donc naturellement tourné vers la pratique et l’expérimentation. J’essaye ici d’en retracer les étapes, afin d’être en mesure de le reproduire au besoin.

Quelques points restent à améliorer et à solutionner, notamment l’absence dans les systèmes live testés (Kali Linux, Debian 9.5.0 et Parrot Security 4.2.2), du composant scdaemon permettant de communiquer avec la YubiKey et conduisant à l’échec de la commande gpg –card-edit.

Dernière petite note avant d’entrer dans le vif du sujet. Pourquoi une YubiKey (Neo) ? Tout simplement parce que j’avais fait l’acquisition de ce matériel il y a de cela quelques années, mais n’avais pas réussi à l’intégrer à mon utilisation quotidienne. Ce dispositif été donc tout indiqué pour servir de support de stockage à mes sous clefs.

Pour rappel, les opérations effectuées ci-dessous sont à réaliser sur une machine hors ligne et dans un système « Live ». Les plus soucieux de leur sécurité pourront aller jusqu’à utiliser un ordinateur dédié à cette tâche (un raspberry pi zéro peut-être ?).

Continuer la lecture de « GnuPG, clefs, YubiKey : c’est parti »