Woord vooraf: Om het risico jezelf buiten te sluiten te minimaliseren, is het handig om voordat je 2FA instelt minstens 1 apparaat geschikt maakt om in te loggen via public key authentication om toegang te behouden ook zonder verificatiecode.

SSH is een manier om op een beveiligde manier op afstand een computer of server te kunnen beheren. Met veilig wordt bedoeld: de verbinding is versleuteld. De toegang tot een SSH-sessie is meestal beveiligd met een wachtwoord. Dit is op zich niet per definitie onveilig, maar het kan beter. Door gebruik te maken van een verificatiecode die iedere 30 seconden wijzigt, kun je doordat je een vertrouwd apparaat bij je hebt, verhinderen dat er ongewenst op afstand op je computer kan worden ingelogd. Ik gebruik hiervoor bij Linux Google Authenticator, een combinatie van een softwarepakket dat je wel zelf moet compilen vanaf de online softwarebibliotheek Github, en een gratis app. De app werd voorheen door Google aangeboden zodat je veiliger op je Google account kon aanmelden. Dit kan nog steeds, maar is eigenlijk vervangen door Google Prompt, waarbij je telefoon een popup toont in plaats van dat je een app moet openen. De Google Authenticator app kun je zoals eerder gezegd ook gebruiken in combinatie met het open source Google Authenticator softwarepakket. Configuratie stelt op zich niet zoveel voor. Je moet in ieder geval een beetje snappen hoe de pakketten Git en Make werken. Hier zijn talloze tutorials van beschikbaar, en ze zijn compleet versie onafhankelijk. Je downloadt via 'Git clone' Google authenticator, en via de Make tools installeer je het. Daarna voer je google-authenticator uit, waarna er een aantal vragen worden gesteld. In principe krijg je de meest veilige instellingen als je overal 'Ja' op antwoordt. Na configuratie krijg je een zestal recovery codes en een link naar een QR-code. Als je een server beheert waar geen fysieke toegang op mogelijk is, bijvoorbeeld een VPS, is het wel erg handig om even de codes te noteren of ergens waar je het terug kan vinden op te slaan. Als je zoals ik thuis een servertje draait, is het alsnog handig, maar kun je ook nog bij de server mocht je geen toegang tot de Authenticator app hebben. Via de QR-code link die je via je webbrowser opent weet de Google Authenticator app die je op je smartphone kan installeren voor welk apparaat er codes moeten worden gegenereerd. In de app kun je via de instellingen QR-codes scannen. Dit gedeelte is best makkelijk. Moeilijker als je er niks vanaf weet, is het configureren van het beveiligingssysteem van Linux, PAM, om 2FA te gebruiken. Het grote voordeel van deze manier van authenticeren is dat er eerst om een verificatiecode wordt gevraagd, en daarna pas om het wachtwoord. Zonder verificatiecode kan er bijvoorbeeld ook niet geprobeerd worden om het wachtwoord te raden of te brute-forcen. SSH maakt gebruik van de module in PAM om te bepalen hoe je je kan aanmelden. Door in een configuratiebestand een regel toe te voegen, vraagt SSH de volgende keer dat je aanmeld om een verificatiecode. Meestal staat het bestand in /etc/pam.d/sshd

auth required pam_google_authenticator.so

Daarna hoef je alleen nog maar SSH te configuren om verificatiecodes te vragen. Dit bestand heet meestal /etc/ssh/sshd_config. Het blijft Linux, er zijn nogal wat afwijkende distributies.

ChallengeResponseAuthentication yes ... AuthenticationMethods publickey,password publickey,keyboard-interactive