SSH & Yubikey

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.