Dreistufige Authentifizierung?


9

Ich benutze Ubuntu.

Ich frage mich nur, ob es möglich ist, libpam-google-authenticator (mit dem Sie sich mit einem von Ihrem Telefon generierten Code anmelden können) UND die Zertifikatauthentifizierung so einzurichten, dass sie zusammenarbeiten, und wenn dies möglich ist, wie ich vorgehen würde Einrichten. Um sich in mein Konto einzuloggen, müssen 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, aber ich habe sie nie dazu gebracht, zusammenzuarbeiten. Ich bin mir aber sicher, dass es irgendwie möglich ist.

Vielen Dank.


Normalerweise gewinnen Sie nicht viel durch doppelte Faktoren. 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 Sie sind" (Biometrie).
Zoredache

Antworten:


8

Dies ist durch Verketten von PAM-Modulen möglich. Aber bevor ich auf Details eingehe:

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

Zum Glück können Sie jederzeit im Einzelbenutzermodus starten und das Problem beheben. Seien Sie jedoch gewarnt, dass Sie mit PAM nicht mehr als nötig herumspielen möchten.

Auf jeden Fall ist die Idee dahinter , 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 erfolgreich sein müssen Sie den Zugriff 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 dies pam_unix.soerfolgreich sein soll. Es überspringt die nächsten beiden Regeln (die normalerweise ein anderes Authentifizierungsmodul sind und dann pam_deny.so) und fährt 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 weitergegeben. Dies setzt jedes Authentifizierungsmodul fort, bis entweder die Steuerung zum optionalen Block springt oder PAM auf pam_deny.so trifft und genau dort fehlschlägt.

Dies kann genutzt werden, um sicherzustellen pam-google-authenticator, pam_unix.sound Ihr Zertifikat PAM - Modul alle erfolgreich sein müssen Sie den Zugriff zu ermöglichen. Ich kenne den Namen des Google-Authentifizierungsmoduls oder des von Ihnen verwendeten Zertifikatmoduls nicht, aber Sie sollten sie in Ihrer Common-Auth-Datei finden können. Wenn Sie also so etwas ganz oben platzieren:

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 [1 = Erfolg = n Standard = Ignorieren] + 1 des obersten Authentifizierungsmoduls gesetzt werden. Diese Syntax ist etwas funky , überspringt jedoch im Wesentlichen die Authentifizierungsmodule, nachdem die oben genannten Module erfolgreich waren.

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

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

Wo <username>wird durch Ihren Benutzernamen ersetzt. Diese Zeile sagt einfach, dass pAM_succeed_if.so erfolgreich sein sollte (auch bekannt als Ihr Benutzername mit dem Benutzernamen in dieser Zeile übereinstimmt), dann sollte PAM mit den nächsten Modulen fortfahren, die die dreistufigen Authentifizierungsmodule sind. Andernfalls sollte PAM zu den realen Modulen springen, die 4 Module von diesem entfernt sind.

Um mehrere Dinge abzugleichen, z. B. die Mitgliedschaft in einer Gruppe zusammen mit einem bestimmten Benutzernamen, müssen mehrere Zeilen verwendet werden, zum Beispiel:

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 dies tue, würde ich die Common-Auth-Datei sichern und mich auch 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 zum ersten Mal zu testen, öffnen Sie ein oder zwei Root-Shells und lassen Sie sie einfach in Ruhe. Diese dienen als Fallbacks für den Fall, dass etwas schief geht, da Sie Common-Auth problemlos durch das Backup ersetzen können. Nehmen Sie dann diese Änderungen vor. Versuchen Sie als Nächstes, susich bei Ihrem Benutzerkonto anzumelden. Sie sollten den dreistufigen Authentifizierungsprozess durchlaufen müssen.

Die vollständige Dokumentation des pam_succeed_if.soModuls finden Sie unter http://linux.die.net/man/8/pam_succeed_if


Hervorragende Antwort! Wenn ich dies mehr als einmal positiv bewerten könnte, würde ich es tun.
Aaron Miller

Vielen Dank! Obwohl - Für die Zertifikatsanmeldung füge ich meinen öffentlichen Schlüssel zu .ssh / authorized_keys hinzu (unter Verwendung der Einstellungen für RSAAuthentication und PubkeyAuthentication in sshd_config) und für den OTP-Code verwende ich pam_google_authenticator - google-authenticator.googlecode.com/hg . Wie würde das funktionieren?
Jesse W

@JesseW Damit dies funktioniert, müssen Sie SSHD so einstellen, dass sowohl PAM als auch ein öffentlicher Schlüssel verwendet werden. Obwohl ich mir bei den Einzelheiten nicht sicher bin, müssen Sie auf jeden Fall "Ja" setzen ChallengeResponseAuthenticationund UsePAMdann die in meiner obigen Antwort beschriebenen Zeilen entweder in /etc/pam.d/sshd oder /etc/pam.d/common setzen -auth, abhängig davon, ob Sie dies entweder für alle Anmeldungen oder nur für SSH ausführen möchten. Denken Sie daran, die Füllzeile 'pam_certificate_auth.so' zu entfernen und die Zeile [success = <n> als Ergebnis zu ändern.
Xenopathic

2

Ich habe diesen Beitrag gelesen und fand ihn cool - hier ist, wie ich die Drei-Faktor-Authentifizierung zum Laufen gebracht habe. Ich schrieb einen Blog - Post über sie hier .

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

Aus / etc / ssh / sshd_conf

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

1

Nur Pubkey + GoogleAuth müssen Sie oben auf Ihrer /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.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.