SSH-Authentifizierung: entweder SSH-Schlüssel oder Einmalkennwort

8

Ich habe einen Ubuntu 10.04 Linux-Server, auf den ich normalerweise (von meinem Heimcomputer) mithilfe der SSH-Schlüsselauthentifizierung ssh. Manchmal muss ich jedoch von potenziell unsicheren Computern (wie Internetcafés, öffentlichen Computern in der Bibliothek usw.) fernsenden, auf denen mein Kennwort möglicherweise kompromittiert wird. In diesem Fall möchte ich ein Einmalkennwortsystem wie OTPW oder Steve Gibsons Perfect Paper Passwords verwenden .

Wie kann ich meinen Server so konfigurieren, dass er zuerst nach SSH-Schlüsseln sucht und dann ein OTPW-System zur Authentifizierung verwendet? (Müsste ich zwei Benutzer machen?)

mr_schlomo
quelle

Antworten:

5

Obwohl diese Methode nicht nach einer Authentifizierungsmethode sucht, löst sie das Problem der Anmeldung von unsicheren / nicht vertrauenswürdigen Computern mithilfe von OTP.

Um den SSH-Dämon so zu konfigurieren, dass er mehrere Ports überwacht (einen für die Authentifizierung mit öffentlichem Schlüssel und einen für die OTP-Authentifizierung), fügen Sie der Datei sshd_config einfach eine weitere Portnummer hinzu, d. H.

Port 22 # For key-based auth
Port 60000 # For OTP-based auth

Der 2-FA basiert auf der 2-Schritt-Authentifizierungstechnologie von Google. So installieren Sie die Bibliothek und das Programm:

$ sudo apt-get install libpam-google-authenticator

Installieren Sie in der Zwischenzeit die Google Authenticator-App auf Ihrem Smartphone. Nach der Installation starten Sie das Programm vom Terminal aus:

$ google-authenticator

Dadurch erhalten Sie einen Barcode, ein Geheimnis und eine Reihe von Rubbelcodes. BESCHÜTZE SIE!!! Wenn Sie keinen Zugriff auf Ihr Telefon haben oder anderweitig einen Notfallzugriff benötigen, sind diese Codes Ihr einziger Weg. Unterschätzen Sie nicht, wie wichtig dieser Sicherungsmechanismus ist. Es könnte Sie auf lange Sicht verarschen. Konfigurieren Sie das PAM-Modul für die Verwendung von Google Authenticator:

$ sudo nano /etc/pam.d/sshd

Um die Kennwortanmeldung danach zu deaktivieren, setzen Sie ein # vor die Zeile @include common-auth. Fügen Sie am Ende der Datei Folgendes hinzu:

auth required pam_google_authenticator.so

So aktivieren Sie die OTP-Authentifizierung:

$ sudo nano /etc/ssh/sshd_config

Suchen Sie die Zeile mit der Phrase: ChallengeResponseAuthenticationund ändern Sie sie von "Nein" in "Ja".

Setze PermitRootLogin nound PasswordAuthentication no.

Verwenden Sie am Ende der Datei den Parameter "match", um zu bestimmen, welche Authentifizierungsmechanismen verwendet werden müssen, um von diesem Port aus auf den Computer zuzugreifen. Beispiel:

Match LocalPort 22
    PasswordAuthentication no
    AuthenticationMethods publickey
    PubKeyAuthentication yes
​
Match LocalPort 60000
    AuthenticationMethods keyboard-interactive:pam

Der Parameter „Tastatur-interaktiv: pam“ zwingt den SSH-Dämon, zum PAM-Modul-Dämon (konfiguriert unter /etc/pam.d/sshd) zu wechseln und sich wie dort angegeben zu authentifizieren (daher muss auch die Kennwortanmeldung vom PAM-Modul deaktiviert werden, indem die common-authZeile gestrichen wird ). . Vergessen Sie nicht, Ihren SSH-Daemon neu zu starten, damit die Änderungen wirksam werden:

$ sudo /etc/init.d/sshd restart

Wenn Sie sich dann auf einem nicht vertrauenswürdigen Computer befinden, senden Sie einfach SSH an Port 60000 (oder was auch immer Sie einstellen) und verwenden Sie OTP zur Authentifizierung.

Glattbutt
quelle
3

Public-Key-Authentifizierung mit OTP als Fallback (das haben Sie gemeint, oder?):

  1. Public-Key-Auth mit Password-Fallback ist das Standardverhalten von OpenSSH
  2. Wie Ihr Passwort überprüft wird, wird am besten in den PAM-Konfigurationsdateien definiert
sborsky
quelle
3

Edit: sorry für die Beantwortung meiner eigenen Frage! (Die anderen beiden Antworten sind großartig, aber beantworten Sie die Frage nicht vollständig. Aber immer noch sehr hilfreich!)

Das OTPassword Pluggable Authentication Module implementiert Steve Gibsons Perfect Paper Password-System in einer PAM für Linux. Sobald Sie das installiert haben, haben Sie die PPP-Authentifizierung. Aber was ist mit einem SSB-Schlüssel-Bypass? Eine FAQ auf ihrer Website beantwortet diese Frage:

Wenn Sie einen vertrauenswürdigen Computer haben, von dem aus Sie sich häufig bei Ihrem Remote-System anmelden, verwenden Sie SSH-Schlüssel. Generieren Sie sie mit ssh-keygenund kopieren Sie Ihre neue Datei ~ / .ssh / id_rsa.pub in ~ / .ssh / autorisierte_keys auf dem Remotecomputer. Wenn SSH den Benutzer mit Schlüsseln authentifiziert, wird PAM weggelassen.

Praktisch automatisch!

Bearbeiten: Google Authenticator und Duo Security scheinen ebenfalls gute Lösungen zu sein. Sie geben keine Einmalpasswörter auf Papier an. Stattdessen generieren sie mit Ihrem Smartphone einen sich ständig ändernden TOTP-Schlüssel . (Duo Security funktioniert auch mit Dumbphones, indem ihnen eine Textnachricht mit einigen Einmalkennwörtern gesendet wird. Duo Security ist jedoch nicht lokal; Sie müssen sich auf deren Server verlassen ...)

mr_schlomo
quelle
Auch Barada ist eine andere Lösung vor, dass sieht vielversprechend aus ; Anstelle von Einmalpasswörtern aus Papier wird ein Passwort verwendet, um das Passwort aus einer von Ihnen angegebenen PIN zu generieren. Wenn Sie sich auf einem vertrauenswürdigen System befinden, können Sie einfach Ihr Standardkennwort eingeben.
mr_schlomo
Ein aktiveres Projekt ist Google Authenticator .
mr_schlomo
Es tut mir leid, einen weiteren Kommentar hinzuzufügen, aber ich habe Duo Security gefunden, das auch wie eine großartige Optw / Dual-Faktor-Authentifizierungsoption aussieht.
mr_schlomo
Sie sollten Ihre Antwort so bearbeiten, dass sie all das enthält.
Mat
1

Dies kann einfach sein, es gibt jedoch auch einige Fallstricke, die Sie vermeiden sollten:

Die meisten Konfigurationsänderungen müssen in der Datei sshd_config vorgenommen werden, die sich normalerweise unter / etc / ssh / sshd_config befindet

Sie haben bereits freigegebene Schlüssel ausgeführt, daher überspringe ich das hier:

Die Zeile, auf die Sie achten möchten, lautet:

PasswordAuthentication yes

Die Einschränkungen, die Sie beachten möchten, bestehen darin, zu begrenzen, wer sich wie anmelden kann. Diese sollten ALLE vorhanden sein, um den Zugriff auf eine möglichst kleine Benutzergruppe zu beschränken:

PermitEmptyPasswords no
AllowUsers [email protected].*
AllowGroups sshusers

Es gibt viele Optionen, die Sie hier festlegen können. In der Manpage finden Sie alle verfügbaren Optionen.

Ich würde empfehlen, eine Gruppe nur für SSH-Berechtigungen einzurichten.

Die folgende Flagge wird ebenfalls dringend empfohlen:

PermitRootLogin no

Dadurch fordert der Dämon ein Kennwort an, wenn der Schlüssel nicht gesendet / neu konfiguriert wird. Sie können die Hürde von OTPW hinzufügen, wenn Sie möchten, aber Sie befinden sich theoretisch in einer verschlüsselten Umgebung, sodass dies nicht unbedingt erforderlich sein sollte. Nachdem ich mir die OTPW-Informationen angesehen habe, die Sie verlinkt haben, scheint der Code zuletzt 2003 aktualisiert worden zu sein. Ich würde es ablehnen, ihn zu verwenden, ohne eine Peer-Review zu erhalten. Sichere Codierungspraktiken und in der Tat die gesamte Umgebung haben sich seitdem stark verändert.

Patrick
quelle