我在 Debian 9 上有一个 OpenLDAP LDAP 服务器(通过 slapd 包,v2.4.44)。我们使用 crypt 进行密码验证。当前方案是 SHA512:。$5$...
设置
与这个问题中描述的差不多:如何在 pam_ldap 中使用来自 OpenLDAP 的 SHA-256 散列(和加盐)密码?(并参见https://en.wikipedia.org/wiki/Crypt_(C))
我在想我会尝试从 SHA512 升级到 bcrypt(blowfish hashes,$2y$...
),因为它们更难破解。
crypt 后端的妙处在于方案保存在密码本身中。因此,要测试 bcrypt,我只需登录 LDAP 浏览器,将自己的密码更改为{CRYPT}$2y$10$...$
,然后使用在线工具生成哈希值即可。
但是,如果我现在尝试使用该帐户登录,它会说我的凭据无效。
顺便说一下,通过上述过程,我可以成功将哈希更改为其他类型,并且仍然可以登录。似乎 bcrypt 无法被识别,但我希望有这个选项。
那么,我还需要做什么才能让 OpenLDAP 与 bcrypt 一起工作?
答案1
我让它工作了。看来的发布版本libcrypt
根本不支持 bcrypt。
下列的这篇博客来自 2019 年,我下载并构建了一个libcrypt
包含 bcrypt 的扩展(并且向后兼容)
我将复制以下步骤以防博客消失:
- 克隆或下载
libxcrypt
库:https://github.com/besser82/libxcrypt(我有版本 4.4.3) - 使用以下命令构建源代码:
$ ./bootstrap && ./configure && make
- 您可能需要软件包
autoconf
、automake
和(有关详细说明libtool
,pkg-config
请参阅 repo Readme)
- 您可能需要软件包
- 安装新编译的
libcrypt
:
$ cp ./.libs/libcrypt.so.1.1.0 /lib/x86_64-linux-gnu
- 备份旧内容
libcrypt
:
$ cd /lib/x86_64-linux-gnu && cp libcrypt.so.1 libcrypt.so.1.0.0
- 现在将其替换
libcrypt
为新版本的链接:
$ rm libcrypt.so.1 && ln -s libcrypt.so.1.1.0 libcrypt.so.1
警告:如果libcrypt
丢失或损坏,您的系统将无法执行任何身份验证!包括登录和sudo ...
命令。因此,请确保一次性替换文件,并做好完全锁定的准备
经过这些更改,{CRYPT}$2y$...
哈希值已被接受!
我使用 PHPcrypt()函数来创建新的密码哈希值。
答案2
OpenLDAP 有一个非官方的 bcrypt 模块,网址为https://github.com/wclarie/openldap-bcrypt/
然而,我强烈建议使用包含对 Argon2 密码哈希支持的 OpenLDAP 版本。