Drei-Schritt-Authentifizierung

2279
Jesse W

Ich benutze Ubuntu.

Ich frage mich nur, ob es möglich ist, über libpam-google-authenticator zu verfügen (wodurch Sie sich mit einem von Ihrem Telefon generierten Code anmelden können) UND die Zertifikatsauthentifizierung so eingerichtet ist, dass sie zusammenarbeiten kann es einrichten. Also - um sich in mein Konto einzuloggen, müssten Sie mein Passwort, mein Telefon (und seinen Passcode) UND mein Zertifikat / privaten Schlüssel und sein Passwort haben.

Ich habe beide dazu gebracht, unabhängig zu arbeiten, habe es aber nie geschafft, dass sie zusammenarbeiten. Ich bin mir sicher, dass es irgendwie möglich ist.

Vielen Dank.

8
Normalerweise gewinnen Sie durch doppelte Faktoren nicht viel. Ein Zertifikat und ein Codegenerator passen zum Faktor "etwas, das Sie haben". Ein Passwort passt zu "etwas, das Sie wissen". Der andere gemeinsame Faktor ist "Etwas, was du bist" (Biometrie). Zoredache vor 11 Jahren 0

3 Antworten auf die Frage

7
Xenopathic

Dies ist möglich, indem PAM-Module miteinander verkettet werden. Aber bevor ich ins Detail gehe:

Eine falsche Konfiguration von PAM kann und WILL verhindern, dass Sie sich bei Ihrem System anmelden

Glücklicherweise können Sie immer im Einzelbenutzermodus starten und das Problem beheben. Seien Sie jedoch nur gewarnt, dass PAM nicht etwas ist, mit dem Sie mehr als nötig anstellen wollen.

Wie auch immer, die Idee dahinter ist, dass es möglich ist, das Stapeln PAM - Module zu verwenden, um sicherzustellen, dass pam-google-authenticator, pam_unix(dies überprüft Ihr Passwort) und das Zertifikat Modul alle haben erfolgreich zu sein, um Ihnen den Zugang zu ermöglichen. Standardmäßig ist PAM so konfiguriert, dass jedes Authentifizierungsmodul Sie authentifizieren kann, wobei die anderen übersprungen werden.

In /etc/pam.d/common-auth sehen Sie oben eine Zeile, die der folgenden ähnelt:

auth [success=2 default=ignore] pam_unix.so nullok_secure try_first_pass 

Dies teilt PAM mit, dass es pam_unix.soerfolgreich sein sollte, es überspringt die nächsten beiden Regeln (die normalerweise ein anderes Authentifizierungsmodul sind und dann pam_deny.so) und fahren mit den optionalen Modulen fort. Sollte das Modul jedoch ausfallen, wird es ignoriert und die Steuerung wird an das nächste Modul in der Kette übergeben. Dies setzt jedes Authentifizierungsmodul fort, bis entweder die Steuerung zum optionalen Block springt oder PAM auf pam_deny.so trifft und genau dort ausfällt.

Dies kann genutzt werden, um sicherzustellen pam-google-authenticator, pam_unix.sound Ihr Zertifikat PAM - Modul alle müssen gelingt es Ihnen den Zugang zu ermöglichen. Ich kenne den Namen des Google-Authentifizierungsmoduls oder des von Ihnen verwendeten Zertifikatmoduls nicht, aber Sie sollten sie in der Datei "common-auth" finden können. Also, indem Sie so etwas an die Spitze setzen:

auth requisite pam_unix.so nullok_secure auth requisite pam_google_authenticator.so auth requisite pam_certificate_auth.so auth [success=<n>] pam_permit.so 

Ersetzen <n>durch die Anzahl der Module zwischen dem Modul pam_permit.so hier und dem nächsten pam_permit.soModul - mit anderen Worten, dies sollte auf den Code [success = n default = ignore] des obersten Auth-Moduls + 1 gesetzt werden. Diese Syntax ist etwas funky, überspringt jedoch im Wesentlichen die Auth-Module, nachdem die oben genannten Module erfolgreich waren.

Natürlich fragen Sie sich vielleicht, wie Sie diese dreistufige Authentifizierung auf Ihr Benutzerkonto beschränken können. Dies kann mit einem pam_succeed_if.soModul erfolgen und sollte über dem oben beschriebenen dreistufigen auth-Block eingefügt werden:

auth [success=ignore default=4] pam_succeed_if.so user = <username> 

Wo <username>wird durch Ihren Benutzernamen ersetzt. Diese Zeile besagt einfach, dass, wenn pam_succeed_if.so erfolgreich ist (dh Ihr Benutzername entspricht dem Benutzernamen in dieser Zeile), PAM dann mit den nächsten Modulen fortfährt, bei denen es sich um die dreistufigen Auth-Module handelt. Ansonsten sollte PAM zu den realen Modulen springen, die 4 Module von diesem entfernt sind.

Um mehrere Elemente abgleichen zu können, beispielsweise die Mitgliedschaft einer Gruppe mit einem bestimmten Benutzernamen, müssen mehrere Zeilen verwendet werden, beispielsweise:

auth [success=1 default=ignore] pam_succeed_if.so user = <username> auth [success=ignore default=4] pam_succeed_if.so user ingroup <group> 

Bevor ich irgendetwas davon mache, würde ich die common-auth-Datei sichern und mich mit dem Einzelbenutzermodus und der Wiederherstellung der alten Datei im Notfall vertraut machen. Diese Konfiguration wurde von mir nicht getestet, sollte aber funktionieren.

Um dies das erste Mal zu testen, öffnen Sie eine oder zwei Root-Shell und lassen Sie sie einfach in Ruhe. Diese dienen als Fallbacks für den Fall, dass irgendetwas schief geht, da Sie common-auth leicht durch das Backup ersetzen können. Nehmen Sie dann diese Änderungen vor. Versuchen Sie als Nächstes, sich mit suIhrem Benutzerkonto anzumelden. Sie sollten den dreistufigen Authentifizierungsprozess durchlaufen.

Die vollständige Dokumentation für das pam_succeed_if.soModul finden Sie unter http://linux.die.net/man/8/pam_succeed_if

Ausgezeichnete Antwort! Wenn ich das mehr als einmal bestätigen könnte, würde ich das tun. Aaron Miller vor 11 Jahren 0
Vielen Dank! Obwohl - Für die Zertifikatsanmeldung füge ich meinen öffentlichen Schlüssel in .ssh / Authorized_keys hinzu (unter Verwendung der Einstellungen RSAAuthentication und PubkeyAuthentication in sshd_config) und für den OTP-Code verwende ich pam_google_authenticator - https://google-authenticator.googlecode.com/ hg /. Wie würde das funktionieren? Jesse W vor 11 Jahren 0
@JesseW Damit dies funktioniert, müssen Sie SSHD so einstellen, dass PAM sowie ein öffentlicher Schlüssel verwendet werden. Ich bin mir zwar nicht sicher, was genau ist, aber Sie müssen 'ChallengeResponseAuthentication' und 'UsePAM' auf 'yes' setzen. Setzen Sie dann die in meiner Antwort genannten Zeilen entweder auf /etc/pam.d/sshd oder / etc /pam.d/common-auth, abhängig davon, ob Sie dies entweder für alle Anmeldungen oder nur für SSH durchführen möchten. Denken Sie daran, die Fülllinie 'pam_certificate_auth.so' zu entfernen und die Option [success =] zu ändern Linie als Ergebnis. Xenopathic vor 11 Jahren 0
2
Einar

Ich habe diesen Beitrag gelesen und fand es cool - so habe ich die Drei-Faktoren-Authentifizierung zum Laufen gebracht. Ich schrieb einen Blog - Post über sie hier .

Grundsätzlich habe ich Google Authenticator und Passwort in PAM eingerichtet, anschließend die Authentifizierung mit öffentlichen Schlüsseln in OpenSSH (dies umgeht die beiden anderen) und schließlich von OpenSSH die Authentifizierung über PAM (letzte Zeile).

Aus / etc / ssh / sshd_conf

PubkeyAuthentication yes ChallengeResponseAuthentication yes PasswordAuthentication no UsePAM yes AuthenticationMethods publickey,keyboard-interactive 
1
x4k3p

Nur Pubkey + GoogleAuth müssen Sie oben in /etc/pam.d/sshd hinzufügen

#auth requisite pam_unix.so nullok_secure #if you want password, too :) auth requisite pam_google_authenticator.so auth [success=2] pam_permit.so 

Ich nehme an, Sie haben OpenSSH> = 6.2 und sshd_config bearbeitet

Für mehr paranoide Sicherheit fügen Sie einige zusätzliche Konfigurationen hinzu: D