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