Beispiel PAM-Modul, das die Zwei-Faktor-Authentifizierung zum Anmelden über SSH, OpenVPN usw. zeigt.
In diesem Projekt geht es nicht darum, sich bei Google, Facebook oder anderen TOTP/Hotp -Second -Faktor -Systemen anzumelden, auch wenn sie empfehlen, die Google Authenticator -Apps zu verwenden.
Das HMAC-basierte Einmalkennwort (HOTP) ist in RFC 4226 angegeben und zeitbasiertes One-Time-Passwort (TOTP) ist in RFC 6238 angegeben.
./bootstrap.sh
./configure
make
sudo make installWenn Sie keinen Zugriff auf "sudo" haben, müssen Sie vor dem Aufrufen von "Installation" manuell "root" werden.
Stellen Sie für die höchste Sicherheit sicher, dass sowohl das Passwort als auch das OTP angefordert werden, auch wenn das Passwort und/oder die OTP falsch sind. Dies bedeutet, dass zumindest der erste von pam_unix.so (oder was auch immer ein anderes Modul verwendet wird, um Passwörter zu überprüfen) und pam_google_authenticator.so sollten nach required festgelegt werden, nicht requisite . Es kann wahrscheinlich nicht schaden, beide required zu sein, aber es könnte vom Rest Ihrer PAM -Konfiguration abhängen.
Wenn Sie Hotp verwenden (Gegenstand basiert im Gegensatz zu zeitbasiert), fügen Sie die Option no_increment_hotp hinzu, um sicherzustellen, dass der Zähler für fehlgeschlagene Versuche nicht erhöht wird.
Fügen Sie diese Zeile Ihrer PAM -Konfigurationsdatei hinzu:
auth required pam_google_authenticator.so no_increment_hotp
Führen Sie den google-authenticator Binary aus, um einen neuen geheimen Schlüssel in Ihrem Heimverzeichnis zu erstellen. Diese Einstellungen werden in ~/.google_authenticator gespeichert.
Wenn Ihr System die Bibliothek "libqRencode" unterstützt, wird Ihnen ein QRCode angezeigt, den Sie mit der Android "Google Authenticator" -Anwendung scannen können.
Wenn Ihr System nicht über diese Bibliothek verfügt, können Sie entweder der URL folgen, die google-authenticator ausgibt, oder Sie müssen die alphanumerische Geheimschlüssel manuell in die Anwendung "Google Authenticator" von Android eingeben.
Nachdem Sie den Schlüssel hinzugefügt haben, klicken Sie in jedem Fall, bis das Kontextmenü angezeigt wird. Überprüfen Sie dann, ob der Überprüfungswert des Schlüssels übereinstimmt (diese Funktion ist möglicherweise nicht in allen Builds der Android -Anwendung verfügbar).
Jedes Mal, wenn Sie sich in Ihr System anmelden, werden Sie jetzt für Ihren TOTP-Code (zeitbasierte Ein-Zeit-Password-Word) oder Hotp (konterbasiert) aufgefordert, abhängig von Optionen, die dem google-authenticator gegeben wurden, nachdem Sie Ihre normale Benutzer-ID eingegeben haben und Ihr normales UNIX -Konto Passwort.
Während des ersten Einführungsprozesses stellen Sie möglicherweise fest, dass noch nicht alle Benutzer einen geheimen Schlüssel erstellt haben. Wenn Sie immer noch möchten, dass sie sich anmelden können, können Sie die Option "Nullok" in der Befehlszeile des Moduls übergeben:
auth required pam_google_authenticator.so nullok
Wenn Ihr System Home-Verzeichnisse bis nach der Eingabe Ihrer Benutzer sein Passwort verschlüsselt, müssen Sie die Einträge in der PAM-Konfigurationsdatei entweder neu arrangieren, um das Home-Verzeichnis zu entschlüsseln, bevor Sie nach dem OTP-Code fragen, oder Sie müssen die geheime Datei in der geheimen Datei speichern Ein nicht standardmäßiger Ort:
auth required pam_google_authenticator.so secret=/var/unencrypted-home/${USER}/.google_authenticator
wäre eine mögliche Wahl. Stellen Sie sicher, dass Sie entsprechende Berechtigungen festlegen. Sie müssen Ihren Benutzern auch sagen, dass sie ihre .google_authenticator -Datei manuell an diesen Ort verschieben sollen.
Zusätzlich zu "$ {user}" erkennt die Option secret= Option sowohl "~" als auch ${HOME} als Short-Hands für das Heimverzeichnis des Benutzers.
Bei Verwendung der Option secret= Option möchten Sie möglicherweise auch die Option user= festlegen. Letzteres zwingt das PAM-Modul, vor Ablauf von Dateivorgängen zu einer dedizierten hartcodierten Benutzer-ID zu wechseln. Bei Verwendung der Option user= dürfen Sie nicht "~" oder "$ {home}" in den Dateinamen einbeziehen.
Die Option user= kann auch nützlich sein, wenn Sie Benutzer authentifizieren möchten, die keine herkömmlichen UNIX -Konten in Ihrem System haben.
Siehe "verschlüsselte Heimverzeichnisse" oben.
Überschreiben Sie die Standard -Token -Eingabeaufforderung. Wenn Sie Leerzeichen in die Eingabeaufforderung einbeziehen möchten, wickeln Sie das gesamte Argument in quadratische Klammern ein:
auth required pam_google_authenticator.so [authtok_prompt=Your secret token: ]
Erzwingen Sie das PAM-Modul, um zu einer hart codierten Benutzer-ID zu wechseln, bevor Sie Dateioperationen durchführen. Häufig mit secret= .
Gefährliche Option!
Standardmäßig verlangt das PAM -Modul, dass die Secrets -Datei die Benutzerprotokollierung in (oder wenn user= angegeben wird, der diesem Benutzer angegeben ist). Diese Option deaktiviert diese Überprüfung.
Diese Option kann verwendet werden, damit Dämonen, die nicht als Root ausgeführt werden, Konfigurationsdateien, die diesem Benutzer nicht im Besitz sind, weiterhin verarbeiten können, beispielsweise den Benutzern selbst.
Gefährliche Option!
Standardmäßig verlangt das PAM -Modul, dass die Secrets -Datei nur vom Eigentümer der Datei (Modus 0600 standardmäßig) lesbar ist. In Situationen, in denen das Modul in einer Nicht-Default-Konfiguration verwendet wird, benötigt ein Administrator möglicherweise mehr milde Dateiberechtigungen oder eine bestimmte Einstellung für seinen Anwendungsfall.
Aktivieren Sie mehr ausführliche Protokollnachrichten in Syslog.
Einige PAM -Clients können den Benutzer nicht nur für das Passwort auffordern. Um dieses Problem zu umgehen, unterstützt dieses PAM -Modul das Stapeln. Wenn Sie die Option forward_pass übergeben, fasst das Modul pam_google_authenticator den Benutzer sowohl für das Systemkennwort als auch den Überprüfungscode in einer einzigen Eingabeaufforderung ab. Anschließend wird das Systemkennwort an das nächste PAM -Modul weitergeleitet, das mit der Option use_first_pass konfiguriert werden muss.
pam_google_authenticator -Modul unterstützt wiederum sowohl die Standardoptionen "Standard use_first_pass als auch try_first_pass . Die meisten Benutzer müssten diese jedoch nicht auf dem pam_google_authenticator einstellen.
Wenn Sie feststellen, dass Ihr TOTP -Code nie funktioniert, ist dies am häufigsten das Ergebnis der Uhr auf Ihrem Server, die sich von dem auf Ihrem Android -Gerät unterscheidet. Das PAM -Modul unternimmt den Versuch, den Zeitverguss zu kompensieren. Sie können es über die Menge an Schiefern beibringen, die Sie erleben, indem Sie versuchen, es dreimal hintereinander zu protokollieren. Stellen Sie sicher, dass Sie immer die 30er Jahre warten (aber nicht länger), damit Sie drei verschiedene TOTP -Codes erhalten.
Einige Administratoren bevorzugen diese Zeit, die der Skew nicht automatisch angepasst wird, da dies zu einer etwas weniger sicheren Systemkonfiguration führt. Wenn Sie es deaktivieren möchten, können Sie dies in der Befehlszeile Modul tun:
auth required pam_google_authenticator.so noskewadj
Inkrementieren Sie den Zähler nicht für fehlgeschlagene Hotp -Versuche. Normalerweise sollten Sie dies so festlegen, dass fehlgeschlagene Passwortversuche eines Angreifers ohne Token den autorisierten Benutzer nicht ausschließen.
Ermöglichen Sie sich, sich ohne OTP zu melden, wenn sie OTP noch nicht eingerichtet haben.
PAM benötigt mindestens eine SUCCESS von einem Modul, und nullok bewirkt, dass dieses Modul IGNORE . Dies bedeutet, dass, wenn diese Option verwendet wird, mindestens ein weiteres Modul SUCCESS haben muss. Eine Möglichkeit, dies zu tun, besteht darin, auth required pam_permit.so zu hindern. So bis zum Ende der PAM -Konfiguration.
Standardmäßig spiegelt das PAM -Modul den Überprüfungscode nicht an, wenn es vom Benutzer eingegeben wird. In einigen Situationen bevorzugt der Administrator möglicherweise ein anderes Verhalten. Übergeben Sie die Option echo_verification_code an das Modul, um das Echo zu aktivieren.
Wenn Sie Überprüfungscodes wünschen, die anstelle von Zeitbasis konterbasiert sind, verwenden Sie den google-authenticator -Binary, um einen geheimen Schlüssel in Ihrem Heimverzeichnis mit der richtigen Option zu generieren. In diesem Modus ist die Takt -Verschlüsselung irrelevant und die Option der Fenstergröße gilt nun für die Anzahl der Codes, die über die aktuellen, die akzeptiert werden würden, um die Synchronisationsprobleme zu reduzieren.
Wenn Sie vorhanden und ungleich Null einen Gnadezeitraum geben, in dem ein zweiter Verifizierungscode nicht angefordert wird. Versuchen Sie, Sekunden auf 86400 einzustellen, damit ein ganztägiger Tag zwischen Anforderungscodes angezeigt wird. oder 3600 für eine Stunde.
Dies erfolgt nach einem erfolgreichen Einmalpassword-Login ein (IP-Adresse, Zeitstempel) in der Sicherheitsdatei. Nur die letzten zehn unterschiedlichen IP -Adressen werden verfolgt.
Gefährliche Option!
Mit dieser Option kann ein Angreifer mit der Möglichkeit, das Dateisystem (Flood Server mit Webanforderungen zu füllen, oder wenn er über ein Konto verfügt, einfach die Festplatte ausfüllen) eine Situation erzwingen, in der einmalige Passwords wiederverwendet werden können, um den Zweck von zu besiegen " einmal ".
Wenn die Option grace_period definiert ist, erfordert das PAM -Modul standardmäßig einen freien Speicherplatz, um die IP -Adresse und den Zeitstempel des letzten Login zu speichern. Es könnte Zugriff verhindern, wenn ein Server keinen freien Speicherplatz hat oder im Falle eines Aktualisierungs -Konfigurationsdateifehlers. Mit der Option allow_readonly können Sie alle Fehler ignorieren, die während der Aktualisierung der Konfigurationsdatei auftreten können.