Authentification à deux facteurs OpenSSH combinée à Kerberos / key publique

J'essaie d'implémenter l'authentification à deux facteurs pour OpenSSH. L'environnement est Centos 7 (kernel: 3.10.0-229.1.2.el7.x86_64) avec OpenSSH_6.6.1p1, OpenSSL 1.0.1e-fips 11 févr. 2013. Nous avons Active Directory (LDAP) + Kerberos déployé. La spécification est la suivante:

  • Un user avec un ticket Kerberos existant et valide doit être demandé uniquement pour le deuxième facteur
  • Un user sans un ticket Kerberos existant et valide doit être demandé pour son mot de passe et un deuxième facteur
  • Les users locaux (sans LDAP acc.) Devraient pouvoir s'authentifier avec leurs passwords locaux
  • Le deuxième facteur ne doit pas être offert avant le premier
  • Outre Kerberos, l'authentification par key publique devrait également être acceptée comme premier facteur si disponible
  • La fonctionnalité devrait pouvoir être limitée à un set d'users – d'autres simplement se laissent entrer avec leurs passwords

Pour effectuer le process d'authentification du deuxième facteur, il y a un tiers un module PAM disponible qui ne connaît rien sur Kerberos. Voici donc ce que j'ai fait:

Placez ces lignes dans / etc / ssh / sshd_config:

# To enable PAM - this will make sshd use PAM with configuration /etc/pam.d/sshd UsePam yes ChallengeResponseAuthentication yes # To enable Kerberos and public key authentication - it will let sshd use existing Kerberos tickets GSSAPIAuthentication yes # Enable public key authentication PubkeyAuthentication yes # Password validation should be done via the KDC PasswordAuthentication yes KerberosAuthentication yes KerberosOrLocalPasswd yes # Kerberos / Public Key + PAM AuthenticationMethods gssapi-with-mic,keyboard-interactive:pam publickey,keyboard-interactive:pam password,keyboard-interactive:pam # (only supported for OpenSSH 6.2 or higher) 

La section auth de la configuration PAM pour sshd (/etc/pam.d/sshd)

 auth [success=ignore default=1] pam_localuser.so auth substack password-auth auth [success=1 default=ignore] pam_localuser.so auth required pam_2fa.so [...some arguments...] auth include postlogin 

Le module pam_2fa.so est responsable d'inciter et de valider le second facteur.

Maintenant pour Kerberos, cela fait presque tout ce que je voulais atteindre. Cependant, pour les counts locaux, il en résulte deux invites de mot de passe subséquentes. C'est mon principal problème ici. C'est parce que dans ce cas, le path d'access "mot de passe, keyboard interactif: pam" est utilisé, comme prévu. (J'ai besoin de ce path d'authentification pour que quelqu'un avec un count Kerberos, mais sans ticket valide, puisse get un ticket en entrant le mot de passe puis le OTP.) Si je supprime complètement la sous-configuration de mot de passe-auth de la configuration PAM, les counts Kerberos restnt en service et les counts locaux ne fonctionnent toujours pas. Pour moi, il semble que l'affirmation KerberosOrLocalPasswd oui soit ignorée, car UsePAM oui est également présent. Cependant, sshd continue d'utiliser KDC pour la validation du mot de passe, car sinon, cela ne fonctionnerait pas non plus pour les counts LDAP.

Encore une fois, pour clarifier davantage ce que je souhaite implémenter ici est le pseudocode qui décrit la logique d'authentification souhaitée:

 if gssapi_auth_ok(principal) or pubkey_auth_ok(pubkey): return second_factor_auth(user, read_otp()) else: if is_local_account(user): if local_passwd_auth(user, read_password()): return second_factor_auth(user, read_otp()) else: return AUTH_ERR else: if krb5_auth(principal, read_password()): return second_factor_auth(user, read_otp()) return AUTH_ERR 

Donc, mon scénario, je ne suis pas trop complexe ou ambitieux, mais je ne pouvais toujours pas find un moyen clair de le mettre en œuvre malgré mes jours de search et d'expérimentation. Pourriez-vous m'aider à find une solution?

Merci beaucoup d'avance!

2 Solutions collect form web for “Authentification à deux facteurs OpenSSH combinée à Kerberos / key publique”

Je ne connais aucun moyen de faire ce que vous voulez avec PAM sans écrire un nouveau module pam. PAM est relativement complexe et la façon dont sshd interagit avec PAM et kerberos a été dans mon expérience, de sorte qu'il y a toujours un argument qui ne fonctionne tout simplement pas.

Ce que vous voulez peut être possible, je ne sais pas comment le faire. Si vous avez besoin de sécuriser ssh, ce que je suggérerais est d'utiliser

 ForceCommand /path/to/2fa_executable 

dans votre sshd_config. Cela vous permettra de mettre en œuvre la logique que vous voulez, l'inconvénient est que le 2fa_exectable doit être configuré pour lire tous les secrets 2fa.

Il existe un exemple et un code sur le site Web Duo Security. Vous pouvez utiliser l'emballage duu setuid et quel que soit le code 2fa que vous utilisez.

Configuration Duo Unix

  • Un user avec un ticket Kerberos existant et valide doit être demandé uniquement pour le deuxième facteur.

Cela ne peut pas être réalisé via PAM.

L'authentification basée sur la réussite effectuée contre sshd contourne la stack d' auth de PAM. Cela inclut GSSAPI, qui est une exigence pour l'authentification Kerberos basée sur les tickets. Il n'a pas d'autre choix que de le faire car PAM n'a tout simplement pas été conçu avec ce type d'authentification à l'esprit.

Setting UsePAM yes fait ce qui suit:

  • ChallengeResponseAuthentication et PasswordAuthentication accrocheront la stack d' auth de PAM pour valider le mot de passe. Toute forme d'authentification autre que ces deux methods ne touchera pas la stack d' auth .
  • Lors de l'authentification réussie, la stack de account de PAM sera appelée pour déterminer si l'user authentifié est autorisé à accéder. (toujours)
  • La stack de session de PAM sera appelée pour gérer les tâches d'installation de session.

Résumé: Il n'y a absolument aucun moyen d'get une invite d'authentification à deux facteurs située dans la stack d' auth pour triggersr une personne qui s'est authentifiée avec une key GSSAPI ou ssh. Vous pouvez utiliser des stacks de account et de session en conjonction avec ces methods d'authentification, mais cela va jusqu'à PAM.

  • Exécutez le programme Python lorsque l'user se connecte en utilisant SSH
  • Impossible de désactiver la connection root
  • Le renvoi de port ssh n'est pas disponible (localement) pour IP plutôt que localhost uniquement
  • CopSHH comment restreindre l'user à partir de là racine principale
  • Après la reconstruction du server cloud, pourquoi SSH me donne-t-il une erreur de ssh_exchange_identification?
  • Debian: l'attaque par port SSH continue, ne peut pas modifier le port coz du fournisseur, des suggestions?
  • gitolite mac n'ajoute pas de nouveau user à authorized_keys
  • passer un mot de passe pour sudo su
  • login refusée dans ssh tunnel pour apache en attente de la configuration du proxy
  • Si j'utilise SSH pour un proxy SOCKS, les connections DNS l'utilisent-elles?
  • SSH: Réinitialisation de la connection par Peer
  • Les astuces du serveur de linux et windows, tels que ubuntu, centos, apache, nginx, debian et des sujets de rĂ©seau.