我已经在 Google 上搜索了一段时间,寻找在 OpenLDAP 和 ActiveDirectory 之间同步用户数据库的最佳方法,但没有得到明确的结果!
我想要实现的是,在 OpenLDAP 中拥有用户数据库,然后将它们填充到 AD 中,以便这些用户可以访问我的所有应用程序(电子邮件、vpn、文件服务器、打印服务器几乎所有的开源应用程序)..基本上,我想做的是创建一个单一的 SignOn DB,以便所有用户都可以对基于 Windows 和 Linux 的应用程序使用相同的密码,但我也想确保密码是双向更新的。
如果有人能分享他的经验,我将不胜感激。谢谢!
答案1
对于单向同步可行的方法,但需要进行相当多的“组装”,方法是:
OpenLDAP → OpenLDAP 副本 → ActiveDirectory
中间 OpenLDAP 副本使用perl 后端-- 而不是持久存储。您必须编写一个 perl 模块,该模块提供 9 个(我上次检查时)函数,这些函数映射到 LDAP API 调用(、、、、bind
等)。search
compare
modify
add
在此代码中,您可以执行可能需要的任何属性/对象类和名称映射。源分发版 ( ) 中有示例配置和代码SampleLDAP.pm
。估计需要 1000-1500 行代码才能实现可靠的实际实现。
一个稍微简单的方法是轮询源目录中已修改的对象,并推送更改,请参阅激光扫描项目实施。这种方法可能存在延迟和可扩展性问题。使用轮询方法,你可以稍微作弊一下通过添加 syncrepl 控件进行 OpenLDAP 搜索,这将为您提供一个更简单的 back-perl 方法版本 - 优点是您不必实现 API,您只需要在发生变化时处理推送给您的搜索结果并传播它们(并在出错时保存状态/重新连接)。
您必须认真考虑密码处理、密码属性(用户密码,unicode密码) 是有效的魔法。我总是能够劝说人们不要使用双向密码同步,所以我只能提供基本的建议(除非我也能劝你不要这样做 ;-)
通常的方法是,以“复杂性检查”的名义捕获密码更改,根据需要创建密码哈希/格式并传播这些值,请参阅密码香港。
您也许能够“说服”您的用户使用其他方法来更改/重置密码,并且可以传播更改,例如自助密码(但这只在一个地方设置密码)。
红帽有一些有用的文档(尽管底层 DS虽然不再是 OpenLDAP,但许多理论仍然适用。据我所知,当前版本尚未进入 CentOS 6。
原发性骨髓瘤是微软的方式,我相信它可以将密码推送到 OpenLDAP(但不会自行执行反向操作)。 西门子声称可以同时完成这两项功能,但我没有使用过它。
也可以看看:Active Directory 和 OpenLDAP 同步它涵盖了使用凯尔伯罗斯这消除了密码同步(尽管这使得 AD 具有身份验证的权威性)。
简而言之,首先阅读激光扫描文档,它可能正是您想要的。