SSH-Login mit OpenPGP Card

Es wird beschrieben, wie mittels OpenPGP Card ein sicherer Login per SSH erfolgen kann.

Voraussetzungen

Voraussetzung ist eine einsatzbereite OpenPGP Card, ein Crypto Stick oder auch ein YubiKey mit initialisiertem OpenPGP-Applet. Die Einrichtung wird an einem Linux-PC (Gentoo) mit aktuellem GnuPG und OpenSSH geschrieben.

Einrichtung

Die Konfigurationsdatei des GPG-Agents muß folg. enthalten:

~ $ cat ~/.gnupg/gpg-agent.conf 
enable-ssh-support

Das Auslesen des Schlüssels erfolgt bei eingesteckter Karte mit:

$ ssh-add -L 
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDuzZGqCzyvM3HhRezwZCxgwOEERcGr2+eSQJ3hb3D4A+QgYh8j6dgfsDNhNciwfZ+Prx4MukRl0YGomdmB7yyFmFE/73CTo3LEK/BfTiRRTRyabJPP2ozMrKj3hxXdFfYvhNB4JoAtLS+ANGv0YM+IvHBXgycRx1Pj7A26KM7+Fpo17oNxlIAc8T7+Px7azFHk22AzH2Rw4M/DuFm//v9nLE49xmuFM733Z2KJ+BQoOZX6uFhcQAiW4JZIq4yxFFPh5WlIC/3s/4jCCgmFFXSqfazCJGzONSALb2CvU0RoCwpdIRYDn17q50RRDBq/KXJu0pxQzdoIzVIxkQwwykc7 cardno:000605486217

Dieser Schlüssel (die komplette Zeile) wird auf dem Zielhost in die Datei ~/.ssh/authorized_keys kopiert (Homedirectory des Benutzers, als welcher man sich anmelden will). Der Kommentar (im Beispiel "cardno:000605486217") kann geändert werden (z.B. Name des Karteninhabers).

Nachdem der Login mit dem SSH-Key der OpenPGP Card erfolgreich getestet wurde, kann das Paßwort des Benutzers (im Beispiel mmustermann) gesperrt werden:

$ passwd -l mmustermann 

Anschließend ist nur noch ein Login per SSH mit der OpenPGP Card möglich.

sudo mit der OpenPGP Card

Nach dem SSH-Login über die OpenPGP Card als normaler Benutzer kann man Befehle, welche root-Rechte erfordern, mittels "sudo" ausführen. Dazu müssen folgende Voraussetzungen erfüllt sein (es gibt natürlich auch andere Wege):

  • Die Gruppe "wheel" (bzw. deren Mitglieder) muß alle Befehle ausführen dürfen. Dazu aktiviert man in /etc/sudoers die (bei Gentoo) bereits vorhandene, aber auskommentierte Zeile:
    %wheel ALL=(ALL) ALL
    Damit können Mitglieder der Gruppe "wheel" per "sudo" beliebige Kommandos nach nochmaliger Eingabe ihres Paßwortes mit root-Rechten ausführen. Hinweis: Das Editieren von /etc/sudoers sollte nicht direkt, sondern nur mit dem Befeht "visudo" erfolgen.
  • Der Benutzer muß Mitglied der Gruppe "wheel" sein. Das erreicht man mit folgendem Befehl (als root):
    # usermod -aG wheel mmustermann

Zum Ausführen von Kommandos mit root-Rechten per sudo muß der Benutzer nun sein Paßwort eingeben, welches er aber gar nicht mehr besitzt. Damit dies auch über den Schlüssel der OpenPGP Card erfolgt, muß ein neues PAM-Modul installiert werden:

# emerge -av pam_ssh_agent_auth 

In /etc/pam.d/sudo wird dies nun durch Hinzufügen der ersten Zeile aktiviert:

# nano -w /etc/pam.d/sudo 

auth [success=2 default=ignore] pam_ssh_agent_auth.so file=~/.ssh/authorized_keys
auth    include         system-auth
account include         system-auth
session include         system-auth

Anschließend wird in /etc/sudoers folgende Zeile einfügt:

Defaults   env_keep += SSH_AUTH_SOCK

Damit wird der vom SSH-Agent genutzte Socket auch in die root-Umgebung übergeben.

Das Ganze erfordert die Nutzung eines SSH-Agents auf Clientseite. Dessen Verbindung muß bei der Verbindungsaufnahme durch den Parameter "-A" mit übergeben werden. Die SSH-Verbindung wird also z.B. so gestartet:

$ ssh -A mmustermann@testserver.test 

Funktioniert das alles, kann auch für root das Paßwort entfernt und allgemein der SSH-Zugang mit Paßwörtern gesperrt werden.