我正在用一个中央用户数据库系统做一个项目。系统的要求之一是,对于所有的应用程序,应该只有一组用户。FreeRADIUS和Samba是我的两个应用程序,它们都使用LDAP作为后端。由于包含许多其他应用程序的整个系统的用户必须相同,所以我必须从中央数据库中读取用户列表,并在Samba和FreeRADIUS的LDAP目录中重新创建它们。问题是用户是从另一个实体发送给我的,我可以使用他们的散列密码将他们保存在数据库中。我无法访问他们的明文密码。我想知道是否可以使用我喜欢的哈希机制直接为LDAP中的新用户输入哈希密码。如果没有,谁能告诉我我要用什么策略?
我正在Ubuntu12.04上运行我的服务器,所有其他应用程序都是最新版本。我的数据库系统是PostgreSQL 9.2。
谢谢
发布于 2013-10-18 13:01:06
由于您使用的是OpenLDAP,如果您有一个兼容散列格式 (和这里),您可以直接将哈希输入到userPassword属性中。注意一些LDAP客户机可能会事后猜测对userPassword的修改并应用散列(类似于某些LDAP服务器在编写时自动修改或散列此属性的方式)。ldapadd/ldapmodify将在不重新解释密码的情况下正确地更新密码(只要您没有有效的服务器密码策略ppolicy_hash_cleartext,这可能会使事情复杂化)。
您需要确定您的格式,并在散列或hash+salt格式前加上类型类型,例如{SHA}xxxxxx或{SSHA}xxxxxx (其中xxxxxx分别是base64编码的哈希或hash+salt )。
如果它是加密格式,您可以使用{crypt}前缀输入它,但在OpenLDAP的情况下,您需要配置使用--enable-crypt的构建,因为不推荐使用它。OpenLDAP将使用C库的crypt()函数,可以在其输出中有平台特定变化。在Linux上有一个简单的解决方法,crypt()在它自己的libcrypt库中,您可以在编译或运行时“调整”它。(还请注意,crypt()不是重入者,因此slapd使用mutext来保护对它的调用。)另请参阅password-crypt-salt-format,以解决另一个方向的问题:使OpenLDAP以各种加密格式存储密码。
由于您正在使用Samba,所以您也应该研究smbk5pwd覆盖( 自述文件更有用)。注意,这需要修改密码才能使用正确的密码修改操作,而不是直接修改userPassword。
使用OpenLDAP,您还可以选择通过SASL委派对外部系统的密码验证 (还需要非默认的构建配置),在迁移窗口期间,这可以满足所有用户重置密码的要求。另一个选项(经常令人惊讶)是,OpenLDAP还支持每个用户的多个密码,每个密码在身份验证期间依次尝试。虽然有点脆弱(它需要userPassword属性的所有作者做正确的事情),但它可以帮助迁移,特别是在合并多个系统时。
https://serverfault.com/questions/546933
复制相似问题