如何向 openldap 添加已加密的密码

如何向 openldap 添加已加密的密码

我需要将旧目录(如 Mysql)数据迁移到新的 ldap 数据库。除了密码之外,没有太多麻烦。它们以 sha1 形式存储在 Mysql 数据库中(我检查过我可以通过输入“ echo -n "cleartextpassword" | openssl dgst -sha1”来生成它们)。

问题是我无法将它们导入到我们的 openldap 服务器中。

我担心这里可能存在两个问题。

首先是加密/编码问题:这种 sha1 编码在 ldap 中是否可以用?

接口问题:当我使用ldapaddldapmodify输入/更新字段时userPassword,ldif 文件中提供的数据会被重新加密。是否有可能以某种方式绕过这个问题?

提前致谢

答案1

经过多次尝试后,我终于明白了。

我拥有的 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)

答案2

在我的例子中,我希望导入 Linux 用户帐户的加密加盐 SHA-512 算法哈希。因此,我发现(答案)什么是 {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包但没有sha2sha512,所以我使用 mkpasswd 进行了测试:

$ mkpasswd -S "saltsalt" -m SHA-512 secret
$6$saltsalt$TVLlQcbpFVof5W3Yz4DTP6gRstiNuHwwTt6GLc1E5n0U0aDehy0S5knV8wiOQSpT0Y77vwPZN.Pq.H91p5hVO1

相关内容