1 .lf 1 stdin 2 .TH SLAPO_PPOLICY 5 "2025/05/22" "OpenLDAP 2.6.10" 3 .\" Copyright 2004-2024 The OpenLDAP Foundation All Rights Reserved. 4 .\" Copying restrictions apply. See COPYRIGHT/LICENSE. 5 .\" $OpenLDAP$ 6 .SH NAME 7 slapo\-ppolicy \- Password Policy overlay to slapd 8 .SH SYNOPSIS 9 /etc/openldap/slapd.conf 10 .SH DESCRIPTION 11 .LP 12 The 13 .B ppolicy 14 overlay 15 is an implementation of the most recent IETF Password 16 Policy proposal for LDAP. When instantiated, it intercepts, 17 decodes and applies specific password policy controls to overall 18 use of a backend database, changes to user password fields, etc. 19 .P 20 The overlay provides a variety of password control mechanisms. They 21 include password aging -- both minimum and maximum ages, password 22 reuse and duplication control, account time-outs, mandatory password 23 resets, acceptable password content, and even grace logins. 24 Different groups of users may be associated with different password 25 policies, and there is no limit to the number of password policies 26 that may be created. 27 .P 28 Note that some of the policies do not take effect when the operation 29 is performed with the 30 .B rootdn 31 identity; all the operations, when performed with any other identity, 32 may be subjected to constraints, like access control. This overlay 33 requires a rootdn to be configured on the database. 34 .P 35 During password update, an identity with 36 .B manage 37 access to the userPassword attribute is considered a password 38 administrator where relevant to the IETF Password Policy proposal. 39 .P 40 Note that the IETF Password Policy proposal for LDAP makes sense 41 when considering a single-valued password attribute, while 42 the userPassword attribute allows multiple values. This implementation 43 enforces a single value for the userPassword attribute, despite 44 its specification. 45 .P 46 In addition to supporting the IETF Password Policy, this module 47 supports the SunDS Account Usability control (1.3.6.1.4.1.42.2.27.9.5.8) 48 on search requests and can send the Netscape Password validity controls 49 when configured to do so. 50 51 .SH CONFIGURATION 52 These 53 .B slapd.conf 54 configuration options apply to the ppolicy overlay. They should appear 55 after the 56 .B overlay 57 directive. 58 .TP 59 .B ppolicy_default <policyDN> 60 Specify the DN of the pwdPolicy object to use when no specific policy is 61 set on a given user's entry. If there is no specific policy for an entry 62 and no default is given, then no policies will be enforced. 63 .TP 64 .B ppolicy_forward_updates 65 Specify that policy state changes that result from Bind operations (such 66 as recording failures, lockout, etc.) on a consumer should be forwarded 67 to a provider instead of being written directly into the consumer's local 68 database. This setting is only useful on a replication consumer, and 69 also requires the 70 .B updateref 71 setting and 72 .B chain 73 overlay to be appropriately configured. 74 .TP 75 .B ppolicy_hash_cleartext 76 Specify that cleartext passwords present in Add and Modify requests should 77 be hashed before being stored in the database. This violates the X.500/LDAP 78 information model, but may be needed to compensate for LDAP clients that 79 don't use the Password Modify extended operation to manage passwords. It 80 is recommended that when this option is used that compare, search, and 81 read access be denied to all directory users. 82 .TP 83 .B ppolicy_use_lockout 84 A client will always receive an LDAP 85 .B InvalidCredentials 86 response when 87 Binding to a locked account. By default, when a Password Policy control 88 was provided on the Bind request, a Password Policy response will be 89 included with no special error code set. This option changes the 90 Password Policy response to include the 91 .B AccountLocked 92 error code. Note 93 that sending the 94 .B AccountLocked 95 error code provides useful information 96 to an attacker; sites that are sensitive to security issues should not 97 enable this option. 98 .TP 99 .B ppolicy_send_netscape_controls 100 If set, ppolicy will send the password policy expired (2.16.840.1.113730.3.4.4) 101 and password policy expiring (2.16.840.1.113730.3.4.5) controls when 102 appropriate. The controls are not sent for bind requests where the Password 103 policy control has already been requested. Default is not to send the controls. 104 .TP 105 .B ppolicy_check_module <path> 106 Specify the path of a loadable module containing a 107 .B check_password() 108 function for additional password quality checks. The use of this module 109 is described further below in the description of the 110 .B pwdPolicyChecker 111 objectclass. 112 113 Note: The user-defined loadable module must be in 114 .B slapd's 115 standard executable search PATH, or an absolute path must be provided. 116 117 Note: Use of a 118 .B ppolicy_check_module 119 is a non-standard extension to the LDAP password 120 policy proposal. 121 122 123 .SH OBJECT CLASS 124 The 125 .B ppolicy 126 overlay depends on the 127 .B pwdPolicy 128 object class. The definition of that class is as follows: 129 .LP 130 .RS 4 131 ( 1.3.6.1.4.1.42.2.27.8.2.1 132 NAME 'pwdPolicy' 133 AUXILIARY 134 SUP top 135 MUST ( pwdAttribute ) 136 MAY ( 137 pwdMinAge $ pwdMaxAge $ pwdInHistory $ 138 pwdCheckQuality $ pwdMinLength $ pwdMaxLength $ 139 pwdExpireWarning $ pwdGraceAuthnLimit $ 140 pwdGraceExpiry $ pwdLockout $ pwdLockoutDuration $ 141 pwdMaxFailure $ pwdFailureCountInterval $ 142 pwdMustChange $ pwdAllowUserChange $ 143 pwdSafeModify $ pwdMaxRecordedFailure $ 144 pwdMinDelay $ pwdMaxDelay $ pwdMaxIdle ) ) 145 .RE 146 147 The 148 .B pwdPolicy 149 class is not structural, and so entries using it require another, 150 structural, object class. The 151 .B namedPolicy 152 object class is a good choice. 153 .B namedPolicy 154 requires a 155 .B cn 156 attribute, suitable as the policy entry's rDN. 157 158 This implementation also provides an additional 159 .B pwdPolicyChecker 160 objectclass, used for password quality checking (see below). 161 .LP 162 .RS 4 163 ( 1.3.6.1.4.1.4754.2.99.1 164 NAME 'pwdPolicyChecker' 165 AUXILIARY 166 SUP top 167 MAY ( pwdCheckModule $ pwdCheckModuleArg $ pwdUseCheckModule ) ) 168 .RE 169 .P 170 Every account that should be subject to password policy control should 171 have a 172 .B 173 pwdPolicySubentry 174 attribute containing the DN of a valid 175 .B pwdPolicy 176 entry, or they can simply use the configured default. 177 In this way different users may be managed according to 178 different policies. 179 180 .SH OBJECT CLASS ATTRIBUTES 181 .P 182 Each one of the sections below details the meaning and use of a particular 183 attribute of this 184 .B pwdPolicy 185 object class. 186 .P 187 188 .B pwdAttribute 189 .P 190 This attribute contains the name of the attribute to which the password 191 policy is applied. For example, the password policy may be applied 192 to the 193 .B userPassword 194 attribute. 195 .P 196 Note: in this implementation, the only 197 value accepted for 198 .B pwdAttribute 199 is 200 .IR " userPassword ". 201 .LP 202 .RS 4 203 ( 1.3.6.1.4.1.42.2.27.8.1.1 204 NAME 'pwdAttribute' 205 EQUALITY objectIdentifierMatch 206 SYNTAX 1.3.6.1.4.1.1466.115.121.1.38 ) 207 .RE 208 209 .B pwdMinAge 210 .P 211 This attribute contains the number of seconds that must elapse 212 between modifications allowed to the password. If this attribute 213 is not present, zero seconds is assumed (i.e. the password may be 214 modified whenever and however often is desired). 215 .LP 216 .RS 4 217 ( 1.3.6.1.4.1.42.2.27.8.1.2 218 NAME 'pwdMinAge' 219 EQUALITY integerMatch 220 SYNTAX 1.3.6.1.4.1.1466.115.121.1.27 221 SINGLE\-VALUE ) 222 .RE 223 224 .B pwdMaxAge 225 .P 226 This attribute contains the number of seconds after which a modified 227 password will expire. If this attribute is not present, or if its 228 value is zero (0), then passwords will not expire. 229 .LP 230 .RS 4 231 ( 1.3.6.1.4.1.42.2.27.8.1.3 232 NAME 'pwdMaxAge' 233 EQUALITY integerMatch 234 SYNTAX 1.3.6.1.4.1.1466.115.121.1.27 235 SINGLE\-VALUE ) 236 .RE 237 238 .B pwdInHistory 239 .P 240 This attribute is used to specify the maximum number of used 241 passwords that will be stored in the 242 .B pwdHistory 243 attribute. If the 244 .B pwdInHistory 245 attribute is not present, or if its value is 246 zero (0), used passwords will not be stored in 247 .B pwdHistory 248 and thus any previously-used password may be reused. 249 No history checking occurs if the password is being modified by the 250 .BR rootdn , 251 although the password is saved in the history. 252 .LP 253 .RS 4 254 ( 1.3.6.1.4.1.42.2.27.8.1.4 255 NAME 'pwdInHistory' 256 EQUALITY integerMatch 257 SYNTAX 1.3.6.1.4.1.1466.115.121.1.27 258 SINGLE\-VALUE ) 259 .RE 260 261 .B pwdCheckQuality 262 .P 263 This attribute indicates if and how password syntax will be checked 264 while a password is being modified or added. If this attribute is 265 not present, or its value is zero (0), no syntax checking will be 266 done. If its value is one (1), the server will check the syntax, 267 and if the server is unable to check the syntax, 268 whether due to a client-side hashed password or some other reason, 269 it will be 270 accepted. If its value is two (2), the server will check the syntax, 271 and if the server is unable to check the syntax it will return an 272 error refusing the password. 273 .LP 274 .RS 4 275 ( 1.3.6.1.4.1.42.2.27.8.1.5 276 NAME 'pwdCheckQuality' 277 EQUALITY integerMatch 278 SYNTAX 1.3.6.1.4.1.1466.115.121.1.27 279 SINGLE\-VALUE ) 280 .RE 281 282 .B pwdMinLength 283 .P 284 When syntax checking is enabled 285 (see also the 286 .B pwdCheckQuality 287 attribute), this attribute contains the minimum 288 length in bytes that will be accepted in a password. If this 289 attribute is not present, minimum password length is not 290 enforced. If the server is unable to check the length of the password, 291 whether due to a client-side hashed password or some other reason, 292 the server will, depending on the 293 value of 294 .BR pwdCheckQuality , 295 either accept the password 296 without checking it (if 297 .B pwdCheckQuality 298 is zero (0) or one (1)) or refuse it (if 299 .B pwdCheckQuality 300 is two (2)). If the number of characters should be enforced with regards 301 to a particular encoding, the use of an appropriate 302 .B ppolicy_check_module 303 is required. 304 .LP 305 .RS 4 306 ( 1.3.6.1.4.1.42.2.27.8.1.6 307 NAME 'pwdMinLength' 308 EQUALITY integerMatch 309 SYNTAX 1.3.6.1.4.1.1466.115.121.1.27 310 SINGLE\-VALUE ) 311 .RE 312 313 .B pwdMaxLength 314 .P 315 When syntax checking is enabled 316 (see also the 317 .B pwdCheckQuality 318 attribute), this attribute contains the maximum 319 length in bytes that will be accepted in a password. If this 320 attribute is not present, maximum password length is not 321 enforced. If the server is unable to check the length of the password, 322 whether due to a client-side hashed password or some other reason, 323 the server will, depending on the 324 value of 325 .BR pwdCheckQuality , 326 either accept the password 327 without checking it (if 328 .B pwdCheckQuality 329 is zero (0) or one (1)) or refuse it (if 330 .B pwdCheckQuality 331 is two (2)). If the number of characters should be enforced with regards 332 to a particular encoding, the use of an appropriate 333 .B ppolicy_check_module 334 is required. 335 .LP 336 .RS 4 337 ( 1.3.6.1.4.1.42.2.27.8.1.31 338 NAME 'pwdMaxLength' 339 EQUALITY integerMatch 340 SYNTAX 1.3.6.1.4.1.1466.115.121.1.27 341 SINGLE\-VALUE ) 342 .RE 343 344 .B pwdExpireWarning 345 .P 346 This attribute contains the maximum number of seconds before a 347 password is due to expire that expiration warning messages will be 348 returned to a user who is authenticating to the directory. 349 If this attribute is not 350 present, or if the value is zero (0), no warnings will be sent. 351 .LP 352 .RS 4 353 ( 1.3.6.1.4.1.42.2.27.8.1.7 354 NAME 'pwdExpireWarning' 355 EQUALITY integerMatch 356 SYNTAX 1.3.6.1.4.1.1466.115.121.1.27 357 SINGLE\-VALUE ) 358 .RE 359 360 .B pwdGraceAuthnLimit 361 .P 362 This attribute contains the number of times that an expired password 363 may be used to authenticate a user to the directory. If this 364 attribute is not present or if its value is zero (0), users with 365 expired passwords will not be allowed to authenticate to the 366 directory. 367 .LP 368 .RS 4 369 ( 1.3.6.1.4.1.42.2.27.8.1.8 370 NAME 'pwdGraceAuthnLimit' 371 EQUALITY integerMatch 372 SYNTAX 1.3.6.1.4.1.1466.115.121.1.27 373 SINGLE\-VALUE ) 374 .RE 375 376 .B pwdGraceExpiry 377 .P 378 This attribute specifies the number of seconds the grace 379 authentications are valid. If this attribute is not present or if 380 the value is zero (0), there is no time limit on the grace 381 authentications. 382 .LP 383 .RS 4 384 ( 1.3.6.1.4.1.42.2.27.8.1.30 385 NAME 'pwdGraceExpiry' 386 EQUALITY integerMatch 387 ORDERING integerOrderingMatch 388 SYNTAX 1.3.6.1.4.1.1466.115.121.1.27 389 SINGLE\-VALUE ) 390 .RE 391 392 .B pwdLockout 393 .P 394 This attribute specifies the action that should be taken 395 by the directory when a user has made a number of failed attempts 396 to authenticate to the directory. If 397 .B pwdLockout 398 is set (its value is "TRUE"), the user will not be allowed to 399 attempt to authenticate to the directory after there have been a 400 specified number of consecutive failed bind attempts. The maximum 401 number of consecutive failed bind attempts allowed is specified by 402 the 403 .B pwdMaxFailure 404 attribute. If 405 .B pwdLockout 406 is not present, or if its value is "FALSE", the password may be 407 used to authenticate no matter how many consecutive failed bind 408 attempts have been made. 409 .LP 410 .RS 4 411 ( 1.3.6.1.4.1.42.2.27.8.1.9 412 NAME 'pwdLockout' 413 EQUALITY booleanMatch 414 SYNTAX 1.3.6.1.4.1.1466.115.121.1.7 415 SINGLE\-VALUE ) 416 .RE 417 418 .B pwdLockoutDuration 419 .P 420 This attribute contains the number of seconds during 421 which the password cannot be used to authenticate the 422 user to the directory due to too many consecutive failed 423 bind attempts. 424 (See also 425 .B pwdLockout 426 and 427 .BR pwdMaxFailure .) 428 If 429 .B pwdLockoutDuration 430 is not present, or if its value is zero (0), the password 431 cannot be used to authenticate the user to the directory 432 again until it is reset by an administrator. 433 .LP 434 .RS 4 435 ( 1.3.6.1.4.1.42.2.27.8.1.10 436 NAME 'pwdLockoutDuration' 437 EQUALITY integerMatch 438 SYNTAX 1.3.6.1.4.1.1466.115.121.1.27 439 SINGLE\-VALUE ) 440 .RE 441 442 .B pwdMaxFailure 443 .P 444 This attribute contains the number of consecutive failed bind 445 attempts after which the password may not be used to authenticate 446 a user to the directory. 447 If 448 .B pwdMaxFailure 449 is not present, or its value is zero (0), then a user will 450 be allowed to continue to attempt to authenticate to 451 the directory, no matter how many consecutive failed 452 bind attempts have occurred with that user's DN. 453 (See also 454 .B pwdLockout 455 and 456 .BR pwdLockoutDuration .) 457 .LP 458 .RS 4 459 ( 1.3.6.1.4.1.42.2.27.8.1.11 460 NAME 'pwdMaxFailure' 461 EQUALITY integerMatch 462 SYNTAX 1.3.6.1.4.1.1466.115.121.1.27 463 SINGLE\-VALUE ) 464 .RE 465 466 .B pwdMaxRecordedFailure 467 .P 468 This attribute contains the maximum number of failed bind 469 attempts to store in a user's entry. 470 If 471 .B pwdMaxRecordedFailure 472 is not present, or its value is zero (0), then it defaults 473 to the value of 474 .BR pwdMaxFailure . 475 If that value is also 0, the default is 5. 476 .LP 477 .RS 4 478 ( 1.3.6.1.4.1.42.2.27.8.1.32 479 NAME 'pwdMaxRecordedFailure' 480 EQUALITY integerMatch 481 SYNTAX 1.3.6.1.4.1.1466.115.121.1.27 482 SINGLE\-VALUE ) 483 .RE 484 485 .B pwdFailureCountInterval 486 .P 487 This attribute contains the number of seconds after which old 488 consecutive failed bind attempts are purged from the failure counter, 489 even though no successful authentication has occurred. 490 If 491 .B pwdFailureCountInterval 492 is not present, or its value is zero (0), the failure 493 counter will only be reset by a successful authentication. 494 .LP 495 .RS 4 496 ( 1.3.6.1.4.1.42.2.27.8.1.12 497 NAME 'pwdFailureCountInterval' 498 EQUALITY integerMatch 499 SYNTAX 1.3.6.1.4.1.1466.115.121.1.27 500 SINGLE\-VALUE ) 501 .RE 502 503 .B pwdMustChange 504 .P 505 This attribute specifies whether users must change their passwords 506 when they first bind to the directory after a password is set or 507 reset by the administrator, or not. If 508 .B pwdMustChange 509 has a value of "TRUE", users must change their passwords when they 510 first bind to the directory after a password is set or reset by 511 the administrator. If 512 .B pwdMustChange 513 is not present, or its value is "FALSE", 514 users are not required to change their password upon binding after 515 the administrator sets or resets the password. 516 .LP 517 .RS 4 518 ( 1.3.6.1.4.1.42.2.27.8.1.13 519 NAME 'pwdMustChange' 520 EQUALITY booleanMatch 521 SYNTAX 1.3.6.1.4.1.1466.115.121.1.7 522 SINGLE\-VALUE ) 523 .RE 524 525 .B pwdAllowUserChange 526 .P 527 This attribute specifies whether users are allowed to change their own 528 passwords or not. If 529 .B pwdAllowUserChange 530 is set to "TRUE", or if the attribute is not present, users will be 531 allowed to change their own passwords. If its value is "FALSE", 532 users will not be allowed to change their own passwords. 533 .LP 534 Note: this implies that when 535 .B pwdAllowUserChange 536 is set to "TRUE", 537 users will still be able to change the password of another user, 538 subjected to access control. 539 This restriction only applies to modifications of ones's own password. 540 It should also be noted that 541 .B pwdAllowUserChange 542 was defined in the specification to provide rough access control 543 to the password attribute in implementations that do not allow fine-grain 544 access control. 545 Since OpenLDAP provides fine-grain access control, the use of this attribute 546 is discouraged; ACLs should be used instead 547 (see 548 .BR slapd.access (5) 549 for details). 550 .LP 551 .RS 4 552 ( 1.3.6.1.4.1.42.2.27.8.1.14 553 NAME 'pwdAllowUserChange' 554 EQUALITY booleanMatch 555 SYNTAX 1.3.6.1.4.1.1466.115.121.1.7 556 SINGLE\-VALUE ) 557 .RE 558 559 .B pwdSafeModify 560 .P 561 This attribute denotes whether the user's existing password must be sent 562 along with their new password when changing a password. If 563 .B pwdSafeModify 564 is set to "TRUE", the existing password must be sent 565 along with the new password. If the attribute is not present, or 566 its value is "FALSE", the existing password need not be sent 567 along with the new password. 568 .LP 569 .RS 4 570 ( 1.3.6.1.4.1.42.2.27.8.1.15 571 NAME 'pwdSafeModify' 572 EQUALITY booleanMatch 573 SYNTAX 1.3.6.1.4.1.1466.115.121.1.7 574 SINGLE\-VALUE ) 575 .RE 576 577 .B pwdMinDelay 578 .P 579 This attribute specifies the number of seconds to delay responding to 580 the first failed authentication attempt. If this attribute is not 581 set or is zero (0), no delays will be used. 582 .B pwdMaxDelay 583 must also be specified if 584 .B pwdMinDelay 585 is set. 586 587 Note that this implementation uses a variable lockout instead of 588 delaying the bind response. 589 .LP 590 .RS 4 591 ( 1.3.6.1.4.1.42.2.27.8.1.24 592 NAME 'pwdMinDelay' 593 EQUALITY integerMatch 594 ORDERING integerOrderingMatch 595 SYNTAX 1.3.6.1.4.1.1466.115.121.1.27 596 SINGLE\-VALUE ) 597 .RE 598 599 .B pwdMaxDelay 600 .P 601 This attribute specifies the maximum number of seconds to delay when 602 responding to a failed authentication attempt. The time specified in 603 .B pwdMinDelay 604 is used as the starting time and is then doubled on each failure until 605 the delay time is greater than or equal to 606 .B pwdMaxDelay 607 (or a successful authentication occurs, which resets the failure 608 counter). 609 .B pwdMinDelay 610 must also be specified if 611 .B pwdMaxDelay 612 is set. 613 614 Note that this implementation uses a variable lockout instead of 615 delaying the bind response. 616 .LP 617 .RS 4 618 ( 1.3.6.1.4.1.42.2.27.8.1.25 619 NAME 'pwdMaxDelay' 620 EQUALITY integerMatch 621 ORDERING integerOrderingMatch 622 SYNTAX 1.3.6.1.4.1.1466.115.121.1.27 623 SINGLE\-VALUE ) 624 .RE 625 626 .B pwdMaxIdle 627 .P 628 This attribute specifies the number of seconds an account may remain 629 unused before it becomes locked. If this attribute is not set or is 630 zero (0), no check is performed. For this to be enforced, 631 .B lastbind 632 functionality needs to be enabled on the database, that is 633 .B olcLastBind 634 is set to 635 .BR TRUE . 636 .LP 637 .RS 4 638 ( 1.3.6.1.4.1.42.2.27.8.1.26 639 NAME 'pwdMaxIdle' 640 EQUALITY integerMatch 641 ORDERING integerOrderingMatch 642 SYNTAX 1.3.6.1.4.1.1466.115.121.1.27 643 SINGLE\-VALUE ) 644 .RE 645 646 .BR pwdUseCheckModule / pwdCheckModuleArg 647 .P 648 The 649 .B pwdUseCheckModule 650 attribute enables use of a loadable module previously configured with 651 .B ppolicy_check_module 652 for the current policy. The module must 653 instantiate the check_password() function. This function 654 will be called to further check a new password if 655 .B pwdCheckQuality 656 is set to one (1) or two (2), 657 after all of the built-in password compliance checks have 658 been passed. This function will be called according to this 659 function prototype: 660 .RS 4 661 int 662 .I check_password 663 (char *pPasswd, struct berval *pErrmsg, Entry *pEntry, struct berval *pArg); 664 .RE 665 The 666 .B pPasswd 667 parameter contains the clear-text user password, the 668 .B pErrmsg 669 parameter points to a 670 .B struct berval 671 containing space 672 to return human-readable details about any error it encounters. 673 The 674 .B bv_len 675 field must contain the size of the space provided 676 by the 677 .B bv_val 678 field. 679 680 The 681 .B pEntry 682 parameter is optional, if non-NULL, carries a pointer to the 683 entry whose password is being checked. 684 685 The optional 686 .B pArg 687 parameter points to a 688 .B struct berval 689 containing the value of 690 .B pwdCheckModuleArg 691 in the effective password policy, if set, otherwise NULL. 692 693 If 694 .B pErrmsg 695 is NULL, then 696 .I funcName 697 must NOT attempt to use it. 698 A return value of LDAP_SUCCESS from the called 699 function indicates that the password is ok, any other value 700 indicates that the password is unacceptable. If the password is 701 unacceptable, the server will return an error to the client, and 702 .B pErrmsg 703 may be used to return a human-readable textual explanation of the 704 error. If the space passed in by the caller is too small, the function 705 may replace it with a dynamically allocated buffer, which will 706 be free()'d by slapd. 707 708 The 709 .B pwdCheckModule 710 attribute is now obsolete and is ignored. 711 712 .LP 713 .RS 4 714 ( 1.3.6.1.4.1.4754.1.99.1 715 NAME 'pwdCheckModule' 716 EQUALITY caseExactIA5Match 717 SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 718 OBSOLETE 719 SINGLE\-VALUE ) 720 721 ( 1.3.6.1.4.1.4754.1.99.2 722 NAME 'pwdCheckModuleArg' 723 EQUALITY octetStringMatch 724 SYNTAX 1.3.6.1.4.1.1466.115.121.1.40 725 DESC 'Argument to pass to check_password() function' 726 SINGLE\-VALUE ) 727 728 ( 1.3.6.1.4.1.4754.1.99.3 729 NAME 'pwdUseCheckModule' 730 EQUALITY booleanMatch 731 SYNTAX 1.3.6.1.4.1.1466.115.121.1.7 732 SINGLE\-VALUE ) 733 .RE 734 735 .SH OPERATIONAL ATTRIBUTES 736 .P 737 The operational attributes used by the 738 .B ppolicy 739 module are stored in the user's entry. Most of these attributes 740 are not intended to be changed directly by users; they are there 741 to track user activity. They have been detailed here so that 742 administrators and users can both understand the workings of 743 the 744 .B ppolicy 745 module. 746 747 .P 748 Note that the current IETF Password Policy proposal does not define 749 how these operational attributes are expected to behave in a 750 replication environment. In general, authentication attempts on 751 a replica server only affect the copy of the operational attributes 752 on that replica and will not affect any attributes for 753 a user's entry on the provider. Operational attribute changes 754 resulting from authentication attempts on a provider 755 will usually replicate to the replicas (and also overwrite 756 any changes that originated on the replica). 757 These behaviors are not guaranteed and are subject to change 758 when a formal specification emerges. 759 760 .B userPassword 761 .P 762 The 763 .B userPassword 764 attribute is not strictly part of the 765 .B ppolicy 766 module. It is, however, the attribute that is tracked and controlled 767 by the module. Please refer to the standard OpenLDAP schema for 768 its definition. 769 770 .B pwdPolicySubentry 771 .P 772 This attribute refers directly to the 773 .B pwdPolicy 774 subentry that is to be used for this particular directory user. 775 If 776 .B pwdPolicySubentry 777 exists, it must contain the DN of a valid 778 .B pwdPolicy 779 object. If it does not exist, the 780 .B ppolicy 781 module will enforce the default password policy rules on the 782 user associated with this authenticating DN. If there is no 783 default, or the referenced subentry does not exist, then no 784 policy rules will be enforced. 785 .LP 786 .RS 4 787 ( 1.3.6.1.4.1.42.2.27.8.1.23 788 NAME 'pwdPolicySubentry' 789 DESC 'The pwdPolicy subentry in effect for 790 this object' 791 EQUALITY distinguishedNameMatch 792 SYNTAX 1.3.6.1.4.1.1466.115.121.1.12 793 SINGLE\-VALUE 794 USAGE directoryOperation) 795 .RE 796 797 .B pwdChangedTime 798 .P 799 This attribute denotes the last time that the entry's password was 800 changed. This value is used by the password expiration policy to 801 determine whether the password is too old to be allowed to be used 802 for user authentication. If 803 .B pwdChangedTime 804 does not exist, the user's password will not expire. 805 .LP 806 .RS 4 807 ( 1.3.6.1.4.1.42.2.27.8.1.16 808 NAME 'pwdChangedTime' 809 DESC 'The time the password was last changed' 810 SYNTAX 1.3.6.1.4.1.1466.115.121.1.24 811 EQUALITY generalizedTimeMatch 812 ORDERING generalizedTimeOrderingMatch 813 SINGLE\-VALUE 814 NO\-USER\-MODIFICATION 815 USAGE directoryOperation) 816 .RE 817 818 .B pwdAccountLockedTime 819 .P 820 This attribute contains the time that the user's account was locked. 821 If the account has been locked, the password may no longer be used to 822 authenticate the user to the directory. If 823 .B pwdAccountLockedTime 824 is set to 000001010000Z, the user's account has been permanently locked 825 and may only be unlocked by an administrator. Note that account locking 826 only takes effect when the 827 .B pwdLockout 828 password policy attribute is set to "TRUE". 829 .LP 830 .RS 4 831 ( 1.3.6.1.4.1.42.2.27.8.1.17 832 NAME 'pwdAccountLockedTime' 833 DESC 'The time an user account was locked' 834 SYNTAX 1.3.6.1.4.1.1466.115.121.1.24 835 EQUALITY generalizedTimeMatch 836 ORDERING generalizedTimeOrderingMatch 837 SINGLE\-VALUE 838 USAGE directoryOperation) 839 .RE 840 841 .B pwdFailureTime 842 .P 843 This attribute contains the timestamps of each of the consecutive 844 authentication failures made upon attempted authentication to this 845 DN (i.e. account). If too many timestamps accumulate here (refer to 846 the 847 .B pwdMaxFailure 848 password policy attribute for details), 849 and the 850 .B pwdLockout 851 password policy attribute is set to "TRUE", the 852 account may be locked. 853 (Please also refer to the 854 .B pwdLockout 855 password policy attribute.) 856 Excess timestamps beyond those allowed by 857 .B pwdMaxFailure 858 or 859 .B pwdMaxRecordedFailure 860 may also be purged. If a successful authentication is made to this 861 DN (i.e. to this user account), then 862 .B pwdFailureTime 863 will be cleansed of entries. 864 .LP 865 .RS 4 866 ( 1.3.6.1.4.1.42.2.27.8.1.19 867 NAME 'pwdFailureTime' 868 DESC 'The timestamps of the last consecutive 869 authentication failures' 870 SYNTAX 1.3.6.1.4.1.1466.115.121.1.24 871 EQUALITY generalizedTimeMatch 872 ORDERING generalizedTimeOrderingMatch 873 NO\-USER\-MODIFICATION 874 USAGE directoryOperation ) 875 .RE 876 877 .B pwdHistory 878 .P 879 This attribute contains the history of previously used passwords 880 for this DN (i.e. for this user account). 881 The values of this attribute are stored in string format as follows: 882 883 .RS 4 884 885 pwdHistory= 886 .RS 4 887 time "#" syntaxOID "#" length "#" data 888 .RE 889 890 time= 891 .RS 4 892 GeneralizedTime as specified in section 3.3.13 of [RFC4517] 893 .RE 894 895 .P 896 syntaxOID = numericoid 897 .RS 4 898 This is the string representation of the dotted-decimal OID that 899 defines the syntax used to store the password. numericoid is 900 described in section 1.4 of [RFC4512]. 901 .RE 902 903 length = NumericString 904 .RS 4 905 The number of octets in the data. NumericString is described in 906 section 3.3.23 of [RFC4517]. 907 .RE 908 909 data = 910 .RS 4 911 Octets representing the password in the format specified by syntaxOID. 912 .RE 913 914 .RE 915 916 This format allows the server to store and transmit a history of 917 passwords that have been used. In order for equality matching 918 on the values in this attribute to function properly, the time 919 field is in GMT format. 920 .LP 921 .RS 4 922 ( 1.3.6.1.4.1.42.2.27.8.1.20 923 NAME 'pwdHistory' 924 DESC 'The history of user passwords' 925 SYNTAX 1.3.6.1.4.1.1466.115.121.1.40 926 EQUALITY octetStringMatch 927 NO\-USER\-MODIFICATION 928 USAGE directoryOperation) 929 .RE 930 931 .B pwdGraceUseTime 932 933 This attribute contains the list of timestamps of logins made after 934 the user password in the DN has expired. These post-expiration 935 logins are known as "\fIgrace logins\fP". 936 If too many 937 .I grace logins 938 have been used (please refer to the 939 .B pwdGraceAuthnLimit 940 password policy attribute), then the DN will no longer be allowed 941 to be used to authenticate the user to the directory until the 942 administrator changes the DN's 943 .B userPassword 944 attribute. 945 .LP 946 .RS 4 947 ( 1.3.6.1.4.1.42.2.27.8.1.21 948 NAME 'pwdGraceUseTime' 949 DESC 'The timestamps of the grace login once the password has expired' 950 SYNTAX 1.3.6.1.4.1.1466.115.121.1.24 951 EQUALITY generalizedTimeMatch 952 NO\-USER\-MODIFICATION 953 USAGE directoryOperation) 954 .RE 955 956 .B pwdReset 957 .P 958 This attribute indicates whether the user's password has been reset 959 by the administrator and thus must be changed upon first use of this 960 DN for authentication to the directory. If 961 .B pwdReset 962 is set to "TRUE", then the password was reset and the user must change 963 it upon first authentication. If the attribute does not exist, or 964 is set to "FALSE", the user need not change their password due to 965 administrative reset. 966 .LP 967 .RS 4 968 ( 1.3.6.1.4.1.42.2.27.8.1.22 969 NAME 'pwdReset' 970 DESC 'The indication that the password has 971 been reset' 972 EQUALITY booleanMatch 973 SYNTAX 1.3.6.1.4.1.1466.115.121.1.7 974 SINGLE\-VALUE 975 USAGE directoryOperation) 976 .RE 977 978 .B pwdStartTime 979 980 This attribute specifies the time the entry's password becomes valid 981 for authentication. Authentication attempts made before this time 982 will fail. If this attribute does not exist, then no restriction 983 applies. 984 .LP 985 .RS 4 986 ( 1.3.6.1.4.1.42.2.27.8.1.27 987 NAME 'pwdStartTime' 988 DESC 'The time the password becomes enabled' 989 EQUALITY generalizedTimeMatch 990 ORDERING generalizedTimeOrderingMatch 991 SYNTAX 1.3.6.1.4.1.1466.115.121.1.24 992 SINGLE\-VALUE 993 USAGE directoryOperation ) 994 .RE 995 996 .B pwdEndTime 997 998 This attribute specifies the time the entry's password becomes 999 invalid for authentication. Authentication attempts made after this 1000 time will fail, regardless of expiration or grace settings. If this 1001 attribute does not exist, then this restriction does not apply. 1002 .LP 1003 .RS 4 1004 ( 1.3.6.1.4.1.42.2.27.8.1.28 1005 NAME 'pwdEndTime' 1006 DESC 'The time the password becomes disabled' 1007 EQUALITY generalizedTimeMatch 1008 ORDERING generalizedTimeOrderingMatch 1009 SYNTAX 1.3.6.1.4.1.1466.115.121.1.24 1010 SINGLE\-VALUE 1011 USAGE directoryOperation ) 1012 .RE 1013 1014 Note that pwdStartTime may be set to a time greater than or equal to 1015 pwdEndTime; this simply disables the account. 1016 1017 .B pwdAccountTmpLockoutEnd 1018 .P 1019 This attribute that the user's password has been locked out temporarily 1020 according to the 1021 .B pwdMinDelay 1022 policy option and when the lockout ends. 1023 .LP 1024 .RS 4 1025 ( 1.3.6.1.4.1.42.2.27.8.1.33 1026 NAME 'pwdAccountTmpLockoutEnd' 1027 DESC 'Temporary lockout end' 1028 EQUALITY generalizedTimeMatch 1029 ORDERING generalizedTimeOrderingMatch 1030 SYNTAX 1.3.6.1.4.1.1466.115.121.1.24 1031 SINGLE\-VALUE 1032 NO\-USER\-MODIFICATION 1033 USAGE directoryOperation ) 1034 .RE 1035 1036 .SH SUNDS ACCOUNT USABILITY CONTROL 1037 .LP 1038 If the SunDS Account Usability control is used with a search request, the 1039 overlay will attach validity information to each entry provided all of the 1040 following are met: 1041 .IP \[bu] 2 1042 There is a password policy that applies to the entry 1043 .IP \[bu] 1044 The user has 1045 .B compare 1046 access to the entry's password attribute. 1047 .IP \[bu] 1048 The configured password attribute is present in the entry 1049 1050 .SH EXAMPLES 1051 .LP 1052 .RS 1053 .nf 1054 database mdb 1055 suffix dc=example,dc=com 1056 \|... 1057 overlay ppolicy 1058 ppolicy_default "cn=Standard,ou=Policies,dc=example,dc=com" 1059 .fi 1060 .RE 1061 1062 .SH SEE ALSO 1063 .BR ldap (3), 1064 .BR slapd.conf (5), 1065 .BR slapd\-config (5), 1066 .BR slapo\-chain (5). 1067 .LP 1068 "OpenLDAP Administrator's Guide" (http://www.OpenLDAP.org/doc/admin/) 1069 .LP 1070 IETF LDAP password policy proposal by P. Behera, L. Poitou and J. 1071 Sermersheim: documented in IETF document 1072 "draft-behera-ldap-password-policy-10.txt". 1073 1074 .SH BUGS 1075 The LDAP Password Policy specification is not yet an approved standard, 1076 and it is still evolving. This code will continue to be in flux until the 1077 specification is finalized. 1078 1079 .SH ACKNOWLEDGEMENTS 1080 .P 1081 This module was written in 2004 by Howard Chu of Symas Corporation 1082 with significant input from Neil Dunbar and Kartik Subbarao of Hewlett-Packard. 1083 .P 1084 This manual page borrows heavily and shamelessly from the specification 1085 upon which the password policy module it describes is based. This 1086 source is the 1087 IETF LDAP password policy proposal by P. Behera, L. 1088 Poitou and J. Sermersheim. 1089 The proposal is fully documented in 1090 the 1091 IETF document named draft-behera-ldap-password-policy-10.txt, 1092 written in August of 2009. 1093 .P 1094 .lf 1 ./../Project 1095 .\" Shared Project Acknowledgement Text 1096 .B "OpenLDAP Software" 1097 is developed and maintained by The OpenLDAP Project <http://www.openldap.org/>. 1098 .B "OpenLDAP Software" 1099 is derived from the University of Michigan LDAP 3.3 Release. 1100 .lf 1094 stdin 1101