Автор Тема: Проблема с атрибутом pwdHistory политики паролей.  (Прочитано 24453 раз)

mark

  • Новичок
  • *
  • Сообщений: 4
    • Просмотр профиля
Доброе время суток.
Извиняюсь, если пишу не в нужную ветку.
С LDAP начал работать недавно, многого не знаю. Поэтому будет полезна любая информация.
На машине с ubuntu установлен OpenLDAP с cn=config. Настроена политика паролей. Все работает, кроме одного момента. Если атрибут pwdInHistory установлен в 0, то пользователь может свободно менять свой пароль. Однако истории паролей нет, и можно вводить любой.
Если установить у атрибута любое число, то при попытке смены пароля выдается сообщение
RESULT tag=103 err=20 text=modify/add: pwdHistory: value #0 already exists
Ранее пароль не  менялся, в учетной записи атрибуты pwdHistory отсутствуют.
Минус в том, что инициацию смены паролей программировал не я, поэтому сложно сказать, что при этом происходит.
Дайте какую-нибудь идею, где "копать".

egor

  • Администратор
  • Старожил
  • *****
  • Сообщений: 486
    • Просмотр профиля
Re: Проблема с атрибутом pwdHistory политики паролей.
« Ответ #1 : 05 Сентябрь 2012, 22:30:03 »
Здравствуйте!
С ppolicy работать не приходилось, но раз сервер говорит pwdHistory: value #0 already exists, то, вероятно, так оно и есть. Атрибут pwdHistory -- операционный, возможно поэтому Вы его и не видите. Попробуйте запросить его явно:
# ldapsearch -LLL -x -b 'ou=Users,dc=mycompany,dc=ru' '(uid=someUid)' pwdHistoryили
# ldapsearch -LLL -x -b 'ou=Users,dc=mycompany,dc=ru' '(uid=someUid)' +Может что и прояснится.

Егор

mark

  • Новичок
  • *
  • Сообщений: 4
    • Просмотр профиля
Re: Проблема с атрибутом pwdHistory политики паролей.
« Ответ #2 : 06 Сентябрь 2012, 17:05:10 »
Попробуйте запросить его явно:
Спасибо за команды, действительно прояснилось. По крайней мере, видно, что история есть и изменяется.
Проблема была, скорее всего, вот в чем:
Когда я настраивал первый раз в жизни политику, случайно два раза создал ldif с оверлеем полисей (файлы olcOverlay={0}ppolicy.ldif и olcOverlay={1}ppolicy.ldif). Внутри они были абсолютно одинаковые. И после удаления второго и перезагрузки сервера пароли стали меняться и история пополняться.
Правда, почему-то можно вводить и старые пароли, но это я уже буду выяснять на месте, под какой ролью и как делаютсф запросы (если работать под admin-ом, политика игнорируется)...

mark

  • Новичок
  • *
  • Сообщений: 4
    • Просмотр профиля
Re: Проблема с атрибутом pwdHistory политики паролей.
« Ответ #3 : 07 Сентябрь 2012, 16:26:15 »
Ан, нет. Похоже сам не разберусь.
Если в политике паролей установлен параметр pwdInHistory, то LDAP должен проверять новые пароли на соответствие хранимым старым. И если они совпадают, не давать заводить новый (генерировать ошибку).
У меня, по пока непонятной причине эта сверка не происходит. При этом история заполняется, если нужно, одинаковыми паролями.
Вопрос старый - где можно "копать"?

egor

  • Администратор
  • Старожил
  • *****
  • Сообщений: 486
    • Просмотр профиля
Re: Проблема с атрибутом pwdHistory политики паролей.
« Ответ #4 : 18 Сентябрь 2012, 04:31:39 »
Здравствуйте!
Провёл эксперимент на 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 успешно принят. Наложение работает согласно документации.

Надеюсь, что-нибудь прояснится. Егор.

mark

  • Новичок
  • *
  • Сообщений: 4
    • Просмотр профиля
Re: Проблема с атрибутом pwdHistory политики паролей.
« Ответ #5 : 20 Сентябрь 2012, 11:44:17 »
Egor, Спасибо, действительно прояснилось. Все ок. Пароль отслеживается. Однако, судя по логам, приложением меняет его другой какой-то командой. Буду с программерами разбираться...