Code source wiki de Configuration d'une politique de mots de passe
Modifié par jhurst le 2021/04/21 10:01
Afficher les derniers auteurs
author | version | line-number | content |
---|---|---|---|
1 | {{ddtoc/}} | ||
2 | |||
3 | ---- | ||
4 | |||
5 | Ce document décrit comment configurer une politique de mots de passe. | ||
6 | |||
7 | La politique de mot de passe se règle à deux endroits : | ||
8 | |||
9 | * Les stratégies de **protection**, du **cycle de vie**, et une partie des contraintes de **qualité** du mot de passe se définissent directement dans le LDAP supporté en standard (OpenLDAP 2.0+). | ||
10 | * Les règles de **qualité** du mot de passe (syntaxe) se définissent dans un fichier de configuration DigDash Enterprise. | ||
11 | |||
12 | Pour la partie configuration LDAP nous recommandons l'utilisation du logiciel **Apache Directory Studio**. | ||
13 | |||
14 | = Accès à la politique de mot de passe LDAP = | ||
15 | |||
16 | La politique du mot de passe dans LDAP passe par un intercepteur LDAP. Pour le configurer, il faut se connecter au LDAP avec **Apache Directory Studio**, avec un utilisateur admin LDAP. | ||
17 | |||
18 | Une fois connecté, dépliez les nœuds suivants (voir copie d'écran pour plus de détails) : | ||
19 | |||
20 | * ou=config | ||
21 | ** ads-directoryServiceId=default | ||
22 | *** ou=interceptors | ||
23 | **** ads-interceptorId=authenticationInterceptor | ||
24 | ***** ou=passwordPolicies | ||
25 | ****** ads-pwdId=default | ||
26 | |||
27 | [[image:password_policy_config_fr_html_afcf25c35c161b74.png||queryString="width=544&height=372" height="372" width="544"]] | ||
28 | |||
29 | == Description des attributs principaux == | ||
30 | |||
31 | Le tableau suivant décrit les attributs principaux utilisables pour configurer une politique de mot de passe dans Apache Directory Server : | ||
32 | |||
33 | |**Fonction**|**Attribut**|**Type**|**Valeur défaut**|**Description** | ||
34 | |(% rowspan="5" %)**Protection**|(% colspan="4" %)Protection du mot de passe en cas d'attaques. Bloque le mot de passe après un certain nombre de tentatives de connexions échouées. | ||
35 | |ads-pwdlockout|Booléen|TRUE|((( | ||
36 | **TRUE** : Active la fonction de blocage du mot de passe | ||
37 | |||
38 | **FALSE** : désactive la fonction de blocage du mot de passe | ||
39 | ))) | ||
40 | |ads-pwdlockoutduration|Entier (secondes)|0|((( | ||
41 | Détermine le temps de blocage en cas de tentatives infructueuses de saisies de mots de passe. | ||
42 | |||
43 | **0** : blocage infini : Un administrateur du LDAP devra débloquer le mot de passe. | ||
44 | ))) | ||
45 | |ads-pwdfailurecountinterval|Entier (secondes)|30|Détermine le délai de purge du compteur des tentatives infructueuses. | ||
46 | |ads-pwdmaxfailure|Entier|5|Si la fonction de blocage de mot de passe est activée (ads-pwdlockout = TRUE), cet attribut détermine le nombre d'échecs successifs qui bloqueront le mot de passe. | ||
47 | |(% rowspan="6" %)**Qualité**|(% colspan="4" %)((( | ||
48 | Règles de qualité du mot de passe | ||
49 | |||
50 | //Note : Par défaut DigDash Enterprise stocke les mots de passe dans LDAP de façon "hachée" (hash). De ce fait ce dernier n'a pas le mot de passe original saisi par l'utilisateur et ne peut donc pas en contrôler la qualité.// | ||
51 | |||
52 | //Ce contrôle est directement effectué dans DigDash (voir chapitre suivant dans ce document).// | ||
53 | |||
54 | //Les attributs suivants sont documentés dans le cas où ce comportement par défaut serait modifié. Certains d'entre eux sont malgré tout utilisés (ex: historique).// | ||
55 | ))) | ||
56 | |ads-pwdcheckquality|Entier|1|((( | ||
57 | Type de qualité du mot de passe : | ||
58 | |||
59 | **0 **: La qualité du mot de passe n'est pas vérifiée. | ||
60 | |||
61 | **1 **: La qualité est contrôlée si possible (non haché). Si le mot de passe est haché, ou dans une forme impossible à évaluer, le mot de passe est accepté. | ||
62 | |||
63 | **2 **: La qualité est toujours contrôlée. Si le mot de passe est haché ou dans une forme impossible à évaluer, le mot de passe est rejeté. | ||
64 | |||
65 | //Note : Le contrôle de qualité des mots de passe est effectué dans DigDash Enterprise. Il faut laisser la valeur de cet attribut à 0 ou 1.// | ||
66 | ))) | ||
67 | |ads-pwdinhistory|Entier|5|LDAP peut garder un historique des mots de passe utilisés pour un utilisateur. Cet attribut détermine le nombre d'entrées de cet historique. | ||
68 | |ads-pwdminage|Entier (secondes)|0|Si l'historique des mots de passe est actif, cet attribut détermine le délai minimal entre 2 changements de mot de passe. | ||
69 | |ads-pwdminlength|Entier (caractères)|1|((( | ||
70 | Cet attribut détermine la longueur minimale du mot de passe en caractères. | ||
71 | |||
72 | //Note : Le contrôle de qualité des mots de passe est effectué dans DigDash Enterprise. Il faut laisser la valeur de cet attribut à 1.// | ||
73 | ))) | ||
74 | |ads-pwdmaxlength|Entier (caractères)|0|((( | ||
75 | Cet attribut détermine la longueur maximale du mot de passe en caractères. | ||
76 | |||
77 | //Note : Le contrôle de qualité des mots de passe est effectué dans DigDash Enterprise. Il faut laisser la valeur de cet attribut à 0.// | ||
78 | ))) | ||
79 | |(% rowspan="9" %)**Cycle de vie**|(% colspan="4" %)Gestion du cycle de vie du mot de passe. | ||
80 | |ads-pwdallowuserchange|Booléen|TRUE|((( | ||
81 | **TRUE **: L'utilisateur peut changer son mot de passe. | ||
82 | |||
83 | **FALSE **: L'utilisateur ne peut pas changer son mot de passe. | ||
84 | ))) | ||
85 | |ads-pwdexpirewarning|Entier (secondes)|600|Détermine si le serveur LDAP doit renvoyer un avertissement si une expiration de mot de passe va arriver dans le délai spécifié. | ||
86 | |ads-pwdgraceauthnlimit|Entier|5|((( | ||
87 | Si le mot de passe expire, cet attribut détermine le nombre de fois où l'utilisateur pourra quand même l'utiliser avant son expiration définitive. | ||
88 | |||
89 | //Note : DigDash Enteprise consomme un jeton de ce compteur pour effectuer le changement de mot de passe. Il faut donc ajouter 1 à cette valeur cette valeur par rapport au nombre réel de tentatives que vous voulez permettre : Si ads-pwdgraceauthnlimit = 6, cela correspond à 5 tentatives réelles pour l’utilisateur. Les messages d’avertissements prennent en compte ce décalage.// | ||
90 | ))) | ||
91 | |ads-pwdgraceexpire|Entier (secondes)|0|((( | ||
92 | Si le mot de passe expire, cet attribut détermine le délai pendant lequel l'utilisateur pourra quand même utiliser ce mot de passe avant son expiration définitive. | ||
93 | |||
94 | **0** : pas de délai | ||
95 | ))) | ||
96 | |ads-pwdmaxage|Entier (secondes)|0|((( | ||
97 | Durée de vie du mot de passe avant expiration. | ||
98 | |||
99 | **0** : le mot de passe n'expire jamais. | ||
100 | ))) | ||
101 | |ads-pwdmaxidle|Entier (secondes)|0|Délai d'inactivité maximum du mot de passe. Une fois ce délai dépassé le mot de passe expire. | ||
102 | |ads-pwdmustchange|Booléen|FALSE|**TRUE **: le mot de passe doit être changé. | ||
103 | |ads-pwdsafemodify|Booléen|FALSE|((( | ||
104 | Pour le changement de mot de passe. | ||
105 | |||
106 | **TRUE **: L'utilisateur doit saisir son mot de passe actuel avant modification. | ||
107 | |||
108 | **FALSE **: L'utilisateur ne doit pas saisir son mot de passe actuel avant modification. | ||
109 | |||
110 | //Note : DigDash Enterprise force déjà la saisie du mot de passe actuel avant sa modification. Ce paramètre doit rester FALSE.// | ||
111 | ))) | ||
112 | |(% rowspan="4" %)**Autre**|(% colspan="4" %)Autres fonctions avancées et/ou non supportées | ||
113 | |ads-pwdmindelay|Entier|0|Non supporté | ||
114 | |ads-pwdmaxdelay|Entier|0|Non supporté | ||
115 | |ads-pwdattribute|Chaîne|userPassword|((( | ||
116 | Nom de l'attribut où est stocké le mot de passe dans le LDAP. | ||
117 | |||
118 | //Note : Changer ce paramètre est déconseillé dans DigDash Enterprise.// | ||
119 | ))) | ||
120 | |||
121 | (% class="box infomessage" %) | ||
122 | ((( | ||
123 | //NB : Les changements des paramètres de la politique de mot de passe dans LDAP ne sont appliqués que sur les nouveaux mots de passe. Les mots de passe déjà existants conservent la politique de mot de passe qu’il y avait lors de leur création.// | ||
124 | ))) | ||
125 | |||
126 | = Configuration de la qualité du mot de passe (spécifique Digdash Enterprise) = | ||
127 | |||
128 | Par défaut DigDash Enterprise stocke les mots de passe des utilisateurs de manière "hachée" dans LDAP. De ce fait ce dernier n'a pas le mot de passe original saisi par l'utilisateur et ne peut donc pas en contrôler la qualité. Ce contrôle est directement effectué dans DigDash Enterprise. | ||
129 | |||
130 | Ce chapitre décrit comment configurer les contraintes de mot de passe. | ||
131 | |||
132 | Les règles de qualité du mot de passe sont définies dans le fichier **passwordpolicyrepository.xml**. | ||
133 | |||
134 | Un fichier par défaut est fourni, mais il ne contient aucune contrainte sur les mots de passe des utilisateurs. Le fichier par défaut est situé dans l'application web ddenterpriseapi mais il n'est pas conseillé de le modifier à cet emplacement à moins de perdre les modifications à la prochaine montée de version de l'outil. | ||
135 | |||
136 | Pour modifier les règles par défaut, la procédure la plus simple est : | ||
137 | |||
138 | 1. **Copiez** le fichier par défaut situé à l'emplacement suivant : | ||
139 | **<DD Install>/apache-tomcat/webapps/ddenterpriseapi/WEB-INF/ classes/resources/config/passwordpolicyrepository.xml | ||
140 | **vers l'emplacement suivant : | ||
141 | <utilisateur>/Application Data/Enterprise Server/ddenterpriseapi/config/**passwordpolicyrepository.xml** | ||
142 | 1. **Modifiez** la copie avec un éditeur de texte | ||
143 | 1. **Redémarrez** le serveur Tomcat après modification. | ||
144 | |||
145 | == Format du fichier **passwordpolicyrepository.xml** == | ||
146 | |||
147 | Le fichier fourni par défaut contient le XML suivant : | ||
148 | |||
149 | {{code language="XML"}} | ||
150 | <PasswordPolicyRepository> | ||
151 | <Rules> | ||
152 | <Profil>administrator</Profil> | ||
153 | <Pattern>.*</Pattern> | ||
154 | <MustHaveUpperCase>false</MustHaveUpperCase> | ||
155 | <MustHaveLowerCase>false</MustHaveLowerCase> | ||
156 | <MustHaveNumeric>false</MustHaveNumeric> | ||
157 | <MustHaveSpecialChar>false</MustHaveSpecialChar> | ||
158 | <MustNotContainID>false</MustNotContainID> | ||
159 | </Rules> | ||
160 | |||
161 | <Rules> | ||
162 | <Profil>user</Profil> | ||
163 | <Pattern>.*</Pattern> | ||
164 | <MustHaveUpperCase>false</MustHaveUpperCase> | ||
165 | <MustHaveLowerCase>false</MustHaveLowerCase> | ||
166 | <MustHaveNumeric>false</MustHaveNumeric> | ||
167 | <MustHaveSpecialChar>false</MustHaveSpecialChar> | ||
168 | <MustNotContainID>false</MustNotContainID> | ||
169 | </Rules> | ||
170 | </PasswordPolicyRepository> | ||
171 | {{/code}} | ||
172 | |||
173 | Il définit deux règles, une pour le profil des administrateurs DigDash (admin, etc.) et une pour le profil des autres utilisateurs. Les deux règles ont la même syntaxe. | ||
174 | |||
175 | Ces deux profils vous permettent de spécifier une qualité de mot de passe différente pour les administrateurs et les utilisateurs. | ||
176 | |||
177 | Messages d'erreurs. Les éléments **Pattern**, **MustHaveUpperCase**, **MustHaveLowerCase**, **MustHaveNumeric**, **MustHaveSpecialChar **et **MustNotContainID **peuvent spécifier un attribut **msg **optionnel qui sera affiché lorsuqe la règle correspondante ne sera pas respectée. Par exemple | ||
178 | |||
179 | {{code language="XML"}} | ||
180 | <PasswordPolicyRepository> | ||
181 | <Rules> | ||
182 | <Profil>administrator</Profil> | ||
183 | <Pattern msg="Au moins 8 caractères">.{8,}</Pattern> | ||
184 | <MustHaveUpperCase msg="Au moins une majuscule">true</MustHaveUpperCase> | ||
185 | <MustHaveLowerCase msg="Au moins une minuscule">true</MustHaveLowerCase> | ||
186 | <MustHaveNumeric>false</MustHaveNumeric> | ||
187 | <MustHaveSpecialChar msg="Au moins un caractère spécial">true</MustHaveSpecialChar> | ||
188 | <MustNotContainID msg="Ne doit pas contenir votre identifiant">true</MustNotContainID> | ||
189 | </Rules> | ||
190 | </PasswordPolicyRepository> | ||
191 | {{/code}} | ||
192 | |||
193 | == Paramètres de règle == | ||
194 | |||
195 | |**Paramètre**|**Type**|**Valeur défaut**|**Description** | ||
196 | |Profil|Chaîne|((( | ||
197 | administrator | ||
198 | |||
199 | user | ||
200 | )))|((( | ||
201 | Nom du profil concerné par cette règle: | ||
202 | |||
203 | **administrator **: la règle concerne les administrateurs DigDash (admin, etc.) | ||
204 | |||
205 | **user **: la règle concerne tous les autres utilisateurs | ||
206 | |||
207 | //Note : Pour l'instant aucune autre valeur ne sera prise en compte par DigDash Enterprise.// | ||
208 | ))) | ||
209 | |Pattern|Chaîne (expression régulière)|.*|((( | ||
210 | Expression régulière optionnelle permettant de spécifier une syntaxe de mot de passe plus complexe, en complément des autres paramètres (Voir paragraphe suivant). | ||
211 | |||
212 | **.*** : n'importe quelle syntaxe est autorisée. | ||
213 | |||
214 | Si le mot de passe ne répond pas à l'expression régulière, le mot de passe est rejeté quel que soit sa concordance avec les autres paramètres de la règle. | ||
215 | ))) | ||
216 | |MustHaveUpperCase|Booléen|false|((( | ||
217 | **true **: le mot de passe doit contenir au moins un caractère majuscule. | ||
218 | |||
219 | **false **: le mot de passe peut ne pas contenir de caractère majuscule. | ||
220 | ))) | ||
221 | |MustHaveLowerCase|Booléen|false|((( | ||
222 | **true **: le mot de passe doit contenir au moins un caractère minuscule. | ||
223 | |||
224 | **false **: le mot de passe peut ne pas contenir de caractère minuscule. | ||
225 | ))) | ||
226 | |MustHaveNumeric|Booléen|false|((( | ||
227 | **true **: le mot de passe doit contenir au moins un chiffre. | ||
228 | |||
229 | **false **: le mot de passe peut ne pas contenir de chiffre. | ||
230 | ))) | ||
231 | |MustHaveSpecialChar|Booléen|false|((( | ||
232 | **true **: le mot de passe doit contenir au moins un caractère qui ne soit une lettre ou un chiffre. | ||
233 | |||
234 | **false **: le mot de passe peut ne pas contenir de caractère qui ne soit une lettre ou un chiffre. | ||
235 | ))) | ||
236 | |MustNotContainID|Booléen|false|((( | ||
237 | **true **: le mot de passe ne doit pas contenir l'identifiant de l'utilisateur. | ||
238 | |||
239 | **false **: le mot de passe peut contenir l'identifiant de l'utilisateur. | ||
240 | ))) | ||
241 | |||
242 | == Grammaire avancée via le paramètre Pattern (expressions régulières) == | ||
243 | |||
244 | Le paramètre de règle **Pattern** permet de définir des contraintes plus évoluées sur les mots de passe en utilisant la syntaxe des expressions régulières. | ||
245 | |||
246 | Ce document n'est pas une référence sur les expressions régulières. Nous ne donnons que quelques exemples d'expressions qui peuvent être utiles à des cas d'usages plus fréquents. | ||
247 | |||
248 | Pour référence, la syntaxe **Java Regex** est utilisée lors de la vérification du Pattern. | ||
249 | |||
250 | Exemples : | ||
251 | |||
252 | * Tout chaîne : **.*** | ||
253 | * Spécifier une longueur minimale : **.{8,}** | ||
254 | * Spécifier une longueur minimale et maximale : **.{8,20}** | ||
255 | * Interdire les espaces et tabulations : **(?=\S+$).*** | ||
256 | * Au moins un caractère numérique : **(?=.*[0-9]).*** | ||
257 | * Au moins un caractère minuscule : **(?=.*[a-z]).*** | ||
258 | * Au moins un caractère majuscule : **(?=.*[A-Z]).*** | ||
259 | * Au moins un caractère spécial : **(?=.*[@#$%^&+=_\-]).*** | ||
260 | |||
261 | Il est possible de grouper ces expressions au sein d'une même expression régulière, par exemple : | ||
262 | |||
263 | **((?=.*[0-9])(?=.*[a-z])(?=.*[A-Z])(?=.*[@#$%^&+=])(?=\S+$).{8,})** | ||
264 | |||
265 | (Notez les parenthèses autour de la combinaison) | ||
266 | |||
267 | (% class="box infomessage" %) | ||
268 | ((( | ||
269 | //NB : La vérification du mot de passe commence par la validation du pattern. Si le mot de passe ne répond pas aux contraintes de l'expression régulière, les autres paramètres simples de la règle ("Must...") ne seront pas vérifiés.// | ||
270 | ))) | ||
271 | |||
272 | == (% id="cke_bm_242S" style="display:none" %) (%%)Messages d'erreurs == | ||
273 | |||
274 | Les paramètres **Pattern**, **MustHaveUpperCase**, **MustHaveLowerCase**, **MustHaveNumeric**, **MustHaveSpecialChar **et **MustNotContainID **peuvent spécifier un attribut **msg **optionnel qui sera affiché lorsque la règle correspondante ne sera pas respectée lors de la saisie du nouveau mot de passe. | ||
275 | |||
276 | Exemple : | ||
277 | |||
278 | {{code language="XML"}} | ||
279 | <PasswordPolicyRepository> | ||
280 | <Rules> | ||
281 | <Profil>administrator</Profil> | ||
282 | <Pattern msg="Au moins 8 caractères">.{8,}</Pattern> | ||
283 | <MustHaveUpperCase msg="Au moins une majuscule">true</MustHaveUpperCase> | ||
284 | <MustHaveLowerCase msg="Au moins une minuscule">true</MustHaveLowerCase> | ||
285 | <MustHaveNumeric msg="Au moins un chiffre">true</MustHaveNumeric> | ||
286 | <MustHaveSpecialChar msg="Au moins un caractère spécial">true</MustHaveSpecialChar> | ||
287 | <MustNotContainID msg="Ne doit pas contenir votre identifiant">true</MustNotContainID> | ||
288 | </Rules> | ||
289 | </PasswordPolicyRepository> | ||
290 | {{/code}} | ||
291 | |||
292 |