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