Active Directory和OpenLDAP同步

我一直在挖掘谷歌洞找出最佳的方式来同步AD和OpenLDAP之间的用户数据库。 我想要实现的是,在AD中拥有用户数据库,然后将这些用户传播到OpenLDAP,以便这些用户可以访问我的所有应用程序(电子邮件,VPN,文件服务器,打印服务器几乎所有的开源应用程序)。 我想创build一个单一的数据库login,所有用户可以有相同的密码为基于Windows和Linux的应用程序。 我也想确保密码双向更新。 如果有人能分享他的经验,我将不胜感激。 谢谢!!

我曾经为一个项目做过一次 – 祝你好运! 你有AD服务器的pipe理权限吗? 你可能需要它。 与你的ADpipe理员交朋友:-)

你能否详细说明你的项目是关于什么?

问题是如果您只需要您的用户/应用程序对ActiveDirectory或LDAP进行身份validation,或者如果您需要您的应用程序访问存储在ActiveDirectory中的数据,并可能增加或修改条目。

如果您只需要进行身份validation,那么就像Justin指出的那样,您只需要在ActiveDirectory服务器上绑定一个匿名或密码保护(没有太多额外的值的IMHO)绑定帐户即可。 与您的ActiveDirectorypipe理员联系。

如果您想使用ActiveDirectory的内容作为您自己的用户logging的基础,并且可能需要增加或修改数据,则可能需要设置自己的LDAP服务器(因为您的IT部门可能不会为修改“他们”的logging…)

ActiveDirectory看起来像LDAP,是相似的,但主要是在架构上的差异。

你会遇到几个问题:

  • AD架构和属性与LDAP标准有很大不同
  • 特别是从我所了解的情况来看,AD模式是有些预定义和固定的,因为所有的微软应用程序都需要一定的模式。
  • AD可能没有默认设置的匿名访问,因为它是针对LDAP的(这使得在命令行上执行LDAP查询很难进行testing)。您可能需要让AD Admin设置一个为你
  • 访问AD的经过身份validation的用户可能没有权限查看所有ADlogging和/或架构
  • 我记得我在AD发现了很多不一致的logging,例如组织结构错误,人们logging中混杂着机器,设备,软件的logging – 呃! 和人员logging散布在模式(不是所有的人只在一个子树中logging,就像您在LDAP模式中所期望的那样)

  • … 要完成的 …

如果您只需要人员或应用程序对目录进行身份validation,则可能不值得完成所有这些操作 – 最好是直接通过绑定帐户使用AD。

使用openldap命令行工具尝试在UNIX命令行上针对ActiveDirectory进行身份validation。 这将帮助您了解过程和返回的数据。

让我看看我的旧项目笔记,我会更新这个

我希望这可以帮助你


要对OpenLDAP进行身份validation,您需要知道组织的“专有名称”(dn),“组织单位”(ou),身份validation人员的“公用名称”(cn)等值。但是,在这里不能给你一个完整的介绍…

最好在这里阅读OpenLDAP的文档: http : //www.openldap.org/doc/admin24/

最好在命令行上运行“ldapsearch”来尝试和validation您可以绑定/访问LDAP。 http://www.openldap.org/software/man.cgi?query=ldapsearch&apropos=0&sektion=0&manpath=OpenLDAP+2.0-Release&format=html

或在IBM网站上: http : //publib.boulder.ibm.com/infocenter/iseries/v5r3/index.jsp?topic=%2Frzahy%2Frzahyunderdn.htm

值得研究的选项可能是使用Active Directory进行身份validation,并使用现有的OpenLDAP进行授权:

http://www.openldap.org/doc/admin24/security.html#Pass-Through%20authentication

如上述文档中所述,您可以将您的用户名/密码validation委托给Kerberos。 实际上,给出的例子(见14.5.2)展示了如何设置这个以validationAD域。 您将需要在Active Directory中设置一个用户帐户,该用户帐户可以绑定到DC以运行LDAP查询。 此用户帐户应该没有权限访问任何Windows服务器,也不应该在任何敏感的安全组中。

希望有所帮助。

必须为我的公司解决同样的问题。

以Linux为中心,密码必须在以下各项之间同步:

  • OpenLDAP shadowAccount userPassword(传统PAM / LDAPauthentication)
  • OpenLDAP sambaSamAccount sambaLMPassword和sambaNTPassword(传统的NTLM / Samba身份validation)
  • OpenLDAP krbPrincipalAux krbPrincipalKey(实际PAM / MIT-Kerberos-V身份validation)
  • Microsoft Active Directory(卫星Windows域)

现在,你遇到的主要问题是:

  • 密码是(encryption的)! 原始明文密码不能从存储在OpenLDAP或Microsoft Active Directory中的内容中恢复
  • 这意味着你不能从一个存储后端同步到另一个(编辑:和每个后端有它自己的散列函数,没有与其他后端兼容)
  • 这意味着在用户更改密码时,必须在所有后端同步更改所有密码,这是您唯一一次拥有明文密码的便利
  • 知道每个后端都有自己的突发事件和复杂性来处理密码更改
  • 这意味着你真的应该让每个后端处理“本地”密码更改:让Kerberos创build相应的密钥(其中很多,取决于Kerberos领域支持哪些algorithm),让Active Directory以自己的方式更改密码没有开放源代码,只要微软认为有必要,就会变得不透明)等等。

所以我想出了这个: https : //github.com/cedric-dufour/upwdchg ; 简而言之:

  • 一个不安全的用户可访问的前端(客户端)让用户请求更改密码
  • 一个安全的处理后端(服务器) – 具有适当的pipe理权限 – 在所有后端执行密码更改,使用他们自己的“本地”方法

我所说的“本地”方法是指:

  • 用于shadowAccount userPassword的OpenLDAP密码修改(RFC 3062)操作
  • OpenLDAP的smbk5pwd覆盖sambaSamAccount sambaLMPassword和sambaNTPassword(不适用于Kerberos; smbk5pwd只支持Heimdal Kerberos)
  • MIT Kerberos Vpipe理服务器及其“kadmin”和“password_change”操作
  • Microsoftlogging了更改AD“unicodePwd”的方式,按照http://support.microsoft.com/kb/263991

我在两年前做了类似的项目,我处于类似的位置,不知道从哪里开始,如何把两端联系在一起。

第一步:找出你想要完成的任务并写下来。 第二步:看看要求是否现实,完全可以完成。 如果不是,你愿意牺牲什么物品。 (这是需要很长时间的地方)。 第3步:select一个LDAP平台。 在你的情况下,你已经有一个现有的。 第四步:logging和testing。 第5步:切换计划是最重要的,因为如果你完成了所有想要的事情,这并不重要,但也要确保顺利过渡。 就我而言,我们不得不分阶段进行。

从阅读你上面的评论看起来你已经有OpenLDap在生产。 您的要求如下所示:

a)允许用户在AD上使用相同的密码策略。

b)用户帐户自动传播到LDAP。

回答a)您可以在LDAP中设置一个PAM pass-through模块,以通过Kerberos将密码validation委托给DC。 这样你就不会在两个地方保持密码的头痛。 我在389-DS LDAP上做过,文档链接应该足够了。 当用户进行身份validation时,PAM模块会检查LDAP中是否存在用户帐户,如果是,则将密码与krb5.so一起传递给PAM堆栈进行身份validation。 检查这里也应该适用的389-DS文档。

回答b)我打了所有的瓶子,想出一个方法来使用现成的解决scheme,但没有接近。 这是因为您必须按照帐户和组的架构。 所以我在一位同事的帮助下在perl中写了一个脚本,将用户和组从AD同步到LDAP。 f代码片段就在这里 。