在创build新用户时将哈希密码写入LDAP

我正在研究一个中央用户数据库系统的项目。 系统的其中一个要求是所有应用程序只能有一组用户。 FreeRADIUS和Samba是两个使用LDAP作为后端的应用程序。 由于用户必须与包含许多其他应用程序的整个系统相同,我必须从中央数据库读取用户列表,并在Samba和FreeRADIUS的LDAP目录中重新创build它们。 问题是用户从另一个实体发送给我,我可以用他们的散列密码将它们保存在数据库中。 我没有访问他们的明文密码。 我想知道是否可以用我的首选散列机制直接在LDAP中为新用户input散列密码。 如果没有,任何人都可以告诉我我必须使用什么策略?

我在UBUNTU 12.04上运行我的服务器,所有其他应用程序是最新版本。 我的数据库系统是PostgreSQL 9.2。

谢谢

既然你使用OpenLDAP,如果你有一个兼容的哈希格式 (和这里 ),你可以直接input哈希到userPassword属性。 请注意,某些LDAP客户端可能会再次猜测对userPassword修改并应用散列(与某些LDAP服务器自动修改或在写入时散列此属性的方式类似)。 ldapadd / ldapmodify将正确更新密码而不重新解释密码(只要您没有服务器密码策略 ppolicy_hash_cleartext生效,这可能会使事情复杂化)。

您将需要确定您拥有的格式,并且使用typestypes(例如{SHA}xxxxxx{SSHA}xxxxxx (其中xxxxxx分别是base64编码的散列值或hash + salt))作为散列或散列+ salt格式的前缀。

如果是crypt格式,可以用{crypt}前缀input,但是对于OpenLDAP,您将需要使用--enable-cryptconfiguration一个版本,因为它的使用已经被弃用了。 OpenLDAP将使用C库的crypt()函数,其输出中可能会有平台特定的变化 。 在Linux上有一个简单的解决方法, crypt()在它自己的libcrypt库中,你可以在编译或运行时“调整”。 (另外注意crypt()不可重入,所以slapd使用mutext来保护对它的调用。)另请参阅password-crypt-salt-format来解决另一方面的问题:使OpenLDAP以各种crypt格式存储密码。

由于您使用的是Samba,因此您应该研究一下smbk5pwd覆盖( README更有用)。 请注意,虽然这需要更改密码才能使用正确的密码修改操作,而不是直接修改userPassword

使用OpenLDAP,您还可以select通过SASL将密码validation委托给外部系统 (也需要非默认的构buildconfiguration),在迁移窗口期间这些选项可能已经足够,直到所有用户重置其密码为止。 另一个选项(通常令人吃惊)是,OpenLDAP也支持每个用户的多个密码,每个用户在validation过程中依次尝试。 虽然稍微脆弱(它要求所有的userPassword属性的作者做正确的事情 ),它可以帮助移植,特别是在合并多个系统时。