Es wird beschrieben, wie mittels OpenPGP Card ein sicherer Login per SSH erfolgen kann.
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.
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.
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):
%wheel ALL=(ALL) ALLDamit 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.
# 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.