Il est possible de le faire en enchaînant les modules PAM. Mais avant d'entrer dans les détails:
Une configuration incorrecte de PAM peut et vous empêchera de vous connecter à votre système
Heureusement, vous pouvez toujours démarrer en mode mono-utilisateur et résoudre le problème, mais sachez que PAM n'est pas quelque chose avec lequel vous voulez jouer plus que nécessaire.
Quoi qu'il en soit, l'idée derrière cela est qu'il est possible d'utiliser l' empilage de modules PAM pour vous assurer que pam-google-authenticator
, pam_unix
(ce contrôle votre mot de passe) et le module de certificat doivent tous réussir à vous autoriser l' accès. Par défaut, PAM est configuré pour permettre à n'importe quel module d'authentification de vous authentifier, en ignorant les autres.
Dans /etc/pam.d/common-auth, vous verrez près du haut une ligne qui ressemble à ce qui suit:
auth [success=2 default=ignore] pam_unix.so nullok_secure try_first_pass
Cela indique à PAM que cela doit pam_unix.so
réussir, il ignorera les deux règles suivantes (qui sont généralement un autre module d'authentification, puis pam_deny.so
) et passera aux modules facultatifs. Cependant, en cas de défaillance du module, il sera ignoré et le contrôle passera au module suivant de la chaîne. Cela continue dans chaque module d'authentification jusqu'à ce que le contrôle passe au bloc facultatif ou que PAM atteigne pam_deny.so et échoue immédiatement.
Cela peut être exploité pour garantir que pam-google-authenticator
, pam_unix.so
et votre module PAM de certificat doit tous réussir pour vous permettre d'accéder. Je ne connais pas le nom du module d'authentification Google ou du module de certificat que vous utilisez, mais vous devriez pouvoir les trouver dans votre fichier d'authentification commune. Donc, en mettant quelque chose comme ça en haut:
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
Remplacer <n>
par le nombre de modules entre le module pam_permit.so ici et le pam_permit.so
module suivant - en d'autres termes, il doit être défini sur le code [success = n default = ignore] du module d'authentification le plus haut + 1. Cette syntaxe est un peu géniale , mais ignore essentiellement les modules d'authentification une fois que les modules ci-dessus ont réussi.
Bien sûr, vous vous demandez peut-être comment limiter cette authentification en trois étapes à votre seul compte d'utilisateur. Cela peut être fait avec un pam_succeed_if.so
module et doit être inséré au-dessus du bloc d'authentification en trois étapes décrit ci-dessus:
auth [success=ignore default=4] pam_succeed_if.so user = <username>
Où <username>
est remplacé par votre nom d'utilisateur. Cette ligne indique simplement que si pam_succeed_if.so réussit (alias votre nom d'utilisateur correspond au nom d'utilisateur sur cette ligne), PAM devrait alors passer aux modules suivants, qui sont les modules d'authentification en trois étapes. Sinon, PAM devrait passer aux vrais modules, qui sont à 4 modules de celui-ci.
Pour faire correspondre plusieurs choses, par exemple l'appartenance à un groupe avec un certain nom d'utilisateur, plusieurs lignes doivent être utilisées, par exemple:
auth [success=1 default=ignore] pam_succeed_if.so user = <username>
auth [success=ignore default=4] pam_succeed_if.so user ingroup <group>
Avant de faire quoi que ce soit, je voudrais sauvegarder le fichier d'authentification commune et me familiariser également avec le mode mono-utilisateur et comment restaurer l'ancien fichier en cas d'urgence. Cette configuration n'a pas été testée par moi, mais elle devrait fonctionner.
Pour tester cela la première fois, ouvrez un shell racine ou deux et laissez-les tranquilles. Ceux-ci agissent comme des solutions de rechange en cas de problème, car vous pouvez facilement remplacer l'authentification commune par la sauvegarde. Ensuite, apportez ces modifications. Ensuite, essayez d'utiliser su
pour vous connecter à votre compte d'utilisateur - vous devez passer par le processus d'authentification en trois étapes.
La documentation complète du pam_succeed_if.so
module est disponible à l' adresse http://linux.die.net/man/8/pam_succeed_if