关于LDAP

原文:http://wiki.jabbercn.org/OpenLDAP2.4管理员指南

什么是LDAP?

LDAP表示轻型目录访问协议. 顾名思义,它是一个轻量级协议,用于访问目录服务,特别是基于X.500的目录服务. LDAP运行在TCP / IP或其他面向连接的传输服务. LDAP是一个IETF标准跟踪协议,在“轻量级目录访问协议( LDAP )技术规范路线图”RFC4510中被指定。

本节概述了从用户的角度来看LDAP的样子。

LDAP信息模型是基于条目的. 一个条目是一个属性的集合,有一个全球唯一的识别名( DN ). DN用于明白无误地标识条目. 每个条目的属性有一个类型和一个或多个值. 该类型通常是可记忆的字符串,如“ cn ”就是标识通用名称,或“电子邮件”就是电子邮件地址。 值的语法依赖于属性类型. 例如, 一个 cn 属性可以包含一个值 Babs Jensen. 一个 mail 属性可以包含值"babs@example.com". 一个 jpegPhoto 属性将包含一个JPEG (binary) 格式的照片.

在LDAP, 目录条目都被排列在一个分层树形结构。传统上,这种结构反映了地域和/或组织界限. 代表国家的条目出现在树的顶端。它们下面是代表州和国家组织的条目. 再下面可能是代表组织单位,人,打印机,文档,或只是任何你你能想象到的东西. 图1.1所示的LDAP目录树中使用传统的命名。

images/http://www.openldap.org/doc/admin24/intro_tree.png

树也可以根据互联网域名组主。这种命名方式正越来越受欢迎,因为它允许使用DNS为目录服务定位 。图1.2所示的LDAP目录树中使用基于域的命名。

images/http://www.openldap.org/doc/admin24/intro_dctree.png

此外,可让您的LDAP控制在一个条目中哪个属性是必需的和允许的,通过使用一种特殊属性objectClass。objectClass属性的值确定条目必须遵守的架构规则。

一个条目所引用的辨别名称,是构造于名字本身(称为相对辨别名称Relative Distinguished Name或RDN )再串连其祖先条目的名字。 例如, 在上面Internet命名例子里的条目 Barbara Jensen 有一个 RDN 为 uid=babs 和一个 DN 为 uid=babs,ou=People,dc=example,dc=com. 全 DN 格式在 RFC4514 中的 "LDAP: String Representation of Distinguished Names."有描述.

LDAP定义了查问和更新目录的操作. 提供的操作包括,从一个目录增加和删除一个条目,变更一个已存在的条目,以及变更一个条目的名字. 尽管,绝大部分时间, LDAP 是用于在目录中搜索信息. LDAP搜索操作允许目录的一些部分被搜索以寻找那些满足搜索过滤器规定的条件的条目. 可以请求每个和要求相匹配的条目的信息。

例如, 你可以在 dc=example,dc=com之下的整个目录树,搜索一个人,他的名字是 Barbara Jensen, 接收每个发现的条目的 email 地址. LDAP 让你很简单地完成这件事. 或者你可能想直接在st=California,c=US下搜索, organizations 为Acme 的所有条目的名字以及传真号码. LDAP 也能让你做到. 下一节对于你能用LDAP做什么和它如何帮助你做更详细的描述.

一些目录服务不提供保护, 允许任何人查看信息. LDAP提供了给客户一个机制,向一个目录服务器验证或保护他的标识,提供了丰富的访问控制方法来保护服务器包含的信息. LDAP也支持数据安全 (完整性和保密性) 服务.

... OpenLDAP使用Berkeley DB并行/事务数据库软件. ...

什么是slapd以及它能干什么?

slapd(8) 是一个 LDAP 目录服务器,可以运行在各种不同的平台之上. 你可使用它提供一个你自己的目录服务. 你的目录可能包含非常多期望放进去的东西. 你可以把它连接到全球 LDAP 目录服务中, 或完全自己运行一个目录服务. 一些 slapd's 更有意思的功能和能力包括:

LDAPv3: slapd实现了轻量级目录访问协议的版本3. slapd支持 LDAP 运行于 IPv4 和 IPv6 以及 Unix IPC.

简单验证和安全层: slapd通过使用SASL支持强验证和数据安全(完整性和保密性) 服务. slapd的SASL实现利用了 Cyrus SASL 软件,它支持不少机制,包括 DIGEST-MD5, EXTERNAL, 和 GSSAPI.

传输层安全: slapd通过使用TLS的(或SSL )支持基于证书的身份验证和数据安全(完整性和保密性)服务。slapd的TLS实现可以利用OpenSSL或GnuTLS软件。

拓扑控制: slapd可以被配置为根据网络的拓扑结构信息限制访问的套接字层。此功能利用了TCP包装。

访问控制: slapd提供了丰富和强大的访问控制设施,使您可以控制对你的数据库的信息的获取 。您可以基于LDAP授权信息, IP地址,域名和其他标准控制对条目的访问。slapd支持静态和动态的访问控制信息。slapd provides a rich and powerful access control facility,

国际化: slapd支持Unicode和语言标签。

可选的数据库后端: slapd配备了各种不同的数据库后端您可以从中选择。它们包括*BDB*,一个高性能的交易数据库后端;*HDB*,一个分级的高性能的交易后端;*SHELL*,一个后端接口通向任意 shell脚本;和PASSWD,一个简单的后端接口,到passwd ( 5 )文件。BDB和HDB后端利用了Oracle Berkeley DB。

多数据库实例: slapd可以配置为在同一时间服务多个数据库。这意味着,一个单一的slapd服务器能够使用相同或不同的数据库后端,响应许多逻辑上不同的LDAP树的请求。

通用模块API :如果您需要更加个性化, slapd让你轻松地写自己的模块。slapd包括两个不同的部分:处理和LDAP客户沟通协议的前端;和处理特定任务,如数据库操作的模块。因为这两个部分之间通过一个明确界定的C API通讯 ,你可以用多种方式写自己的定制模块扩展slapd。此外,提供了一些可编程数据库模块。这些允许你使用流行的编程语言( Perl,shell和SQL )暴露外部数据源给slapd 。

线程: slapd是线程高性能的。一个单一的多线程slapd进程使用线程池处理所有传入的请求。这减少了系统开销,同时提供所需的高性能。

复制: slapd可以被配置为维护目录信息的影子复制。这个单主/多从复制规划,对于安装单一的slapd而不提供必要的可用性和可靠性的高容量环境,是至关重要的。对于不能接受单点故障的要求极高的环境,也可以用多主复制。 slapd包含了对LDAP基于同步的复制的支持。

代理缓存: slapd可以被配置为一个缓存的LDAP代理服务。

配置: slapd是高度可配置的,通过一个单一的配置文件你可以改变一切,任何你想改变的东西。配置选项有合理的默认值,使您的工作更加容易。配置也可以使用LDAP本身动态的执行,这极大地改善了可管理性。

配置LDAP域信息

OpenLDAP 2.3及以后版本改用动态配置引擎:http://www.openldap.org/doc/admin24/slapdconf2.html

man slapd-config
slapd-config - configuration backend to slapd
slapd - Stand-alone LDAP Daemon

* is fully LDAP-enabled
* is managed using the standard LDAP operations
* stores its configuration data in an LDIF database, generally in the /usr/local/etc/openldap/slapd.d directory.
* allows all of slapd's configuration options to be changed on the fly, generally without requiring a server 
restart for the changes to take effect.
...
Note: Although the slapd-config(5) system stores its configuration as (text-based) LDIF files, 
you should never edit any of the LDIF files directly. Configuration changes should be performed via LDAP operations,
 e.g. ldapadd(1), ldapdelete(1), or ldapmodify(1).
...

images/http://www.openldap.org/doc/admin24/config_dit.png