Как добавить уже зашифрованный пароль в openldap

Мне нужно перенести устаревшие данные Mysql, подобные каталогам, в новую базу данных ldap. Никаких хлопот, кроме паролей. Они хранятся как sha1 в базе данных Mysql (я проверил, могу ли я их сгенерировать, набрав « echo -n« cleartextpassword »| openssl dgst -sha1 »).

Проблема в том, что я не могу их импортировать на нашем сервере openldap.

Боюсь, здесь могут быть 2 проблемы.

Во-первых, проблема с шифрованием / кодированием: можно ли вообще использовать эту кодировку sha1 как таковую в ldap?

Проблема интерфейса: когда я используйте ldapadd или ldapmodify для ввода / обновления поля userPassword , данные, представленные в файле ldif, повторно зашифровываются. Можно ли как-то обойти эту проблему?

Заранее спасибо

2
задан 24 May 2017 в 16:20
2 ответа

Я наконец получил это после множества испытаний.

Строки sha1, которые у меня есть, являются так называемыми шестнадцатеричными дайджестами. Чтобы поместить их в openldap, мне сначала нужно преобразовать их обратно в двоичный дайджест sha1, а затем их закодировать base64.

В командной строке это можно сделать с помощью:

echo -n "sha1-hex-digest" | xxd -r -p | openssl enc -base64

Затем полученную строку нужно вставить в файл ldif таким образом:

userPassword: {SHA}base-64-blurb

Для тех, кто заинтересован, это можно сделать в Python следующим образом:

import base64
import binascii

sha1_pwd = "your-sha1-hex-digest-here"
ldap_pwd = base64.b64encode(binascii.unhexlify(sha1_pwd)).decode('utf-8')
print("userPassword: {SHA}%s" % ldap_pwd)
4
ответ дан 3 December 2019 в 09:58

В моем случае я хотел, чтобы были импортированы хэши алгоритма SHA-512 с солью крипты из учетных записей пользователей Linux. Итак, я нашел (Ответ) Что такое пароли {CRYPT} и как их генерировать?, в котором более подробно, но в основном все, что вам нужно сделать, это добавить {CRYPT} перед обычный хэш вида $6$salthere$base64hashhere.

По этой ссылке говорится, что для генерации хэша нужно использовать Perl-библиотеки. Вам не нужно выполнять какие-либо команды, чтобы сгенерировать что-либо, кроме проверки. (но вы должны использовать ldapmodifyuser или другую команду на основе ldif, о которой они не упоминают, чтобы фактически импортировать пароль). Но это полезно для того, чтобы увидеть правильный синтаксис ($1$salt... который является md5crypt):

$ perl -e 'use Crypt::PasswdMD5;print("userPassword: {CRYPT}".unix_md5_crypt("password","salt")."\n");'
userPassword: {CRYPT}$1$salt$qJH7.N4xYta3aEG/dfqo/0

Но нужный алгоритм был недоступен (это sha512crypt, который выглядит как $6$salt ... ). есть пакет perl-crypt-passwdmd5, но нет sha2 или sha512, поэтому я протестировал его с помощью mkpasswd:

$ mkpasswd -S "saltsalt" -m SHA-512 secret
$6$saltsalt$TVLlQcbpFVof5W3Yz4DTP6gRstiNuHwwTt6GLc1E5n0U0aDehy0S5knV8wiOQSpT0Y77vwPZN.Pq.H91p5hVO1
0
ответ дан 9 February 2021 в 13:10

Теги

Похожие вопросы