Cet article décrit le système de crédit PAM pam_cracklib en relation avec la complexité du mot de passe Linux PAM.
Présentation de PAM
Les modules d'authentification enfichables (PAM) sont un cadre central, flexible et modulaire utilisé pour gérer les politiques d'authentification du système et faciliter l'authentification des utilisateurs. PAM fournit une interface de programmation d'application (API) générale à laquelle les programmes d'octroi de privilèges se réfèrent pour l'authentification des utilisateurs.
Le flux d'authentification PAM est le suivant :
Application (login, ssh, sudo, su, ftp, etc.) -> PAM -> Source d'authentification (mot de passe local, LDAP, Kerberos, etc.)
PAM sépare les tâches d'authentification en quatre groupes de gestion :
- Gestion du compte – vérifier l'autorisation de l'utilisateur au service, l'expiration du mot de passe de l'utilisateur, etc.
- Gestion de l'authentification – authentification de l'utilisateur, informations d'identification de l'utilisateur, défi/réponse (mot de passe), biométrie.
- Gestion des mots de passe – facilite la gestion des mots de passe – changement, mises à jour, etc.
- Gestion des sessions – tâches de connexion au service avant/après l'utilisateur, par ex. piste d'audit, monter le répertoire personnel de l'utilisateur, etc.
Module PAM pam_cracklib
Lorsqu'il est ajouté à la pile de mots de passe PAM, le module pam_cracklib effectue une vérification de la force des mots de passe utilisateur proposés. Le module appelle la routine cracklib qui compare les mots de passe à un dictionnaire de mots connus (communs, faibles, par défaut, etc.) avant d'effectuer d'autres vérifications de force, telles que :
- Palindrome :Le nouveau mot de passe est-il un palindrome, c'est-à-dire une chaîne qui lit la même chose en arrière et en avant, par ex. radar, madame, etc.
- Changement de cas uniquement :Le nouveau mot de passe est-il le même que l'ancien avec seulement un changement de casse ?
- Similaire :Le nouveau mot de passe ressemble-t-il trop à l'ancien ?
- Simple :Le nouveau mot de passe est-il trop petit ? Ceci est contrôlé par 6 arguments :minlen , maxclassrepeat , dcredit , ucredit , lcrédit , et ocredit .
- Pivoté :Le nouveau mot de passe est-il une version alternée de l'ancien mot de passe ?
- Déjà utilisé :Le mot de passe a-t-il déjà été utilisé ?
- Mêmes caractères consécutifs :vérification facultative des mêmes caractères consécutifs.
- Contient le nom d'utilisateur :Vérifiez en option si le mot de passe contient le nom de l'utilisateur.
Lorsqu'elles sont activées sans arguments, les options/valeurs de vérification de la force pam_cracklib par défaut permettent de s'assurer que des mots de passe suffisamment sécurisés sont acceptés.
Le système de crédit pam_cracklib
Le module pam_cracklib offre diverses options dont les suivantes contrôlent directement la complexité du mot de passe :
- minlen – Longueur minimale du mot de passe
- lcrédit – Nombre minimum de lettres minuscules
- ucredit – Nombre minimum de lettres majuscules
- dcredit – Nombre minimum de caractères numériques
- ocrédit – Nombre minimum de caractères non alphanumériques
Le minlen L'option définit la taille minimale acceptable pour un nouveau mot de passe. Cependant, en plus du nombre de caractères, un crédit (c'est-à-dire un score) est attribué pour chaque type de caractère différent utilisé, c'est-à-dire inférieur, supérieur, chiffre, autre. La valeur de crédit de chaque type de caractère utilisé compte pour atteindre la valeur minlen définie.
lcredit=N :(N>=0) C'est le crédit maximum pour avoir des lettres minuscules dans le nouveau mot de passe. Si vous avez moins de ou N lettres minuscules, chaque lettre comptera +1 pour atteindre la valeur minlen actuelle. La valeur par défaut pour lcredit est 1, qui est la valeur recommandée pour minlen inférieur à 10.
(N <0) Il s'agit du nombre minimum de lettres minuscules à respecter pour un nouveau mot de passe.
ucredit=N :(N>=0) C'est le crédit maximum pour avoir des lettres majuscules dans le nouveau mot de passe. Si vous avez moins de ou N lettres majuscules, chaque lettre comptera +1 pour atteindre la valeur minlen actuelle. La valeur par défaut pour ucredit est 1, qui est la valeur recommandée pour minlen inférieur à 10.
(N <0) Il s'agit du nombre minimum de lettres majuscules à respecter pour un nouveau mot de passe.
dcredit=N (N>=0) C'est le crédit maximum pour avoir des chiffres dans le nouveau mot de passe. Si vous avez moins de ou N chiffres, chaque chiffre comptera +1 pour atteindre la valeur minlen actuelle. La valeur par défaut pour dcredit est 1, qui est la valeur recommandée pour minlen inférieur à 10.
(N <0) Il s'agit du nombre minimum de chiffres à respecter pour un nouveau mot de passe.
ocredit=N :(N>=0) C'est le crédit maximum pour avoir d'autres caractères dans le nouveau mot de passe. Si vous avez moins de ou N autres caractères, chaque caractère comptera +1 pour atteindre la valeur minlen actuelle. La valeur par défaut pour ocredit est 1, qui est la valeur recommandée pour minlen inférieur à 10.
(N <0) Il s'agit du nombre minimum d'autres caractères à respecter pour un nouveau mot de passe.
Lors de l'utilisation du système de crédit PAM, il est tout à fait possible qu'un mot de passe d'une longueur inférieure à celle définie par minlen soit accepté, c'est-à-dire que le mot de passe peut également contenir des caractères d'un ou plusieurs types de caractères - inférieur, supérieur, chiffre, autre.
Considérez la configuration pam_cracklib suivante :
--/etc/pam.d/system-auth-ac: ... password required pam_cracklib.so minlen=12 lcredit=1 ucredit=1 dcredit=2 ocredit=1 ...
Voici le calcul du crédit de mot de passe pam_cracklib pour un mot de passe utilisateur de "@1Bcdef2":
- @1Bcdef2 :8 crédits attribués soit un pour chaque personnage
- @ :1 crédit attribué (autre)
- 1,2 :1 crédit attribué (chiffre)
- B :1 crédit attribué (supérieur)
- cdef :1 crédit attribué (inférieur)
8 + 4 =12 (minlen)
Compte tenu du nombre et du type de caractères utilisés dans le mot de passe ci-dessus, le système accepte une longueur minimale de mot de passe de 8 caractères. Notez qu'un mot de passe contenant uniquement 11 lettres minuscules sera également accepté, c'est-à-dire :
- abcdefghijk :11 crédits attribués - un pour chaque personnage
- abcdefghijk :0 crédit accordé (autre)
- abcdefghijk :0 crédit accordé (chiffre)
- abcdefghijk :0 crédit accordé (supérieur)
- abcdefghijk :1 crédit accordé (inférieur)
11 + 1 =12 (minlen)
Voici des exemples détaillés de mots de passe acceptés et non acceptés :
minlen | Mot de passe | Longueur du mot de passe (caractères) | Crédit | Mot de passe accepté ? |
---|---|---|---|---|
10 | qwertasdf | 9 | 9 (caractères) + 1 (inférieur) =10 | Oui |
12 | qwertasdfgz | 11 | 11 (caractères) + 1 (inférieur) =12 | Oui |
14 | qwertasdfgzxc | 13 | 13 (caractères) + 1 (inférieur) =14 | Oui |
14 | qwertasdf1$ | 11 | 11 (caractères) + 1 (inférieur) + 1 (chiffre) + 1 (autre) =14 | Oui |
10 | qwertasd | 8 | 8 (caractères) + 1 (inférieur) = 9 | Non |
12 | qwertasdfg | 10 | 10 (caractères) + 1 (inférieur) =11 | Non |
14 | qwertasdfgzx | 12 | 12 (caractères) + 1 (inférieur) =13 | Non |
Application de la complexité des mots de passe avec le système de crédit pam_cracklib
Dans tous les exemples jusqu'à présent, notez que l'utilisation du système de crédit n'impose pas réellement la complexité du mot de passe. Pour appliquer la complexité du mot de passe, spécifiez des valeurs négatives pour les options pam_cracklib lcredit, ucredit, dcredit, ocredit. Lorsque vous spécifiez des valeurs négatives, les crédits ne sont pas attribués pour l'utilisation de caractères inférieurs, supérieurs, numériques et autres, mais le mot de passe doit toujours contenir des caractères de chacun des groupes de caractères spécifiés.
Considérez la configuration pam_cracklib suivante :
--/etc/pam.d/system-auth-ac: ... password required pam_cracklib.so minlen=8 lcredit=-1 ucredit=-1 dcredit=-2 ocredit=-1 ...
Avec ce qui précède, un mot de passe utilisateur réussi doit …
- comporter au moins 8 caractères et
- contiennent au moins 1 caractère minuscule et
- contiennent au moins 1 caractère majuscule et
- contiennent au moins 2 chiffres et
- contenir au moins 1 autre caractère
Remarque :CentOS/RHEL 7 utilise pam_pwquality module au lieu de pam_cracklib et le module pam_pwquality est rétrocompatible avec ses options.
PAM_PWQUALITY(8) System Manager's Manual PAM_PWQUALITY(8) NAME pam_pwquality - PAM module to perform password quality checking SYNOPSIS pam_pwquality.so [...] DESCRIPTION This module can be plugged into the password stack of a given service to provide some plug-in strength-checking for passwords. The code was originally based on pam_cracklib module and the module is backward compatible with its options.