`
YOUNG918
  • 浏览: 188825 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

理解LDAP 服务器

    博客分类:
  • java
阅读更多

最近在弄邮件系统二次开发,mirapoint实现群组功能有两种方法,最后决定使用LDAP来实现。找了很多LDAP相关的文章,觉得下面这篇文章讲得浅显易懂,转过来备用。
-------------------------------------------------------------------------
理解与应用LDAP服务器

(前段时间一直在做LDAP+POSTFIX相关项目,先把关于LDAP的一些经验写出来,一来可能会帮助一些人,二来对我自己所学知识也是一个巩固。)

先声明:我写的只是我对LDAP的一些理解,如果我的理解错误,那就是对兄弟们的误导。所以你可以直接看文章的结尾提供的几个网址。

关于LDAP的概念随便网上有很多,我不想重复,这里只是说一下我自己的理解。
都说它是“轻量级目录协议”,太专业,我不懂,我只把它想象成“简单”的目录协议。

几个很重要的概念,以后会用到:
---------------------------------------------
dn :一条记录的位置
dc :一条记录所属区域
ou :一条记录所属组织
cn/uid:一条记录的名字/ID
---------------------------------------------

实际上更多时候我只把它看成数据库。我把它和我非常熟悉的MYSQL数据库做比较,通常会得到更好的理解:

MYSQL用“表”储存数据,LDAP用“树”
MYSQL指定一条记录要3个条件:DB、TABLE、ROW。
LDAP却更自由,为什么呢?因为LDAP数据是“树”状的,而且这棵树是可以无限延伸的,假设你要树上的一个苹果(一条记录),你怎么告诉园丁它的位置呢?当然首先要说明是哪一棵树(dc,相当于MYSQL的DB),然后是从树根到那个苹果所经过的所有“分叉”(ou,呵呵MYSQL里面好象没有这 DD),最后就是这个苹果的名字(uid,记得我们设计MYSQL或其它数据库表时,通常为了方便管理而加上一个‘id’字段吗?)。好了!这时我们可以清晰的指明这个苹果的位置了,就是那棵“歪脖树”的东边那个分叉上的靠西边那个分叉的再靠北边的分叉上的半红半绿的……,晕了!你直接爬上去吧!我还是说说LDAP里要怎么定义一个字段的位置吧,树(dc=waibo,dc=com),分叉(ou=bei,ou=xi,ou= dong),苹果(cn=honglv),好了!位置出来了:
dn:cn=honglv,ou=bei,ou=xi,ou=dong,dc=waibo,dc=com

一个有名的画家说过:“世上没有相同的2个鸡蛋”。当然也没有相同的2个苹果……,同样,在LDAP里也不可能存在2个相同的dn。


LDAP数据填充原理:
一棵树的生长,要循序渐进,如果还没有长出某个分叉,就不可能在那个分叉里长出苹果(问:FT!苹果是长在分叉上的吗?答:为了便于理解,你就当它是吧),同样,LDAP数据库也要一步步的充实,举一个学校数据库的例子,我们将要把一个庞大的学生档案放到LDAP里,大致需要这么做:
---------------------------------------------
1、建立“树根”,这是通过修改“slapd.conf”来实现的,由于现在的目的是理解,所以具体步骤就不说了,反正就是在这一步建立了一个“dc= ourschool,dc=org”这样一个“树根”。注意:我把它理解成“目录”,或者“容器”,甚至它本身也是文件(苹果)的特殊形式,熟悉LINUX文件系统的朋友会更容易理解。
2、建立18个系,分别是“dn:ou=computer,dc=ourschool,dc=org”、“dn:ou=film,dc=ourschool,dc=org”……
3、当然是在每个系里面建立专业,比如“dn:ou=linux,ou=computer,dc=ourschool,dc=org”……
4、(开始长苹果吧!)加学生喽——“dn:cn=stan,ou=linux,ou=computer,dc=ourschool,dc=org”……
5、已经完成了吗?对了!学生的详细信息还没有呐!不过先这样吧,反正记录是可以编辑的。
---------------------------------------------


LDAP记录的详细信息
dn:cn=stan,ou=linux,ou=computer,dc=ourschool,dc=org
objectClass:organizationalPerson
cn:stan
cn:小刀
sn:小刀
description:a good boy
(以上是一条记录的信息,如果把他保存成LDIF文件,可以导入到LDAP数据库中)
上面不是说没有学生详细信息吗?怕你着急,就马上写出来了,只是还没有导入到LDAP里,那是以后的事。这里我先就你可能会产生的疑问做回答。
---------------------------------------------
Q1:“cn”不是在“dn”里定义了吗,怎么又在后面重新定义了? 答:你要把“cn=stan,ou=linux,ou=computer,dc=ourschool,dc=org”看成是一个整体,它只是属性dn的值。
Q2:怎么后面有2个“cn”,我以哪个为准? 答:区别于普通数据库,LDAP每个属性一般可以具有多个值,这样不好吗?你在学校数据库里找我的时候,只要记得我的一个cn就可以了,用“cn=stan”或“cn=小刀”都可以找到我!
Q3:就这些属性了吗?我都不知道你是男是女。 答:先声明,偶是男地。 LDAP对记录的属性做了严格的限制(这一点我不太喜欢),也就是说,你可以用哪些属性,哪些属性不能为空,哪些属性最多只能有一个值等,他们都给你规定好了。幸好你有选择的权利,比如这次我们是储存学生信息,那么我们就定义一个“objectClass:organizationalPerson”,这样 “organizationalPerson”这个类所规定的所有属性我们都可以用了,而且确实很适合我们。虽然这个类中没有“sex”这个属性,不过你完全可以用一个“空闲”的属性来顶替。如果我们能自己建立“类”就更好了,但目前我还没有时间去研究这个东西,我也期望高手指点啊
---------------------------------------------


好了!看到我贴的图了吗?那是我偷别人的,差不多能用我就不自己画了

##############################################################

关于安装配置LDAP,使之储存系统用户,这里有一个非常好的网址,如果你的英文不是很差,都应该做的来,我偷个懒,就先不写这方面的东西喽:
http://www.mandrakesecure.net/en/docs/ldap-auth.php
上面的方法我已经试过,是可行的,如果兄弟们配置的时候出现问题我们可以讨论讨论。

关于LDAP+POSTFIX,POSTFIX里的“LDAP_README”中介绍的很详细,我再说就是重复了。
##############################################################
其它相关资源:
yala (很实用的数据库操作工具,简单的说,他就是MYSQL的phpmyadmin,自己找下载地址吧~)
http://www.openldap.org/ (说实话,我一直没用上它,不过它是官方网站,不提也不好)
http://ldap.akbkhome.com/ (什么‘类’下面有什么‘属性’,在这里找)



关于LDAP的补充

--------------------------------------------------------------------------------


LDAP就是 light DAP, 轻量级目录访问协议, 可以想象 还有一个DAP,
70年代诞生的DAP协议基于 X.400目录访问协议。主要用于 大型主机,因为有大量不常用的功能而且这些不用的功能消耗了过多的系统资源,虽然极强大,但是应用不广, 所以出现了LDAP.

这是一个开放的协议, 具体的实现有 Netscape LDAP, Novell NDS, MS AD等等,这3个是使用最广,影响最大的。
Netscape LDAP server主要使用在unix或类unix系统上, MS AD自然只能在windows上, NDS是唯一一个跨平台的产品。注意: LDAP本身是平台无关的。

工作原因,比较熟悉NDS, AD最熟。我个人最喜欢NDS,AD当然最简单,但是最不稳定,最乱,而且比较耗资源。

楼主说的类似数据库,完全正确,因为它原本就是数据库,只是不是关系型的数据库,它是链式数据库,详细细节可以找本数据库原理,很详细的。

和关系数据库一样, LDAP内能够定义哪些对象,每个对象可以有什么属性,每个属性可以取什么样的值,这样一个框架结构被称为Schema,它是类,对象,属性的集合。类又分为抽象类(只能做父类,不能实例化)和结构类(可以实例化),编程的朋友会发现和面向对象的编程的概念完全一样。

举例: LDAP内必须先有user类, 然后用user类创建user对象(一般缺省有的),我们才能创建具体的用户账号(实例化), schema中user对象被指定了有哪些属性,我们创建账号的时候才能给账号哪些属性,例如 schema中user对象没有别名属性,我们就不能给账号起别名。

Schema的扩展:
缺省的schema一般预先创建有足够的类,对象和属性,例如 MS 的AD 缺省有 170个类和833个对象和属性。但是如果不能满足需要的话,我们就可以扩展Schema, 一般是使用 LDAP API, 例如 MS的 ADSI, NDS有专门的工具,当然也可以直接使用LDAP查询语言,来直接操作整个LDAP目录树。

分享到:
评论

相关推荐

    LDAP服务器资料,很经典的

    【LDAP服务器介绍】 LDAP(Lightweight Directory Access Protocol)是一种轻量级目录访问协议,它源自上世纪80年代的国际电报...学习和理解LDAP,对于IT管理员和开发者来说,是提升系统管理和集成能力的重要步骤。

    服务器搭建之十四LDAP服务器.docx

    **LDAP服务器搭建详解** 在Linux环境中, Lightweight Directory Access Protocol (LDAP) 服务器是一种用于存储和检索用户、组、网络资源等信息的目录服务。本文将详细介绍如何在Xubuntu操作系统上搭建一个基于...

    LDAP服务器配置(协议+服务器+客户机+管理+安全)

    ### LDAP服务器配置详解 #### 一、LDAP协议概述 LDAP,即Lightweight Directory Access Protocol(轻量级目录访问...通过深入理解LDAP的工作原理和技术细节,IT专业人员能够更好地利用LDAP技术满足企业的多样化需求。

    将 LDIF 文件导入 LDAP 服务器.txt

    LDAP服务器用于存储组织结构、用户信息、权限等数据,而LDIF(LDAP数据交换格式)文件则是用于导入导出这些数据的一种标准文本格式。本文将深入探讨如何将LDIF文件导入到LDAP服务器中,包括必要的准备工作、操作命令...

    理解与应用ldap服务器

    总结,理解LDAP的关键在于把握其树形结构、DN的概念以及如何通过这些概念来组织和检索数据。通过这种方式,LDAP为组织提供了强大且灵活的目录服务解决方案,适用于管理用户身份、权限分配以及网络资源等。在实际项目...

    理解与应用LDAP服务器

    在实际应用中,LDAP不仅可以用于存储用户账号信息,还可以与其他系统集成,如邮件服务器(如Postfix)、认证服务(如Samba)等。通过LDAP,管理员可以集中管理用户账户,实现单点登录(Single Sign-On,SSO)功能,...

    openldap-2.3.34.tgr.gz_ldap_openldap

    《OpenLDAP 2.3.34:深入理解 LDAP 服务器源码与模式管理》 OpenLDAP 是一个开源的 Lightweight Directory Access Protocol (LDAP) 服务器实现,它为组织提供了存储和检索目录信息的强大功能。本资源是 OpenLDAP 的...

    图解使用Domino建立LDAP服务器的过程

    在本文中,我们将探讨如何使用Domino 6.5.4建立一个LDAP(轻量级目录访问协议)服务器。这个过程涉及几个关键步骤,包括启用和配置LDAP服务,创建和配置Domino目录服务数据库,设置全局网络域,以及测试LDAP服务是否...

    LINUX LDAP 服务器 简介

    《深入理解Linux LDAP服务器:开启信息访问新纪元》 LDAP(Lightweight Directory Access Protocol)是一种轻量级目录访问协议,源于X.500标准,但设计更加简洁且易于定制,尤其支持TCP/IP,使其成为互联网访问的...

    java 连接ldap 服务器源码

    Java连接LDAP服务器是一种常见的任务,尤其在企业级应用中,用于身份验证、用户管理或访问控制。...这些步骤在提供的源代码中可能会有所体现,通过分析这些类文件,可以深入理解如何实际操作和管理LDAP服务器。

    Tomcat 连接 LDAP 服务器 加密

    1. **配置LDAP服务器** - 确保LDAP服务器已启用SSL/TLS服务,这通常涉及到生成或获取服务器证书,并在服务器上配置SSL端口(如389升级至636)。 2. **在Tomcat中配置Truststore** - Tomcat需要信任LDAP服务器的证书...

    JAVA通过LDAP+SSL(证书)实现用户和组织(部门)增删改查.zip

    首先,让我们理解LDAP。LDAP是一种目录服务协议,它允许快速查找分布式数据库中的信息,如用户账户、组、资源等。在Java中,我们可以使用JNDI(Java Naming and Directory Interface)来与LDAP服务器进行交互。JNDI...

    ldap组件配置案例.doc

    总结起来,配置LDAP组件在CAMS系统中的应用,涉及到对LDAP协议的理解,以及正确配置LDAP服务器信息,以确保CAMS系统能有效地与外部系统进行身份验证交互。在实际操作中,需要根据所使用的具体LDAP服务器类型调整相应...

    Domino6.5.4建立LDAP服务器的过程[整理].pdf

    【Domino 6.5.4 建立 LDAP 服务器过程详解】 在软件开发领域,Domino 6.5.4 是一个重要...这个过程涉及到的每个环节都是确保 LDAP 服务稳定运行的重要组成部分,理解并掌握这些步骤对于维护和优化 LDAP 环境至关重要。

    ldap安装与客户端ldapadmin windows

    **LDAP(轻量级目录访问协议)是一种网络协议,用于访问和管理分布式目录服务。它在各种操作系统上广泛使用,包括Windows。...理解LDAP的基本概念和操作方法,将有助于你有效地管理Windows环境下的目录服务。

    在Linux上建立LDAP服务器(一步一步).doc

    首先,理解LDAP能做什么至关重要。它主要负责集中化的用户和用户组管理,存储信息,设置安全和访问控制,以及安全地委托读取和修改权限。LDAP服务器可以服务于各种平台,并能有效扩展以应对不断增长的需求。例如,它...

Global site tag (gtag.js) - Google Analytics