Seit längerem nutze ich den Yubikey Nano und hatte für meine SSH Verbindungen clientseitig die Konfiguration ala https://developers.yubico.com/PIV/Guides/SSH_with_PIV_and_PKCS11.html vorgenommen. Lockdown und ein wenig Freizeit sei dank, hab ich mich daran gemacht die Konfiguration meines SSH Servers anzupassen, um für bestimmte Anwender einen Authentifizierung über den Yubikey zu erzwingen.
1. Installation der Yubico pam Bibliothek
Auf meiner Debian Maschine ist die libpam-yubico in den offiziellen Paket-Repos enthalten, von daher ist die Installation relativ geradlinig.
$ sudo apt-get install libpam-yubico
Sollte das Paket nicht vorhanden sein, so kann man das entsprechende ppa einbinden.
$ sudo add-apt-repository ppa:yubico/stable
$ sudo apt-get update
$ sudo apt-get install libpam-yubico
2. API Key erzeugen
Mittels des Yubico Portal kann man die Client ID und den Secret Key erzeugen, man muss lediglich seine Email-Adresse angeben und per Klick auf den Yubikey ein OTP erzeugen ...
und erhält seine Client ID und den zugehörigen Secret Key generiert.
3. Anpassen der SSH PAM Konfiguration
In der Datei /etc/pam.d/sshd nehmen wir die Anpassungen vor, um die Grundlagen für die Authentifizierung mit dem Yubikey zu legen
Als erstes fügen wir folgende Zeile in die Konfigurationsdatei am Anfang ein
auth required pam_yubico.so id=[Your Client ID] key=[Your Secret Key] debug authfile=/etc/yubikey_mappings mode=client
um das yubikey pam Modul einzubinden, darüber hinaus kommentieren wir noch den common-auth include aus
#@include common-auth
Die in der Konfiguration referenzierte Datei /etc/yubikey_mappings enthält ein Mapping der User sowie der ersten 12 Zeichen des OTP, für die Anwender die sich am System per OTP anmelden dürfen.
USER1:cccccjkunjn
Falls mehrere Yubikeys mit ein und dem selben Nutzer in Verwendung sind (evtl. einen für den Einsatz in der Firma und einen privater Natur), so kann man auch mehrere Keys durch Doppelpunkt getrennt angeben
USER1:KEY1:KEY2
4. Anpassen der SSHD Konfiguration
In der ssh Konfiguration (/etc/ssh/sshd_config) nehmen wir einige Anpassungen vor
PubkeyAuthentication yes
ChallengeResponseAuthentication yes
AuthenticationMethods publickey,keyboard-interactive:pam
UsePAM yes
PubkeyAuthentication: Erlaubt die Authentifizierung mittels public keys
ChallengeResponseAuthentication: muss aktiviert sein um keyboard-interactive:pam bei den AuthenticationMethods zu ermöglichen
UsePAM: Verwende die PAM Module zur Authentifizierung
AuthenticationMethods: Gibt die Reihenfolge der Authentifizierungsmethoden an (publickey gefolgt von keyboard-interactive:pam, welches das generierte OTP nutzt)
Abschliessend starten wir den SSH Service neu
$ service sshd restart
Pro-Tip Es ist ratsam eine Verbindung offen zu halten, bis man mit allen Konfigurationsanpassungen durch ist und die Tests abgeschlossen sind (um zu vermeiden, dass man sich selbst aussperrt)
und Testen dann den SSH Zugriff
$ ssh kurt@my-machine
YubiKey for `kurt':
Ein Klick auf den Yubikey sollte uns den Zugang zum Remotesystem gewähren.