9 votes

Authentification en trois étapes ?

J'utilise Ubuntu.

Je me demande s'il est possible d'avoir libpam-google-authenticator (qui vous permet de vous connecter en utilisant un code généré par votre téléphone) ET l'authentification par certificat configurés pour fonctionner ensemble, et si c'est possible, comment je dois m'y prendre. Ainsi - pour se connecter à mon compte, il faudrait avoir mon mot de passe, mon téléphone (et son code) ET mon certificat/clé privée et son mot de passe.

J'ai réussi à faire fonctionner les deux indépendamment, mais je n'ai jamais réussi à les faire fonctionner ensemble. Je suis sûr que c'est possible d'une manière ou d'une autre.

Merci.

8voto

Xenopathic Points 966

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 va vous empêcher de vous connecter à votre système.

Heureusement, vous pouvez toujours démarrer en mode utilisateur unique et résoudre le problème, mais sachez que PAM n'est pas quelque chose que vous souhaitez manipuler plus que nécessaire.

Quoi qu'il en soit, l'idée derrière tout cela est qu'il est possible d'utiliser l'empilement des modules PAM pour s'assurer que pam-google-authenticator , pam_unix (qui vérifie votre mot de passe) et le module de certificat doivent tous réussir pour vous permettre l'accès. Par défaut, PAM est configuré pour autoriser tout module d'authentification à vous authentifier, en ignorant les autres.

Dans le fichier /etc/pam.d/common-auth, vous verrez en haut une ligne qui ressemble à ce qui suit :

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

Cela indique à PAM qu'il doit pam_unix.so réussit, il ignore les deux règles suivantes (qui sont généralement un autre module d'authentification, puis un module d'authentification). pam_deny.so ) et passer aux modules optionnels. Cependant, si le module échoue, il sera ignoré et le contrôle passera au module suivant de la chaîne. Cela continue avec chaque module d'authentification jusqu'à ce que le contrôle saute au bloc optionnel, ou que PAM rencontre pam_deny.so et échoue là.

Cela peut être exploité pour garantir que pam-google-authenticator , pam_unix.so et le module PAM de votre certificat doivent tous réussir pour vous permettre l'accès. 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 common-auth. Donc en mettant quelque chose comme ceci 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

Remplacement de <n> avec le nombre de modules entre le module pam_permit.so ici et le suivant pam_permit.so en d'autres termes, il doit être défini comme le code [success=n default=ignore] + 1 du module d'authentification le plus élevé. Cette syntaxe est un peu bizarre, mais elle permet essentiellement d'ignorer les modules d'authentification après 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 utilisateur. Cela peut être fait avec un pam_succeed_if.so 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>

<username> est remplacé par votre nom d'utilisateur. Cette ligne dit simplement que si pam_succeed_if.so réussit (c'est-à-dire que votre nom d'utilisateur correspond au nom d'utilisateur sur cette ligne) alors PAM devrait 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 éléments, par exemple l'appartenance à un groupe et un certain nom d'utilisateur, il faut utiliser plusieurs lignes, 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 tout cela, je ferais une sauvegarde du fichier common-auth, et je me familiariserais également avec le mode utilisateur unique et la façon de 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 ou deux, et laissez-les tranquilles. Ils agissent comme des solutions de repli en cas de problème, puisque vous pouvez facilement remplacer common-auth par la sauvegarde. Ensuite, effectuez ces changements. Ensuite, essayez d'utiliser su pour vous connecter à votre compte d'utilisateur - vous devriez devoir passer par le processus d'authentification en trois étapes.

La documentation complète pour le pam_succeed_if.so peut être trouvé à l'adresse suivante http://linux.die.net/man/8/pam_succeed_if

3voto

David Coufal Points 1388

J'ai lu cet article et j'ai pensé que ça avait l'air cool. Voici comment j'ai réussi à faire fonctionner l'authentification à trois facteurs. J'ai écrit un article de blog à ce sujet aquí .

En gros, j'ai configuré Google Authenticator et le mot de passe dans PAM, puis j'ai ensuite configuré l'authentification par clé publique dans OpenSSH (ce qui permet de contourner les deux autres), et enfin j'ai demandé à OpenSSH de s'authentifier également via PAM (la dernière ligne)

De /etc/ssh/sshd_conf

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

1voto

x4k3p Points 162

Il suffit d'ajouter Pubkey + GoogleAuth en haut de votre /etc/pam.d/sshd.

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

Je suppose que vous avez OpenSSH >= 6.2 et que sshd_config a été édité.

Pour une sécurité plus paranoïaque, ajoutez quelques configurations supplémentaires :D

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X