Einführung
SSH ist mit einer Reihe von Sicherheitsfunktionen ausgestattet, die sicherstellen, dass Ihre Verbindungen sicher sind und Sie sich problemlos bei einem Remote-Host authentifizieren können. Insbesondere mit SSH-Schlüsseln können Sie eine sichere Verbindung herstellen, ohne Ihr Kennwort oder Ihre Passphrase über das Internet zu übertragen.
Es gibt jedoch Situationen, in denen die Verwendung eines SSH-Schlüssels nicht sinnvoll oder möglicherweise unsicher ist. Angenommen, Sie versuchen, SSH von einem öffentlichen Computer aus oder von einem Computer aus zu verwenden, für den Sie eine Fehlerbehebung durchführen möchten. Das Public-Key-System geht davon aus, dass der Computer, von dem aus Sie eine Verbindung herstellen, zumindest einigermaßen vertrauenswürdig ist. Dies ist nicht immer der Fall.
Wenn Sie in diesem Szenario ein Schlüsselpaar verwenden, wird der Schlüssel, auch wenn er kennwortgeschützt ist, entschlüsselt und im Arbeitsspeicher des lokalen Computers abgelegt, um zumindest eine Authentifizierung durchzuführen. Dies bedeutet, dass es anfällig ist, wenn Sie dem lokalen Computer nicht vertrauen.
Ein System mit der Bezeichnung * Einmalkennwortauthentifizierung * oder OTPW wurde erstellt, um unter diesen Umständen zu funktionieren. Einmalpasswörter sind ein System, das in andere Autorisierungsmechanismen wie Zwei-Faktor-Authentifizierung und Single-Sign-On-Lösungen integriert wurde.
In diesem Handbuch richten wir OTPW auf einer Ubuntu 14.04 VPS-Instanz ein. Auf diese Weise können wir uns mit einem Zweikomponenten-Passwort anmelden, das nur einmal verwendet werden darf.
Basiskonzept
Die Funktionsweise von OTPW besteht darin, sich in das PAM-Authentifizierungssystem einzuhängen.
Nachdem Sie Ihr System so konfiguriert haben, dass Anmeldungen mit OTPW zulässig sind, können Sie einen Satz von Kennwort-Chunks generieren, indem Sie ein Präfixkennwort eingeben. Sie können diese dann entweder ausdrucken, auf einem Gerät aufbewahren, auf das Sie Zugriff haben und dem Sie vertrauen (wie auf Ihrem Telefon verschlüsselt), oder in einem anderen Format, auf das Sie ohne mit dem Computer zugreifen können, dem Sie nicht vertrauen.
Wenn Sie nun zur Eingabe eines Passworts aufgefordert werden, erhalten Sie eine Referenznummer. Sie geben das von Ihnen erstellte Präfixkennwort ein, gefolgt von dem Kennwortteil, der der angegebenen Referenznummer zugeordnet ist.
Dieses Passwort funktioniert nur einmal. Wenn sich jemand auf Ihrem Computer mit dem Schlüssel anmeldet oder sehen kann, dass Sie das Kennwort eingeben, spielt dies keine Rolle, da es nach dem Anmelden nicht mehr gültig ist.
Installieren Sie die Komponenten
Um dieses System zu konfigurieren, müssen Sie zuerst die erforderlichen Komponenten installieren.
Da die Authentifizierung vollständig serverseitig erfolgt und sich das Client-Ende nicht von einer normalen Passwortabfrage unterscheidet, werden nur einige Pakete auf unserem Server installiert.
Wir aktualisieren unseren Paket-Cache und installieren diese aus dem Repository:
sudo apt-get update
sudo apt-get install otpw-bin libpam-otpw
Wie Sie sehen, ist der Mechanismus in zwei Teile unterteilt. Die erste Komponente dient zum Generieren und Verwalten der Einmalpasswörter. Das zweite ist das Plugin, das mit PAM zur Authentifizierung anhand dieser Kennwortdateien verwendet wird.
Bearbeiten von PAM zur Nutzung von OTPW
Bevor wir mit unseren tatsächlichen Passwörtern etwas anfangen können, müssen wir OTPW als Option für PAM hinzufügen.
Wir möchten dies auf eine Art und Weise erreichen, die reguläre Passwortanmeldungen einschränkt, da wir davon ausgehen, dass Sie bereits https://www.digitalocean.com/community/articles/how-to-set-up-ssh-keys—2 [ SSH-Schlüssel einrichten] für die Authentifizierung auf Computern, denen Sie vertrauen. Unsere Konfiguration verwendet die SSH-Schlüssel, wenn sie verfügbar sind, andernfalls greift sie auf den OTPW-Mechanismus zurück.
Zu diesem Zweck ändern wir nur die Datei, die für die SSH-Anmeldung erforderlich ist. Dies beeinträchtigt weder unsere lokalen Anmeldungen noch unsere Anmeldungen über die DigitalOcean-Webkonsole.
Öffnen Sie die SSH PAM-Konfigurationsdatei:
sudo nano /etc/pam.d/sshd
Oben in der Datei befindet sich eine Direktive zum Importieren der Datei + common-auth +
. Diese Datei ermöglicht die regelmäßige Kennwortauthentifizierung ohne Verwendung des OTPW-Systems, das wir für unsere SSH-Sitzungen nicht benötigen. Lassen Sie uns das kommentieren:
#@include common-auth
Nachfolgend fügen wir einige Zeilen hinzu, mit denen wir das OTPW-System zur Verarbeitung von Kennwortanforderungen verwenden können:
auth required pam_otpw.so
session optional pam_otpw.so
Wenn Sie fertig sind, speichern und schließen Sie die Datei.
Konfigurieren Sie SSHD
Nachdem wir das PAM-Modul des SSH-Dämons für die Verwendung von OTPW konfiguriert haben, können wir den Dämon selbst mit den entsprechenden Werten konfigurieren.
Öffnen Sie die Datei mit Root-Rechten, um die Datei auszuchecken:
sudo nano /etc/ssh/sshd_config
Wir suchen nach ein paar separaten Werten. Wir müssen überprüfen, ob jeder dieser Parameter auf den folgenden Wert eingestellt ist. Wenn Sie keinen der Parameter finden können, fügen Sie diese hinzu und stellen Sie sie ein. Stellen Sie jedoch sicher, dass Parameter nicht mehrmals hinzugefügt werden, da dies zu einem Fehlschlagen des Dämons führen kann.
UsePrivilegeSeparation yes
PubkeyAuthentication yes
ChallengeResponseAuthentication yes
PasswordAuthentication no
UsePAM yes
Wenn Sie diese Parameter festgelegt haben, möchten Sie unseren SSH-Daemon neu starten, damit unsere Änderungen wirksam werden:
sudo service ssh restart
Erstellen von OTPW-Passwortdateien
Nachdem unser System für die Verwendung von OTPW für SSH-Benutzer konfiguriert wurde, die keinen öffentlichen Schlüssel haben, können wir die beiden Kennwortdateien erstellen, die für das Funktionieren dieses Systems erforderlich sind.
Eine Datei, die in + ~ / .otpw +
gespeichert wird, enthält einen Hash-Wert der Passwortsegmente, einen pro Zeile. Die zweite Datei, die wir erstellen, sind die für Menschen lesbaren Einmalpasswortsegmente, die wir auf ein sicheres Gerät kopieren, ausdrucken oder auf andere Weise an einem sicheren, tragbaren Ort aufbewahren sollten.
Alles, was wir tun müssen, um diese Liste zu generieren, ist den Befehl + otpw-gen +
aufzurufen. Dies würde normalerweise den für Menschen lesbaren Text als Standardausgabe ausgeben, aber wir können ihn zur Sicherheit in eine Datei umleiten:
cd ~
otpw-gen > nothingtosee.txt
Dadurch wird ein zufälliger Startwert generiert und nach einem Kennwortpräfix gefragt. Sie sollten dieselben Regeln für gesunden Menschenverstand verwenden, die Sie für jedes normale Kennwort verwenden würden. Stellen Sie sicher, dass Sie sich das Passwort merken.
Danach erhalten Sie eine "+ ~ / .otpw +" - Datei, die die Hashwerte der Passwortsuffixe enthält, eine pro Zeile:
OTPW1
280 3 12 8
253tFMngG2PNYhn
132Kua%SZ+esb6t
237yH7D2FMbQsyW
125rrXfBRwnF+A%
106gJxhJE4jkknj
04135:5:knWIB4:
232/d4kI:n57IcD
244RASe8ka63b8Z
057GmqfFe=pXQqu
. . .
Sie haben auch Ihre nicht-gekürzten Suffixe mit ihrer Referenznummer in eine Datei unter "+ ~ / nothingtosee.txt +" weitergeleitet.
OTPW list generated 2014-04-03 18:06 on sshd
000 /rGF h5Hq 056 /zi5 %yTJ 112 J7BT HdM= 168 fdBm X%Tn 224 69bi =9mE
001 GoOG jxYQ 057 E=o3 kuEF 113 zwit p27J 169 nHK9 CXRx 225 IihF =o8g
002 Xm=E PuXc 058 Ok27 ZJ++ 114 On=5 pNYH 170 ZRDa mB5e 226 yYsb CAfn
003 deL+ iHs7 059 /WGS :J4M 115 ZZd/ 8zyU 171 acDd dESV 227 ddjg ipcR
004 KhDn NdfS 060 =tEz ACye 116 FkQ9 8kSu 172 iRSR nZWT 228 9hHd veZ9
005 rGFG K5=7 061 MvUW LRxc 117 2YwY axJJ 173 kEV5 T/Vz 229 wx%n Le6P
006 GWi2 fHjf 062 qOR: WN2x 118 FvD4 oNjT 174 99OT 8KPy 230 /I=Y hicP
007 XPom pEYp 063 8Xvm vZGa 119 UNjF :Kys 175 b95i SU3R 231 keLn aDcK
008 fJI% 3Qs2 064 3I7Q I2xc 120 5Tm9 REQK 176 AVg: 4ijE 232 :aIF op6V
009 P/Sn dSxA 065 A+J6 =4zo 121 LAyj 3m2+ 177 TMuN 9rJZ 233 SWvB %+cL
. . .
Die linke Spalte ist die Referenznummer, gefolgt von 8 Zeichen für das Suffix. Das Leerzeichen zwischen den ersten und letzten 4 Zeichen im Suffix dient der Lesbarkeit und kann optional entfernt werden, wenn Sie das Suffix eingeben.
Standardmäßig erzeugt der Generator genügend Suffixe, um auf ein Standardpapier zu passen, das sich hervorragend zum Drucken eignet und eine Möglichkeit zum Übertragen der Ausgabe bietet.
Sie müssen dieses Verfahren für jeden Benutzer ausführen, für den Sie den Einmalkennwortzugriff konfigurieren möchten.
Probieren Sie es aus
Auf einem Computer, der nicht mit Ihrem SSH-Schlüssel konfiguriert ist (Sie können Ihren Schlüssel auch vorübergehend aus Ihrem Verzeichnis "+ ~ / .ssh +" verschieben), können Sie das neue Einmalkennwortsystem testen.
Melden Sie sich bei dem Benutzer an, den Sie wie gewohnt mit OTPW konfiguriert haben:
'' '' '
Password 253:
Wie Sie sehen, wurde uns das von OTPW gewünschte Suffix gegeben.
Geben Sie zunächst Ihr Präfixkennwort ein, direkt gefolgt vom Suffix in derselben Zeile, ohne ein Leerzeichen zwischen Ihrem Präfixkennwort und dem Suffix. Sie können den in der Suffixdatei angezeigten Speicherplatz beibehalten, wenn Sie dies wünschen.
Nehmen wir also an, mein Präfix-Passwort lautet "crazyburr! To" und die Suffix-Datei enthält eine Spalte, die wie folgt aussieht:
249 N4HY RsbH
250 +vAz fawn
251 O4/R ZrhM
252 c6kP jgUT
254 aYzA :F64
255 3ezp ZpIq
256 ggIi TD2v
In diesem Fall könnten wir entweder "crazyburr! ToI = aA OKSz" oder "crazyburr! ToI = aAOKSz" eingeben.
Sie sollten sich dann problemlos einloggen können. Wenn Sie Ihre + ~ / .otpw +
- Datei überprüfen, werden Sie feststellen, dass eine der durchgestrichenen Zeilen durch Bindestriche ersetzt wurde:
. . .
091icM5kSPVOdcU
274Uf3q/=kTYcu8
229fHfmIsCj7mjQ
---------------
115EzDO6=jM/sOT
143iWCdteSk3kg7
265S+QTGcg+MAZO
174UgXchxsI2g:G
. . .
Dies bedeutet, dass das Suffix verwendet wurde und nicht mehr gültig ist.
Wenn zwei Personen gleichzeitig versuchen, sich in das Konto einzuloggen, fordert OTPW stattdessen Ihr Präfixkennwort an, gefolgt von drei Suffixen. Jedes der drei angeforderten Suffixe ist unterschiedlich, sodass jemand, der Keylogging ausführt und versucht, Sie zu schlagen, um die Eingabetaste zu drücken, nicht in der Lage ist, dies erfolgreich abzuschließen.
Die Eingabeaufforderung sieht folgendermaßen aus:
Password 161/208/252:
In diesem Fall wird eine "+ ~ / .otpw.lock +" - Datei erstellt. Nach einer erfolgreichen Anmeldung sollte es entfernt werden, aber es gibt einen Fehler, der dazu führt, dass dies in einigen Situationen nicht funktioniert. In diesem Fall entfernen Sie die Sperre einfach manuell:
rm ~/.otpw.lock
Beim nächsten Mal werden Sie erneut aufgefordert, nur ein Kennwort einzugeben.
Vorbehalte und Bugs
Ich habe oben erwähnt, wie manchmal die Sperrdatei nicht automatisch gelöscht wird, nachdem Sie sich erfolgreich angemeldet haben. Dies ist insbesondere dann der Fall, wenn ein Benutzer die Verbindung durch Eingabe von STRG-C abbricht, bevor die Eingabeaufforderung beendet wird.
Ein weiterer Fehler, der relativ wichtig ist, ist das Melden der Anzahl der verbleibenden gültigen OTPW-Einträge. Dies wird normalerweise von der Sitzungszeile in der PAM-Konfiguration erledigt, funktioniert jedoch derzeit nicht ordnungsgemäß.
Um dies zu umgehen, hat Wolfgang Kroener ein sehr einfaches Bash-Skript geschrieben, das diese Funktionalität in this Debian-Mailinglisten-Thread implementiert. Wir können dies auf verschiedene Arten implementieren, aber am einfachsten ist es, es den Benutzern, die OTPW implementieren, am Ende von + ~ / .bashrc +
hinzuzufügen:
nano ~/.bashrc
Fügen Sie nach unten Folgendes ein:
if [ "$SSH_TTY" -a -f $HOME/.otpw ]; then
PW_LINES=$(wc -l <$HOME/.otpw)
PW_USED=$(grep -- ---- $HOME/.otpw | wc -l)
echo "OTPW $PW_USED/`echo $PW_LINES-2 | bc` used"
fi
Sie können dies auch an einem zentraleren Ort hinzufügen. Auf diese Weise wird es je nachdem ausgegeben, ob die Datei "+ ~ / .otpw +" für jeden Benutzer vorhanden ist.
Wenn Sie sich jetzt anmelden, erhalten Sie Statistiken zu Ihren derzeit verbleibenden Passwörtern:
OTPW 6/280 used
OTPW empfiehlt, dass Sie Ihre Passwortliste neu erstellen, wenn Sie weniger als 50% Ihrer verfügbaren Passwörter erhalten. Sie können dies tun, indem Sie den Befehl generation erneut ausführen:
otpw-gen > anotherfile.txt
Dadurch werden Ihre vorherigen Kennwortsuffixe überschrieben und können nach diesem Vorgang nicht mehr verwendet werden.
Fazit
Das Einrichten von OTPW bietet Ihnen die Möglichkeit, sich von einem unsicheren Standort aus bei Ihrem Server anzumelden. Es weist zwar einige der Nachteile normaler Kennwortanmeldungen auf, bietet jedoch einen Mittelweg zwischen schlüsselbasierten Anmeldungen, die niemals auf einen unsicheren Computer übertragen werden sollten, und regelmäßigen Kennwortanmeldungen, die viele Fehler und Schwachstellen aufweisen.