Позвольте мне описать инфраструктуру, которую я пытаюсь настроить. В 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
New password:
Re-enter new password:
{SSHA}I5CTI/dn+ppf/XA/Jjz6yu+LRfPWqBQW
подготовить файл ldif
[root@vm ~]# cat test.ldif
dn: cn=george,dc=test,dc=com
changetype: modify
replace: 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"
modifying entry "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: Administrator
sshPublicKey: ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAAAgQCr/fmBCVOx8io4dLnVeagN61ZW
--
cn: george
homeDirectory: /home/george
gidNumber: 33222
uid: george
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
. Лучше использовать {SSHA}
пароли с OpenLDAP. Видеть этот научиться их генерировать.