如何检查密码如何存储在本地运行的 OpenLDAP 服务器中?我更喜欢某种查询来说明使用的配置。或者,访问存储的密码以查看它们是否已加密也是可以接受的。仅检查配置文件是不够的。
我已经使用 ldapsearch 列出了用户及其密码
ldapsearch -x -b ou=people -H ldap://127.0.0.1 -D cn=admin -w <password>
并且密码没有以明文形式列出,但这是否真的确认它们没有以明文形式存储,或者 ldapsearch 在返回结果之前对其进行加密?
是的,不,也许。
我认为
ldapsearch
,例如,密码策略覆盖不会用搜索响应中的加密或散列版本替换存储的明文密码。明文密码的加密/散列仅在设置/更新密码时发生。我认为在这方面你可以相信你所看到的ldapsearch
。但两者都
ldapsearch
以base64 编码格式slapcat
显示userPassword
。属性名称后的双冒号::
用于指示该值是 base64 编码的。如果密码是散列或明文,则在解码该 base64 字符串之前,您实际上不会知道。如果您只找到以下形式的密码
{hash prefix}salt/value
:那你很好。没有这种前缀的密码是纯文本。
的确。当密码散列/加密被启用/更改时,现有的明文密码和使用不同算法加密的现有密码都不会被转换。
据我所知,在更改默认密码策略后,现有的明文和使用其他算法散列的密码也不会停止工作,每当发出身份验证请求时,ldap 守护程序都会简单地遍历所有支持的机制。
要检查 OpenLDAP 中实际存储数据的内容,最简单的方法可能是将数据库导出为可读的 LDIF 格式,使用
slapcat
; 从该 LDIF 中提取所有 userPassword 属性值,并对它们进行 base64 解码。