SSH: Zwei-Faktor-Authentifizierung

30

Ich besitze derzeit einen Ubuntu Server 12.04, auf dem OpenSSH zusammen mit Samba und einigen anderen Diensten ausgeführt wird. Derzeit ist die Authentifizierung mit öffentlichem Schlüssel eingerichtet, und ich frage mich, ob die Einrichtung einer Zwei-Faktor-Authentifizierung möglich ist. Ich habe mir Google Authenticator angesehen, den ich derzeit mit meinem Google Mail-Konto verwende.

Ich habe ein PAM-Modul gefunden, das so aussieht, als ob es kompatibel wäre. Es scheint jedoch, dass Sie gezwungen sind, ein Kennwort und den generierten Code zu verwenden.

Ich frage mich, ob es eine Möglichkeit gibt, die Google Authenticator-Anwendung (oder etwas Ähnliches) zusammen mit meinem öffentlichen Schlüssel zur Authentifizierung bei meinem SSH-Server zu verwenden.

Konkreter Esel
quelle
Die meisten Kommentare scheinen Fehlerberichte zu sein, in denen erwähnt wird, dass es unmöglich ist, PAM- und Public-Key-Authentifizierung mit OpenSSH zu verwenden. Ich habe auch Teile gefunden, die erwähnen, dass es überflüssig ist, da ich eine Passphrase mit meinem Schlüssel verwende. Bei allen Lösungen scheint nur Google Authenticator und ein Passwort zuzulassen, kein öffentlicher Schlüssel. Ich könnte es komplett vermissen, aber ich verstehe einfach nicht, wie ich beides implementieren soll.
Concrete Donkey
Nicht sicher, warum dies eine -1 hat, das ist eine sehr interessante Frage, und ich möchte auch die Antwort wissen (nicht, dass ich sie wahrscheinlich benutze, aber trotzdem gut, um sie in den Wissensbanken zu verstecken)
Mark Henderson
@Pierre Möchten Sie sowohl die Authentifizierung mit öffentlichem Schlüssel als auch ein Google OTP anfordern ?
mgorven
@mgorven Ja, ich habe versucht, sowohl den öffentlichen Schlüssel als auch Google OTP einzurichten. Ich habe gehört, dass einige Leute sagen, es sei ausreichend, wenn eine Passphrase auf dem Schlüssel als zwei Faktoren zählt, aber ich mache mir Sorgen, dass Malware den unverschlüsselten Schlüssel aus dem Speicher stiehlt. Ich hätte lieber zwei völlig getrennte Geräte zur Authentifizierung, ich bin ein bisschen paranoid.
Concrete Donkey
Dies soll offiziell in 6.2 implementiert werden: bugzilla.mindrot.org/show_bug.cgi?id=983#c59
Tobias Kienzler

Antworten:

8

Red Hat hat OpenSSH in RHEL (und damit CentOS) 6.3 um einen Patch erweitert, der mehrere Authentifizierungsmechanismen erfordert.

RequiredAuthentications2 publickey,keyboard-interactive

In den Versionshinweisen finden Sie nicht viel mehr Details.

Leider scheint diese Funktion weder in OpenSSH noch in Ubuntu 12.04 verfügbar zu sein. Wenn Sie also den Patch nicht finden und OpenSSH neu kompilieren möchten, haben Sie leider Pech.

mgorven
quelle
Ich muss sagen, dass ich die Mühe zu schätzen weiß, die Sie unternommen haben, um eine Antwort für mich zu finden. Ich habe auf jeden Fall versucht, ein paar Seiten mit Google-Ergebnissen zu durchsuchen, aber alles implizierte, dass Sie erwähnt haben, dass ich nur ein Passwort und ein OTP verwenden musste. Ich werde wahrscheinlich eine CentOS-VM erstellen, um mit der Funktion herumzuspielen.
Concrete Donkey
@ Pierre Nicht so viel Aufwand, ich wusste über diese Funktion vor ;-)
mgorven
Ich habe den entsprechenden Fehler und einige weitere Hinweise gefunden . Der Fehler enthält den Patch als Anhang.
Robie Basak
Und hier ist ein Upstream-OpenSh-Bug . Es sieht so aus, als ob ähnliche Funktionen bald in openssh verfügbar sein werden.
Robie Basak
openssh 6.2 ist in der Entwicklungsversion von Ubuntu gelandet. Abgesehen von allen Katastrophen wird diese Unterstützung in der erwarteten Version 13.10 verfügbar sein. Es verwendet Upstreams AuthenticationMethods, um mehrere erforderliche Methoden anzugeben, sodass Sie sowohl einen SSH-Schlüssel als auch PAM benötigen können, wobei PAM das Ende von Google Authenticator übernimmt.
Robie Basak
8

Sie suchen nach Duo Security

Ajith
quelle
1
Dies. Ja. Ich liebe dieses Ding!
LVLAaron
Definitiv - Duo ist einfach einzurichten für Unix / Linux (Link in Antwort), OpenVPN ( duosecurity.com/docs/openvpn_as ) oder jeden OATH TOTP-basierten Zwei-Faktor-Dienst oder für die Verwaltung von LastPass-Passwörtern. Jeder mit Google Authenticator kompatible Dienst (der TOTP verwendet) kann mit der mobilen App von Duo oder einem Hardware-Token, das TOTP unterstützt, verwendet werden.
RichVel
5

Sie können sowohl das Google Authenticator PAM-Modul als auch öffentliche Schlüssel verwenden. Es wird jedoch jeweils nur einer für eine bestimmte Authentifizierung verwendet. Wenn sich ein Benutzer mit einem autorisierten öffentlichen Schlüssel anmeldet, ist kein Token erforderlich.

Oder anders ausgedrückt: Token werden nur für die Kennwortauthentifizierung benötigt, keine SSH-Schlüssel.

Diese Einschränkung kommt übrigens nicht vom Google Authenticator-Modul, sondern von SSH, das nur die Zwei-Faktor-Authentifizierung (via ChallengeResponseAuthentication) für PAM implementiert, PAM jedoch nicht aufruft, wenn ein gültiger öffentlicher Schlüssel bereitgestellt wird.

ℝaphink
quelle
Das war richtig, hat sich aber jetzt geändert. openssh 6.2 fügt einen AuthenticationMethodsKonfigurationsparameter hinzu, der dies umkehren kann. Jetzt können Sie beides verlangen.
Robie Basak
3

Diese Frage stammt aus dem Jahr 2012. Seitdem hat sich SSH geändert und das SSH2-Protokoll wurde implementiert.

In neueren Versionen von SSH (> = 6.2) erwähnt man sshd_config:

AuthenticationMethods
       Specifies the authentication methods that must be successfully completed for a user to be
       granted access.  This option must be followed by one or more comma-separated lists of
       authentication method names.  Successful authentication requires completion of every method
       in at least one of these lists.

       For example, an argument of ``publickey,password publickey,keyboard-interactive'' would
       require the user to complete public key authentication, followed by either password or key-
       board interactive authentication.  Only methods that are next in one or more lists are
       offered at each stage, so for this example, it would not be possible to attempt password or
       keyboard-interactive authentication before public key.

       This option is only available for SSH protocol 2 and will yield a fatal error if enabled if
       protocol 1 is also enabled.  Note that each authentication method listed should also be
       explicitly enabled in the configuration.  The default is not to require multiple authentica-
       tion; successful completion of a single authentication method is sufficient.

Auf dieser Seite http://lwn.net/Articles/544640/ wird auch die Möglichkeit erwähnt, gleichzeitig einen öffentlichen Schlüssel und eine PAM-Authentifizierung zu verwenden.

Liquidität
quelle
2

Ich weiß, dass diese Frage ein wenig veraltet ist, aber für zukünftige Leute (ich eingeschlossen), die nach einer Lösung suchen, wird auch die Verwendung der Option ForceCommand in der Datei sshd_config zur Ausführung eines Skripts empfohlen, das dann die Authentifizierung ausführt. Hier gibt es ein Beispielskript , das Sie ein wenig an Ihre Bedürfnisse anpassen können. In diesem Beispiel ruft er es jedoch aus der authorized_keys-Datei auf, anstatt es mit dem ForceCommand von sshd_config systemweit zu machen.

Erstaunlich
quelle
1

Holen Sie sich einen YubiKey und folgen Sie dieser Anleitung: http://berrange.com/posts/2011/12/18/multi-factor-ssh-authentication-using-yubikey-and-ssh-public-keys-together/

AFAIK, dies ist die beste Möglichkeit, Yubikey auf Ihrem Server für den SSH-Zugriff zu implementieren. In der obigen Anleitung können Sie den öffentlichen Schlüssel + yubikey verwenden. Wenn Sie die offizielle Anleitung verwenden ( http://code.google.com/p/yubico-pam/wiki/YubikeyAndSSHViaPAM ), funktioniert dies nicht mit public- Schlüssel.

Grüße, Vip

vagarwal
quelle
0

Wenn Sie eine Passphrase für Ihren privaten Schlüssel festlegen, verfügen Sie bereits über eine Zwei-Faktor-Authentifizierung. Um sich einzuloggen, benötigen die Leute:

  1. Etwas, das Sie haben - Ihren privaten Schlüssel
  2. Etwas, das Sie kennen - die Passphrase für Ihren privaten Schlüssel
Bart B
quelle
3
Zwei Passwörter stimmen nicht machen die Zwei-Faktor - Authentifizierung. Der Schlüssel selbst ist kein gültiges "Etwas, das Sie haben", weil es keine Sache ist, nur eine Information. Das Objekt muss nicht kopierbar oder zumindest nicht trivial kopierbar sein, damit es als Authentifizierungsfaktor verwendet werden kann.
MadHatter unterstützt Monica
2
Ich stimme überhaupt nicht zu. Wenn Schlüssel und Zertifikate nicht "etwas sind, das Sie haben", was sind sie dann? Sie sind definitiv nicht "etwas, das Sie kennen" (haben Sie die Angewohnheit, Ihren SSH-Schlüssel abzulesen?) Und absolut nicht "etwas, das Sie sind". Dies sind die einzigen drei Möglichkeiten, und durch einen Prozess der Eliminierung sind sie mit Sicherheit "etwas, das Sie haben".
Bart B
1
Genau; Für mich liegt das Problem in der Maxime (etwas, das Sie kennen). Bei der Zwei-Faktor-Authentifizierung sollen Mitglieder von zwei Klassen mit unterschiedlichen Eigenschaften erforderlich sein. etwas, von dem Sie wissen, dass es leicht zu tragen ist, aber es kann jemand anderem zur gleichen Zeit bekannt sein, zu der Sie es kennen. Also fügen wir einen zweiten, anderen Faktor hinzu. Das "Etwas, das Sie haben" ist nur dann anders, wenn es nicht kopierbar (oder schwer zu kopieren) ist. Ansonsten ist es sicher nicht etwas, das Sie kennen, aber es unterscheidet sich qualitativ nicht von etwas, das Sie kennen , weil es jemand anderes zur gleichen Zeit haben kann wie Sie.
MadHatter unterstützt Monica
2
Ich stimme definitiv zu, dass ein passwortgeschütztes Schlüsselpaar eine große Verbesserung der Sicherheit gegenüber Benutzernamen und Passwort darstellt. Leider stimme ich nicht zu, dass ein solches Paar als Zweifaktor gilt, und wir müssen uns wahrscheinlich darauf einigen, dass wir uns nicht einig sind.
MadHatter unterstützt Monica
3
Wenn Sie einen mit einer Passphrase verschlüsselten privaten Schlüssel haben, beweisen Sie dem Server nur eines: dass Ihr Client den privaten Schlüssel kennt. Dem Server wird nicht nachgewiesen, dass Sie Ihre Passphrase kennen. Der Server weiß nicht einmal, ob Ihre Passphrase existiert. Daher ist es nur "etwas, das Sie wissen" (da Ihr Kunde es weiß) und nur ein Faktor. Wenn ein Angreifer nur eine Sache (Ihren privaten Schlüssel) in den Griff bekommt, sind Sie kompromittiert. Das ist ein Faktor. Das Argument, dass Ihre Passphrase und Ihr privater Schlüssel zwei Faktoren sind, ist nur eine Übung in der Sophistik. Was zählt, ist das, was auf dem Draht passiert.
Robie Basak