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.so
erfolgreich 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.so
und 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.so
Modul - 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.so
Modul 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, su
sich bei Ihrem Benutzerkonto anzumelden. Sie sollten den dreistufigen Authentifizierungsprozess durchlaufen müssen.
Die vollständige Dokumentation des pam_succeed_if.so
Moduls finden Sie unter http://linux.die.net/man/8/pam_succeed_if