使用 PHP 在 LDAP 中更改密码或添加用户

Change password or add user in LDAP with PHP

自从最近更新了我的 LDAP 服务器(在 Synology NAS 运行 DSM 6 上使用 Directory Server v2.1-2428,最新版本)我无法更改密码(或包含密码的新用户) ) 使用 PHP.

在更新之前,我使用 PHP ldap_add 或 ldap_mod 与 userPassword 属性。但是,现在我在尝试创建新的用户密码时收到错误消息 Warning: ldap_add(): Add: Constraint violation

当通过 NAS 上的管理 GUI 创建新用户时,我可以查找 userPassword 条目,它出现在数据库中如下(出于隐私考虑略有修改):{crypt}$e49q9SvU$.pSl1C8Ew6WTu24yipUI8kjx7qv2GxWhKAUOBmuAVeRmJ1JV/WvWriVYZJeDDtBxekeepatdaKl0ulQdjsmCP.

这意味着数据库接受 SSHA-512 密码输入对吗?

我尝试添加新密码的事情:

  1. 添加与上面显示的完全相同的密码哈希作为 userPassword --> 约束违反错误
  2. 正在尝试在 NAS 的源代码中查找密码算法。这揭示了以下行:rootpw {CRYPT}$CL[=13=]fRYicA9KsmHaiV1SRj5q/。 简单地使用它作为新密码也不起作用。
  3. 查找不同的 PHP 函数,例如等同于 Linux 命令 ldappasswd,但 PHP.
  4. 似乎不存在

当然,我更愿意使用适当的 hashing/encryption 机制,例如 SSHA-512,但我不确定 Directory Server 支持和不支持的机制。

真心希望有人能带我更进一步!如果我需要进一步澄清,请告诉我。

尝试更改密码时的约束冲突似乎是目录服务器密码策略强制执行。 目录服务器日志应包含有关错误的更多详细信息,但可能已将策略设置为拒绝已使用的密码(如最后 3 个密码)。目录服务器密码策略可能会对密码实施许多检查和限制:长度、不可重用、字符集的变化、无明文...... 您可能需要查看 Synology 目录服务器文档或发行说明以了解默认密码策略的详细信息。

最终,解决方案是反复询问 Synology 以帮助找到解决方案。他们将密码策略改回了更新到 v2.1-2428 之前的版本,现在又可以使用了。

如果有另一个与最新版本的 OpenLDAP 兼容的解决方案,将不胜感激。