如何定义 ldappasswd 使用的密码保护方案(例如哈希函数)?

如何定义 ldappasswd 使用的密码保护方案(例如哈希函数)?

我使用的是 OpenLDAP 2.6。当我通过以下方式设置对象密码时

ldappasswd -x -D <dn of root user> -W -S <dn of object whose pwd shall be set>

然后密码的某些哈希值最终会出现在属性中userPassword

使用什么哈希函数ldappasswd?如何配置哈希函数?从外观来看,我认为它默认使用不再安全的 SHA1。

答案1

ldappasswd 使用什么哈希函数?

从技术上讲,没有——它只是调用“更改密码”LDAP 扩展操作,这会导致 LDAP服务器使用它认为合适的一些哈希函数(并将哈希存储在它认为合适的任何地方 - 不一定在用户密码中)。

因此,“更改密码”exop 使用的哈希是在服务器端配置的。对于 OpenLDAP,该olcPasswordHash参数默认为“SSHA”(加盐迭代 SHA-1),类似于$1$哈希。如果您想要更强大的算法,您可以选择{CRYPT}使用系统的 crypt() 函数提供的任何哈希算法(即与 /etc/shadow 相同 - 如果操作系统使用 libxcrypt,则可能是 bcrypt 或 yescrypt,否则使用相同类型的加盐 SHA),或者 {ARGON2}如果您安装了附加的 slapd-argon2 模块(它是 OpenLDAP 的一部分,但位于“contrib”树中)。

slapd配置文件 cn=配置
默认(迭代/加盐 SHA-1):
password-hash {SSHA}
默认:
olcPasswordHash: {SSHA}
如果正在使用 libxcrypt,则使用 yescrypt 的系统 crypt():(
password-hash {CRYPT}
password-crypt-salt-format $y$%.16s
未经测试,但我认为应该可行)
使用 yescrypt 的系统 crypt():
olcPasswordHash: {CRYPT}
olcPasswordCryptSaltFormat: $y$.16s
如果 slapd 模块可用,则使用 Argon2:
moduleload argon2
password-hash {ARGON2}
如果 slapd 模块可用,则使用 Argon2:
olcModuleLoad: argon2
olcPasswordHash: {ARGON2}

相关内容