LDAP 协议的这两种实现之间的主要区别是什么?哪个更适合异质环境?有没有关于这个话题的好网站?
2 回答
以下是我不知道的一些差异。OpenLDAP 可以称为通用 LDAP 服务器,类似于许多其他供应商的 LDAP 服务器(Fedora DS 389、Oracle Internet Directory、IBM Tivoli Directory Server)。Active Directory 是为 Microsoft 产品套件定制的(即:运行 Microsoft 域)。各有利弊。
OpenLDAP 在安装后是空的并且没有结构(称为 DIT)。它甚至没有开箱即用的根条目。AD 将附带一个基本结构,并为您准备好开始填充用户的 GUI 工具。OpenLDAP 和其他人希望您手动创建 DIT,因此您必须设计一个结构。因此,如果您的项目涉及此类事情,您必须计划好将用户、组、角色放在哪里,并考虑 ACL 或分支委派。例如,您可能有一个widgets.com 的域。在 AD 中,交付的结构将如下所示:
+ dc=widgets,dc=com
|-- cn=Computers
|-- cn=Users
|-- cn=Groups
在 OpenLDAP(或其他 vanilla 实现)中,您可以通过多种方式设计您的 DIT。您可以遵循域组件 (dc=foo,dc=bar) 约定,也可以使用按地理区域组织的内容 (o=foo,c=bar)。这并不重要,但你应该选择其中一个。AD 使用 DC 约定,不给您选择,但其他 LDAP 服务器可以遵循任一约定。如果您想适应大型 MS 域,我会坚持使用 DC 约定以保持一致性和易于集成。但是对于这个例子,我们将假设我们的公司组织 (o) 在一个国家 (c) 没有地区或单位 (ou):
+ o=widgets,c=us
|-- cn=Machines
|-- cn=People
|-- cn=Groups
|-- cn=Roles
然后,如果需要,您可以扩展您的架构。如果您想扩展您的 AD 架构,AD 将要求您通过 Active Directory 架构编辑器 MMC 控制台插件添加架构元素(制作自定义 MMC)。在那之后,它非常简单。首先定义您的属性,然后定义您的对象类。OpenLDAP 要求您编写一个 LDIF(也需要先属性,然后是对象类)。或者将 Apache Directory Studio 与 OpenLDAP 一起使用,这是一个很棒的 GUI 和管理工具,使 OpenLDAP 接近 AD 易于使用。
AD 不允许您匿名查询 389 上的所有内容。如果要获取架构信息(称为目录),则必须在 3289 上查询并进行身份验证。这让我想起了 LDAP 的 DIB 与 DIT 隐藏,但我不知道 AD 是否在这里尝试做同样的事情。
AD 的默认查询限制为 10,000。如果您想一次性完成所有内容,您必须在客户端或代码中使用分页控件,或者修改您正在搜索的域控制器上的默认查询限制。请注意,分页控件可能会出现问题。我已经让他们使用 Netscape 库在 java 中工作,但一些 LDAP 客户端似乎无法正常工作,即使他们声称它们支持分页控件 (YMMV)。
AD的认证有点奇怪。您可以使用电子邮件格式的用户名 (-D username@domain) 进行身份验证,也可以使用完整的用户 DN。如果在 OpenLDAP 中有办法做到这一点,我不知道该怎么做,但我不会打扰。与其他 LDAP 服务器相比,这很奇怪。普通 LDAP 通常遵循 DN 格式(cn=username,cn=Users,o=widgets,c=us)。
我想简而言之,AD 是固执己见的,而 OpenLDAP 是通用的。正因为如此,AD 很容易站起来,但 OpenLDAP 可以更灵活。
对于异构环境,您希望使用 OpenLDAP 等通用服务器。AD 的优点通常是它已经包含您的内部用户的用户帐户 - 这些可以与单独的 LDAP 服务器保持同步,尽管这会增加复杂性。
就协议的细节而言,Oracle Virtual Directory 的文档有一个很好的总结。(OVD 是一种产品,可用于代理 AD 并将其一些怪癖转换为更标准的界面。):
http://download.oracle.com/docs/html/E10286_01/app_bundled_plugins.htm#CHDGDBBG
范围属性Active Directory 和 ADAM 中具有超过 1000 个值的属性一次返回 1000 个,其名称包括返回的值范围(或 Windows 2003 为 1500)。范围以下列形式返回给客户端: member;1-1000: somevalue 为了获得下千个条目,客户端应用程序必须以某种方式知道重复查询并请求属性 member;1001-2000。与其他目录产品相比,这要求应用程序以一种特殊的方式处理 Microsoft Active Directory。
密码更新Microsoft Active Directory 和 ADAM 对如何使用 LDAP 更新用户密码有特殊规则:
- 密码只能通过安全的 SSL 连接更新。
- 如果用户正在更新自己的密码,则原始密码必须包含在修改删除中,新密码是同一修改操作中的修改添加。
- 只有管理员可以在不知道以前的密码的情况下重置用户的密码。
- Active Directory 不使用 userPassword 属性,它使用 unicodePwd 属性( 引用-UTF16-hex-padded-base64 编码)。
对象类映射大多数 LDAP 目录对用户和组使用 inetOrgPerson 和 groupOfUniqueNames 对象类。Microsoft Active Directory 使用具有特定于 Microsoft 的 Active Directory NOS 要求的属性的用户和组对象类。”
这些是一些主要的,但还有其他的。