Vérrouillage de comptes utilisateurs avec PAM


Comment verrouiller et déverrouiller les comptes utilisateurs après un certain nombre d’échec d’authentification ?

Le module « pam_tally » décompte les connexions et échecs de connexions à un système. Une fois ce module mis en place, il est possible de sortir des « statistiques » sur les tentatives de connexions à l’aide de la commande « faillog ».

Les possibilités de « pam_tally » ne s’arrêtent pas là, il compte les tentatives d’accès, peu réinitialiser ou non les compteurs en cas de succès, et peut verrouiller les comptes utilisateurs pendant un temps donné en cas d’abus de tentative de connexion.

Mise en place

Comme la plupart des modules de PAM (Pluggable Authentication Modules) « pam_tally » est appelé et configuré dans les fichiers de configuration des modules de PAM (traditionnellement « /etc/pam.d »).

Afin qu’il soit installé pour tous les services utilisant PAM, il peut être ajouté dans le fichier commun de configuration : « /etc/pam.d/login », « /etc/pam.d/system-login » ou « /etc/pam.d/system-auth » en fonction des distributions.

Exemple de configuration de « pam_tally » :

srv ~ # cat /etc/pam.d/system-login
auth            required        pam_tally.so onerr=succeed deny=5 lock_time=10 unlock_time=300 even_deny_root_account
auth            required        pam_shells.so
auth            required        pam_nologin.so
auth            include         system-auth
 
account         required        pam_access.so
account         required        pam_nologin.so
account         include         system-auth
account         required        pam_tally.so onerr=succeed
 
password        include         system-auth
 
session         required        pam_env.so
session         optional        pam_lastlog.so
session         include         system-auth
session         optional        pam_motd.so motd=/etc/motd
session         optional        pam_mail.so

Dans cette exemple nous avons :

  • onerr=succeed : en cas de problème avec la configuration de pam_tally, le test est considéré comme bon ;
  • deny=5 : vérouillage des comptes après 5 tentatives infructueuses de connexion ;
  • lock_time=10 : attendre 10 secondes entre chaque tentatives de connexion ;
  • unlock_time=90 : après 5 échecs consécutifs, le compte utilisateur est verrouillé pendant 300 secondes (5 minutes). Si cette option est oubliée, le compte reste déverrouillé jusqu’à ce qu’une action manuelle soit entreprise ;
  • even_deny_root_account : la politique de sécurité s’applique même à « root » ;

Par défaut « pam_tally » n’impacte pas le compte « root » afin d’éviter tous déni de service ou blocage des accès au compte d’administration mais, comme on le vois dans l’exemple ci dessus, ce comportement peut être modifié par « even_deny_root_account ».

Consulter les statistiques

La commande « faillog » retourne la liste des connexions et échecs

srv ~ # faillog -a
Login       Failures Maximum Latest                   On
 
fhh             2        0   10/06/09 18:31:46 +0200  srv.rez0.lan

En cas d’un serveurs disposant de nombreux utilisateurs, « faillog -u user » ne retourne que la liste des connexions de l’utilisateur « user ».

Effacer les compteurs

« faillog -r » Efface les compteurs de tous les utilisateurs.

Pour n’effacer que le compteur de l’utilisateur « lambda », utiliser la commande « faillog -u lambda -r ».

srv ~ # faillog -a
Login       Failures Maximum Latest                   On
 
root            3        0   10/06/09 19:44:56 +0200  srv.rez0.lan
fhh             4        0   10/06/09 19:45:13 +0200  srv.rez0.lan
srv ~ # faillog -u fhh -r
srv ~ # faillog -a
Login       Failures Maximum Latest                   On
 
root            3        0   10/06/09 19:44:56 +0200  srv.rez0.lan
fhh             0        0   10/06/09 19:45:13 +0200  srv.rez0.lan

ATTENTION : l’ordre des options est important ! « faillog -r -u lambda » efface les compteurs de TOUS les utilisateurs.

Compléments d’information

« faillog » permet de redéfinir quelques valeurs à chaud :

  • « faillog -u Y -l X » définit la variable « lock_time » à « X » secondes pour l’utilisateur « Y », c’est à dire que « Y » devra attendre « X » secondes avant de ré essayer un mot de passe en cas d’échec de connexion.
  • « faillog -u Y -m X » définit la variable « deny » à « X » tentatives pour l’utilisateur « Y ». Le compte d' »Y » sera locké uniquement après « X » tentatives de connexion infructueuses.

ATTENTION : encore une fois, l’ordre des options est important !

srv ~ # faillog -a
Login       Failures Maximum Latest                   On
 
root            0        0   10/06/09 19:44:56 +0200  srv.rez0.lan
fhh             0        0   10/06/09 19:58:38 +0200  srv.rez0.lan
srv ~ # faillog -uroot -l 10 
srv ~ # faillog -ufhh -m 3 
srv ~ # faillog -a
Login       Failures Maximum Latest                   On
 
root            0        0   10/06/09 19:44:56 +0200  srv.rez0.lan [10s lock]
fhh             0        3   10/06/09 19:58:38 +0200  srv.rez0.lan

Dans cet exemple, « root » devra maintenant attendre 10 secondes entre deux tentatives de login sur « srv.rez0.lan » au lieu de la valeur définie par « lock_time » dans le fichier de configuration de PAM. « fhh » ne sera autorisé qu’à 3 tentatives de login infructueuses avant d’être désactiver « unlock_time » secondes (où « unlock_time » est définit dans la configuration de PAM).

Références

pam_tally(8) – Linux man page : http://linux.die.net/man/8/pam_tally
faillog(8) – Linux man page : http://linux.die.net/man/8/faillog
pam.conf(5) – Linux man page : http://linux.die.net/man/5/pam.conf

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *