Comment refuser l'accès aux comptes AD désactivés via Kerberos dans pam_krb5?

10

J'ai un répertoire AD / Linux / LDAP / KRB5 fonctionnel et une configuration d'authentification, avec un petit problème. Lorsqu'un compte est désactivé, l'authentification SSH publickey permet toujours la connexion de l'utilisateur.

Il est clair que les clients kerberos peuvent identifier un compte désactivé, car kinit et kpasswd renvoient "Les informations d'identification des clients ont été révoquées" sans autre mot de passe / interaction.

PAM peut-il être configuré (avec "UsePAM yes" dans sshd_config) pour interdire les connexions pour les comptes désactivés, où l'authentification est effectuée par publickey? Cela ne semble pas fonctionner:

account     [default=bad success=ok user_unknown=ignore] pam_krb5.so

Veuillez ne pas introduire winbind dans votre réponse - nous ne l'utilisons pas.

Phil
la source

Réponses:

4

J'ai lu ailleurs d'autres personnes demandant que SSH soit "corrigé" afin que les comptes verrouillés ne puissent pas être connectés via SSH. (voir le bogue Debian 219377) Cette demande a été rejetée en tant que correctif "car elle rompt certaines attentes des utilisateurs [qui étaient] habitués à passwd -l ne verrouillant que le mot de passe." (voir le bogue Debian 389183). Par exemple, certaines personnes voulaient verrouiller les comptes à partir des connexions par mot de passe, mais autorisent toujours l'accès à la clé SSH.

PAM ne refusera pas l'authentification par clé SSH aux comptes qui viennent d'être verrouillés (par exemple, en raison de tentatives de mot de passe non valides, car l'authentification par clé SSH est conçue pour ne pas prêter attention au champ du mot de passe, qui est généralement l'endroit où les comptes sont généralement verrouillés.)

Je comprends que l'entrée de hachage de mot de passe est implicitement vérifiée au moment de pam_authenicate (), pas au moment de pam_acct_mgmt (). pam_unix.so pam_sm_acct_mgmt () ne vérifie pas du tout le hachage du mot de passe et pam_authenticate () n'est pas appelé pendant l'authentification par clé publique.

Si votre intention est de pouvoir désactiver de manière centralisée les comptes de connexion, il existe d'autres solutions possibles, notamment:

Modification du shell de connexion.

(re) déplacer leur fichier authorized_keys.

Une autre option pour refuser l'accès pourrait être une utilisation de DenyGroups ou AllowGroups dans sshd_config. (puis en ajoutant l'utilisateur à un groupe "sshdeny" ou en le supprimant d'un groupe "sshlogin" pour l'empêcher de se connecter.) (lire ici: https://help.ubuntu.com/8.04/serverguide/user-management .html )

Sur http://web.archiveorange.com/archive/v/67CtqEoe5MhDqkDmUMuL, j'ai lu: "Le problème est que pam_unix vérifie uniquement les dates d'expiration de l'entrée fantôme, pas le contenu du champ de hachage du mot de passe." Si cela est vrai, expirer le compte plutôt que le verrouiller ferait-il ce dont vous avez besoin?

La réponse à votre question est peut-être "oui, si vous les désactivez ailleurs que dans le champ du mot de passe"

JohnGH
la source
4

J'ai fait plus de devoirs et je réponds à ma propre question.

Dans pam_krb5 ( pam_krb5-2.3.14-1/src/acct.c) de RedHat , à moins que le module n'ait participé à l'étape d'authentification, la fonction pam_sm_acct_mgmt () renvoie PAM_IGNORE ou PAM_USER_UNundry selon la configuration du module. Il faudrait donc modifier le code pam_krb5 pour faire ce que je veux.

La réponse de JohnGH est une bonne solution de contournement; utiliser des attributs "proxy" pour transmettre la même signification, comme casser le shell ou ajouter à un groupe "handicapés-utilisateurs".

Une autre solution (partiellement testée) consiste à définir une date d'expiration de compte dans le passé et à utiliser un module tel que pam_unix pour échouer les vérifications de compte. Il utilise LDAP plutôt que KRB5, mais interroge le même annuaire d'utilisateurs géré de manière centralisée.

Phil
la source
2

L'authentification basée sur la clé SSH est indépendante de PAM. Vous avez les solutions suivantes:

  • désactiver l'authentification par clé dans sshd_config
  • changez et recompilez sshd et ajoutez un hook pour que l'authentification par clé vérifie également si le compte est valide via pam.

Si vous souhaitez utiliser une connexion sans mot de passe via Kerberos, vous devez vous assurer que:

  • vous n'utilisez pas pam pour sshd
  • vous avez des kerberos correctement configurés. Par exemple, vous pouvez fairekinit -k host/server1.example.com@DOMAIN
  • vous sshd est configuré pour utiliser gssapi:

    KerberosAuthentication oui GSSAPIAuthentication oui GSSAPICleanupCredentials oui UsePAM non

  • vous utilisez un client ssh kerberized comme PuTTY v0.61 ou plus récent.

Mircea Vutcovici
la source
1
Je ne suis pas d'accord que l'authentification par clé publique SSH est indépendante de PAM. L'ajout account optional pam_echo.so file=/etc/redhat-releaseà /etc/pam.d/sshd entraîne l'impression du contenu du fichier lors de l'utilisation des connexions d'authentification basées sur des clés (essayez-le).
Phil
Je pense que pam est utilisé uniquement pour le compte (par exemple pour créer le dossier d'accueil) et non pour l'authentification. Je vérifie ce cas maintenant.
Mircea Vutcovici