J'ai lu ailleurs d'autres personnes demandant que SSH soit "fixé" 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 "parce qu'elle rompt certaines attentes des utilisateurs [qui étaient] habitués à passwd -l ne verrouillant que le passwd". (voir bogue Debian 389183) par ex. certaines personnes VEULENT pouvoir verrouiller les comptes à partir des connexions par mot de passe, mais toujours autoriser 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 invalides, car l'authentification par clé SSH est conçue pour ne pas prêter attention au champ du mot de passe, à partir duquel les comptes sont généralement verrouillés.)
Je comprends que l'entrée de hachage du 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é lors de l'authentification par clé publique.
Si votre intention est de pouvoir empêcher les comptes de se connecter de manière centralisée, il existe d'autres solutions de contournement possibles, notamment :
Modification du shell de connexion.
(re) déplacer leur fichier authorized_keys.
Une autre option pour refuser l'accès pourrait être l'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 )
De http://web.archiveorange.com/archive/v/67CtqEoe5MhDqkDmUMuLI lire :"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, serait expirant le compte plutôt que de le verrouiller faites 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"
J'ai fait quelques devoirs supplémentaires et je réponds à ma propre question.
Dans pam_krb5 de RedHat (pam_krb5-2.3.14-1/src/acct.c
), sauf si le module a participé à l'étape d'authentification, la fonction pam_sm_acct_mgmt() renvoie soit PAM_IGNORE soit PAM_USER_UNKNOWN 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; en utilisant des attributs "proxy" pour transmettre la même signification, comme casser le shell ou ajouter à un groupe "utilisateurs handicapés".
Une autre solution de contournement (partiellement testée) consiste à définir une date d'expiration de compte dans le passé et à utiliser un module tel que pam_unix pour faire échouer les vérifications de compte. Cela utilise LDAP, plutôt que KRB5, mais interroge le même annuaire d'utilisateurs géré de manière centralisée.
L'authentification basée sur la clé SSH est indépendante de PAM. Vous disposez des solutions suivantes :
- désactiver l'authentification par clé dans sshd_config
- modifiez et recompilez sshd et ajoutez un hook pour que l'authentification basée sur les clés vérifie également si le compte est valide via pam.
Si vous souhaitez utiliser la connexion sans mot de passe via Kerberos, vous devez vous assurer que :
- vous n'utilisez pas pam pour sshd
- vous avez correctement configuré Kerberos. Par exemple. vous pouvez faire
kinit -k host/[email protected]
-
votre sshd est configuré pour utiliser gssapi :
KerberosAuthentication ouiGSSAPIAuthentication ouiGSSAPICleanupCredentials ouiUsePAM non
-
vous utilisez un client ssh kerberisé comme PuTTY v0.61 ou plus récent.