Позвольте мне описать инфраструктуру, которую я пытаюсь настроить. В CentOS есть сервер opne ldap (под управлением slapd 2.4.40) в качестве метода распределенной аутентификации для пары ящиков.
Есть ли способ изменить пользователя (используя файл ldif и ldapmodify), чтобы изменить пароль с уже хеширован? Как предотвратить повторное хеширование нового хеш-кода?
Я безуспешно пробовал множество вариантов файла ldif. Есть идеи?
Конфигурация хэша на ldap:
password-hash {CRYPT}
password-crypt-salt-format "$5$%.16s"
Спасибо!
обновление :
@Sven спасибо за ваш ответ. Я попробовал ваше решение (я тоже пробовал его раньше), и кажется, что он продолжает хешировать пароль ... Я тоже изменил метод хеширования.
Обходной путь:Предположим, я хочу установить пароль для пользователя george
- изменить конфигурацию ldap на SSHA
password-hash {SSHA}
перезапустить ldap и т. д.
Хешировать новый пароль: (testpassword)
[root @ vm ~] # slappasswd
Новый пароль:
Повторно введите новый пароль:
{SSHA} I5CTI / dn + ppf / XA / Jjz6yu + LRfPWqBQW
подготовить файл ldif
[root @ vm ~] # cat test.ldif
dn: cn = george, dc = test, dc = com
changetype: изменить
заменить: userPassword
userPassword: {SSHA} I5CTI / dn + ppf / XA / Jjz6yu + LRfPWqBQW
изменить пользователя, используя предыдущий ldif
[root @ vm ~] # ldapmodify -c -a -f ./test.ldif -w 'rootpass!' -D "cn = root, dc = europa, dc = eu"
изменение записи "dn: cn = george, dc = test, dc = com"
проверьте, успешно ли применены изменения
[root @ vm ~] # ldapsearch -x -w 'rootpass!' -D "cn = root, dc = test, dc = com" -b
"dc = test, dc = com" -s sub "(objectclass = *)" | grep george -A 3
# george, test, com
dn: cn = george, dc = test, dc = com
loginShell: / bin / bash
sn: Администратор
sshPublicKey: ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAAAgQCr / fmBCVOx8io4dLnVeagN61ZW
-
сп: Джордж
homeDirectory: / home / george
gidNumber: 33222
uid: Джордж
userPassword :: e1NTSEF9c0s1QVRZYXVoSFpIdld5bzJTaVp0czlhVTFUNnJBdVM =
Я полагаю, что хешированный пароль должен появиться в пароле пользователя при поиске после его модификации, верно?
Но:
{SSHA}I5CTI/dn+ppf/XA/Jjz6yu+LRfPWqBQW !=
e1NTSEF9c0s1QVRZYXVoSFpIdld5bzJTaVp0czlhVTFUNnJBdVM=
После этого я подумал, было ли оно закодировано (например, Base64)
Но это также другое:
[root@ldap01-prototype:~ ] $ echo {SSHA}I5CTI/dn+ppf/XA/Jjz6yu+LRfPWqBQW >
test;base64 test
e1NTSEF9STVDVEkvZG4rcHBmL1hBL0pqejZ5dStMUmZQV3FCUVcK
Эта операция изменения должна использовать предварительно зашифрованный пароль (в данном случае 1234
). Обратите внимание на префикс {CRYPT}
, который указывает OpenLDAP использовать стандартные библиотеки CRYPT
для проверки пароля, а не внутренние методы, такие как {SSHA}
.
dn: uid=johndoe,ou=users,dc=example,dc=com
changetype: modify
replace: userPassword
userPassword: {CRYPT}$6$NxKjjJP/Jlf$TrtCUMfi1uUpZDtYYvtFO2DlMsxntZ1ulzrTppJkqAZbX1Nv4WhdJ4vJbZcQDyWZVeGadtVQjqUHNZMT1FP8d0
Примечание:Использование {CRYPT}
на самом деле предназначено только как временное средство миграции из / etc / shadow
. С OpenLDAP лучше использовать пароли {SSHA}
. См. и , чтобы узнать, как их генерировать.