Comment utiliser le serveur ssh avec PAM mais interdire l'authentification par mot de passe?

13

De nombreux tutoriels vous disent de configurer votre serveur ssh comme ceci:

ChallengeResponseAuthentication no
PasswordAuthentication no
UsePAM no 

mais avec cette configuration, vous ne pouvez pas utiliser PAM, car je prévois d'utiliser 2 Factor Auth avec Google Authenticator (OTP Onetime Password), j'ai besoin de PAM.

Alors, comment configurer un nouveau démon debian jessie ssh, si je veux empêcher la connexion avec le mot de passe normal tout en permettant d'utiliser PAM.

peut-être que la question exacte est de savoir comment configurer pam pour interdire les mots de passe?

Détails sur l'authentification PAM

La désactivation de l'authentification par mot de passe basée sur PAM est plutôt peu intuitive. Il est nécessaire sur à peu près toutes les distributions GNU / Linux (à l'exception notable de Slackware), ainsi que FreeBSD. Si vous ne faites pas attention, vous pouvez définir PasswordAuthentication sur «non» et toujours vous connecter avec juste un mot de passe via l'authentification PAM. Il s'avère que vous devez définir «ChallengeResponseAuthentication» sur «non» afin de vraiment désactiver l'authentification PAM. Les pages de manuel de FreeBSD ont ceci à dire, ce qui peut aider à clarifier un peu la situation:

Notez que si ChallengeResponseAuthentication est «oui» et que la politique d'authentification PAM pour sshd inclut pam_unix (8), l'authentification par mot de passe sera autorisée via le mécanisme de défi-réponse quelle que soit la valeur de PasswordAuthentication.

http://www.unixlore.net/articles/five-minutes-to-more-secure-ssh.html

c33s
la source

Réponses:

23

peut-être que la question exacte est de savoir comment configurer pam pour interdire les mots de passe?

Correct. Vous êtes déjà tombé sur le fait que le réglage UsePAM noest généralement un mauvais conseil. Non seulement il empêche toute forme d'authentification basée sur PAM, il a également désactive accountet sessionmodules. Le contrôle d'accès et la configuration de session sont de bonnes choses.

Tout d'abord, construisons une liste d'exigences:

  • OTP via pam_google_authenticator.so. Cela nécessite UsePAM yeset ChallengeResponseAuthentication yes. Vous êtes en train de leur demander des informations d'identification, après tout!
  • Aucune autre forme d'authentification par mot de passe via PAM. Cela signifie désactiver tout authmodule qui pourrait éventuellement permettre la transmission d'un mot de passe via les keyboard-interactiveconnexions. (que nous devons laisser activé pour OTP)
  • Authentification basée sur clé. Nous devons exiger une publickeyauthentification, et peut gssapi-with-mic- être si vous avez configuré Kerberos.

Normalement, l'authentification avec une clé ignore complètement l'authentification basée sur PAM. Cela nous aurait arrêtés sur nos traces avec les anciennes versions de openssh, mais Debian 8 (jessie) supporte la AuthenticationMethodsdirective. Cela nous permet d'exiger plusieurs méthodes d'authentification, mais ne fonctionne qu'avec les clients implémentant SSHv2.


config sshd

Voici les lignes que je suggère /etc/ssh/sshd_config. Assurez-vous d'avoir un moyen d'accéder à ce système sans sshdau cas où vous casseriez quelque chose!

# Require local root only
PermitRootLogin no

# Needed for OTP logins
ChallengeResponseAuthentication yes
UsePAM yes

# Not needed for OTP logins
PasswordAuthentication no

# Change to to "yes" if you need Kerberos. If you're unsure, this is a very safe "no".
GSSAPIAuthentication no


# Require an OTP be provided with key based logins
AuthenticationMethods publickey,keyboard-interactive

# Use this instead for Kerberos+pubkey, both with OTP
#
#AuthenticationMethods gssapi-with-mic,keyboard-interactive publickey,keyboard-interactive

N'oubliez pas de recharger sshdune fois ces modifications effectuées.

Configuration PAM

Nous devons encore configurer PAM. En supposant une installation propre de Debian 8 (selon votre question):

  • Commentaire @include common-authde /etc/pam.d/sshd.
  • Vérifiez /etc/pam.d/sshdet confirmez qu'aucune ligne commençant par authn'est présente. Il ne devrait pas y en avoir s'il s'agit d'une installation propre, mais il vaut mieux être en sécurité.
  • Ajoutez une authentrée pour pam_google_authenticator.so.

N'oubliez pas que les mots de passe locaux fonctionnent toujours.

Nous n'avons apporté aucune modification qui aurait un impact sur les connexions via une console locale, ni empêchait les utilisateurs d'utiliser des mots de passe pour mettre à niveau leurs privilèges via. sudo.Cela sortait du cadre de la question. Si vous décidez d'aller plus loin, n'oubliez pas que root doit toujours être autorisé à se connecter localement via un mot de passe. Dans le cas contraire, vous risquez de vous bloquer hors du système.

Andrew B
la source
Je ne l'ai pas encore testé mais il semble logique et avec 5 votes positifs je pense que je peux l'accepter.
c33s
Je me suis testé. si vous souhaitez désactiver complètement le mot de passe, vous devez également définir ChallengeResponseAuthentication no. voir blog.tankywoo.com/linux/2013/09/14/…
anonyme
@anonymous Reportez-vous à la question du PO et à la première puce. La désactivation ChallengeResponseAuthenticationrompt la méthode d'authentification interactive au clavier, qui est nécessaire pour les modules d'authentification PAM qui gèrent OTP. (souhaité par l'OP) La désactivation de CRA n'est sûre que si vous n'avez vraiment aucun module PAM dans la authpile qui doit se déclencher. Si PasswordAuthenticationet GSSAPIAuthenticationsont désactivés, un mot de passe ne sera accepté que si PAM dispose d'un module d'authentification activé qui le demande.
Andrew B
(cela dit, c'est toujours un excellent lien)
Andrew B
1

pour refuser la demande de mot de passe

commenter cette ligne

#auth       substack     password-auth

dans /etc/pam.d/sshd

et assurez-vous de ne pas avoir nullok à la fin de cette ligne, à moins qu'il ne soit correct de s'authentifier via ssh sans utiliser OTP

auth required pam_google_authenticator.so
JOduMonT
la source