Здравствуйте!
Провёл эксперимент на Ubuntu 10.04, OpenLDAP 2.4.21. Наложение ppolicy выглядит так:
dn: olcOverlay=ppolicy,olcDatabase={1}bdb,cn=config
objectClass: olcPPolicyConfig
olcOverlay: ppolicy
olcPPolicyDefault: cn=PPolicy Default,ou=System,dc=mycompany,dc=ru
Политика по умолчанию так:
dn: cn=PPolicy Default,ou=System,dc=mycompany,dc=ru
objectClass: applicationProcess
objectClass: pwdPolicy
cn=PPolicy Default
pwdAttribute: 2.5.4.35
pwdInHistory: 3
Запись тестового пользователя выглядит так:
dn: uid=pwtest,ou=Users,dc=mycompany,dc=ru
objectClass: inetOrgPerson
cn: PPolicy Test User
uid: pwtest
sn: PPolicy Test User
userPassword: pwd1
Сразу после добавления записи история паролей пуста, при этом аутентификация проходит с паролем pwd1:
ldapsearch -x -LLL -D 'uid=pwtest,ou=Users,dc=mycompany,dc=ru' -w 'pwd1' -b 'ou=Users,dc=mycompany,dc=ru' '(uid=pwtest)' pwdHistory
dn: uid=pwtest,ou=Users,dc=mycompany,dc=ru
Поменяем пароль на pwd2:
ldappasswd -x -D 'uid=pwtest,ou=Users,dc=mycompany,dc=ru' -w 'pwd1' -s 'pwd2' 'uid=pwtest,ou=Users,dc=mycompany,dc=ru'
Смотрим, что получилось:
ldapsearch -x -LLL -D 'uid=pwtest,ou=Users,dc=mycompany,dc=ru' -w 'pwd2' -b 'ou=Users,dc=mycompany,dc=ru' '(uid=pwtest)' pwdHistory
dn: uid=pwtest,ou=Users,dc=mycompany,dc=ru
pwdHistory: 20120917233620Z#1.3.6.1.4.1.1466.115.121.1.40#4#pwd1
Итак, мы прошли аутентификацию под новым паролем, а в истории у нас старый пароль, причём в открытом виде, вероятно потому, что я его заносил так первоначально в ldif. Поменяем пароль во второй раз:
ldappasswd -x -D 'uid=pwtest,ou=Users,dc=mycompany,dc=ru' -w 'pwd2' -s 'pwd3' 'uid=pwtest,ou=Users,dc=mycompany,dc=ru'
Смотрим, что получилось:
ldapsearch -x -LLL -D 'uid=pwtest,ou=Users,dc=mycompany,dc=ru' -w 'pwd3' -b 'ou=Users,dc=mycompany,dc=ru' '(uid=pwtest)' pwdHistory
dn: uid=pwtest,ou=Users,dc=mycompany,dc=ru
pwdHistory: 20120917233620Z#1.3.6.1.4.1.1466.115.121.1.40#4#pwd1
pwdHistory: 20120917233839Z#1.3.6.1.4.1.1466.115.121.1.40#38#{SSHA}68TxuIA1haW
Rw1IUeuFd+gM0uw5GI8rq
Мы прошли аутентификацию под новым паролем, а в истории у нас уже 2 пароля, причём второй в хэшированном виде. Теперь попробуем поменять пароль на pwd1:
ldappasswd -x -D 'uid=pwtest,ou=Users,dc=mycompany,dc=ru' -w 'pwd3' -s 'pwd1' 'uid=pwtest,ou=Users,dc=mycompany,dc=ru'
Result: Constraint violation (19)
Additional info: Password is in history of old passwords
На pwd2:
ldappasswd -x -D 'uid=pwtest,ou=Users,dc=mycompany,dc=ru' -w 'pwd3' -s 'pwd2' 'uid=pwtest,ou=Users,dc=mycompany,dc=ru'
Result: Constraint violation (19)
Additional info: Password is in history of old passwords
На pwd3:
ldappasswd -x -D 'uid=pwtest,ou=Users,dc=mycompany,dc=ru' -w 'pwd3' -s 'pwd3' 'uid=pwtest,ou=Users,dc=mycompany,dc=ru'
Result: Constraint violation (19)
Additional info: Password is not being changed from existing value
Как видно, всё работает штатно. Осталось проверить замещение истории паролей. Поменяем пароль на pwd4:
ldappasswd -x -D 'uid=pwtest,ou=Users,dc=mycompany,dc=ru' -w 'pwd3' -s 'pwd4' 'uid=pwtest,ou=Users,dc=mycompany,dc=ru'
Смотрим историю:
ldapsearch -x -LLL -D 'uid=pwtest,ou=Users,dc=mycompany,dc=ru' -w 'pwd4' -b 'ou=Users,dc=mycompany,dc=ru' '(uid=pwtest)' pwdHistory
dn: uid=pwtest,ou=Users,dc=mycompany,dc=ru
pwdHistory: 20120917233620Z#1.3.6.1.4.1.1466.115.121.1.40#4#pwd1
pwdHistory: 20120917233839Z#1.3.6.1.4.1.1466.115.121.1.40#38#{SSHA}68TxuIA1haW
Rw1IUeuFd+gM0uw5GI8rq
pwdHistory: 20120918001550Z#1.3.6.1.4.1.1466.115.121.1.40#38#{SSHA}Sam+eZTnuBs
9fuZ09LBZl3Zy5HhvxFDk
В истории 3 пароля (максимум, согласно нашей политике по умолчанию). Поменяем пароль на pwd5:
ldappasswd -x -D 'uid=pwtest,ou=Users,dc=mycompany,dc=ru' -w 'pwd4' -s 'pwd5' 'uid=pwtest,ou=Users,dc=mycompany,dc=ru'
Смотрим историю:
ldapsearch -x -LLL -D 'uid=pwtest,ou=Users,dc=mycompany,dc=ru' -w 'pwd5' -b 'ou=Users,dc=mycompany,dc=ru' '(uid=pwtest)' pwdHistory
dn: uid=pwtest,ou=Users,dc=mycompany,dc=ru
pwdHistory: 20120917233839Z#1.3.6.1.4.1.1466.115.121.1.40#38#{SSHA}68TxuIA1haW
Rw1IUeuFd+gM0uw5GI8rq
pwdHistory: 20120918001550Z#1.3.6.1.4.1.1466.115.121.1.40#38#{SSHA}Sam+eZTnuBs
9fuZ09LBZl3Zy5HhvxFDk
pwdHistory: 20120918002034Z#1.3.6.1.4.1.1466.115.121.1.40#38#{SSHA}w9pQ9XkkxTP
leF7cX6GeUbe9B+9CE+1G
Итак, наш первый пароль замещён. Попробуем снова его ввести:
ldappasswd -x -D 'uid=pwtest,ou=Users,dc=mycompany,dc=ru' -w 'pwd5' -s 'pwd1' 'uid=pwtest,ou=Users,dc=mycompany,dc=ru'
Пароль pwd1 успешно принят. Наложение работает согласно документации.
Надеюсь, что-нибудь прояснится. Егор.