首页 | 邮件资讯 | 技术教程 | 解决方案 | 产品评测 | 邮件人才 | 邮件博客 | 邮件系统论坛 | 软件下载 | 邮件周刊 | 热点专题 | 工具
网络技术 | 操作系统 | 邮件系统 | 客户端 | 电子邮箱 | 反垃圾邮件 | 邮件安全 | 邮件营销 | 移动电邮 | 邮件软件下载 | 电子书下载

操作系统

Windows 9X | Linux&Uinx | Windows Server | 其它操作系统 | Vista | FreeBSD | Windows 7 |
首页 > 操作系统 > Linux&Uinx > LDAP大容量邮件系统数据库应用指南 > 正文

LDAP大容量邮件系统数据库应用指南

出处:本站收集于网络 作者:请作者联系 时间:2006-3-2 23:04:00
  如今网上的ldap的文档,多半是相互抄袭的。全他 *** 狗屁不通,千篇一律。其实ldap主要应用在大容量邮件系统上。几乎所有的文档对这个问题避而不谈,总是在地址簿上兜圈子,可恶!

  ldap其实就是一个数据库,不是数据库怎么存放资料呢?不过跟我们平常的关系数据库有所不同。关系数据库是有一张一张的二维表格来存放数据的。ldap类似我们的dns系统,是树状的。用节点来存放数据。当然一个树枝可以有n个节点,每个节点上存放的数据,都是以key => value的形式。就像我们的dns系统。 .是根,下面是com,org,net,cn等等一些树枝,这些树枝下面还有abc.com, bcd.com等等树枝。在每个树枝下面都可以放节点,其实就是域名下面的主机:www,ftp,mail等等。所有的这些内容,组成了一个dns树,在 ldap里面叫数据库。这下应该很形象了吧。

  下面说说我的ldap的实现。我主要用ldap来存放邮件系统里面的用户信息,包括username,clearpw,maildir,等一些,这样postfix在投递邮件的过程中可以通过检索ldap来知道把邮件投递到硬盘的什么位置。
先去把berkeley-DB的源代码拉过来(http://www.sleepycat.com/) ,我的是4.1.25,openldap需要这东西,这东西其实也没什么不好的,所以我就把它装到/usr下去了。
# tar zxvf db-4.1.25.tar.gz
# cd db-4.1.25
# cd dist
# ./configure --prefix=/usr
# make
# make install

然后就可以开始安装openldap了,我用的是2.1.22,原码是从
http://www.openldap.org/上拉的。
# tar zxvf openldap-2.1.22.tgz
# cd openldap-2.1.22
# ./configure --prefix=/usr/local/openldap
# make depend
# make
# make test
# make install

  这部分安装应该没什么问题,有问题的话就去看看网上的文档,虽然说不到重点,这方面说的还算详细。接下来就是配置。


  schema

  schema类似关系数据库的字段说明,包括字段名,数据类型,数据长度等等。系统有一些默认的schema,我的默认schema文件在 /usr/local/openldap/etc/openldap/schema下面,最重要的是core.schema。它定义了一些最基本的字段。

  为了适应我们的应用,我们要创建自己的schema文件。我创建的shema文件如下:(文件名:kunmail.schema)

#
# kunmail-ldap v3 directory schema
#
# written by hefish@cz8.net
#
# Attribute Type Definitions

attributetype ( 1.3.6.1.4.1.7914.1.2.1.1 NAME 'username'
DESC 'name of the user on the mailsystem'
EQUALITY caseIgnoreIA5Match
SYNTAX 1.3.6.1.4.1.1466.115.121.1.26
SINGLE-value )

attributetype ( 1.3.6.1.4.1.7914.1.2.1.2 NAME 'vuid'
DESC 'UID of the user on the mailsystem'
EQUALITY integerMatch
SYNTAX 1.3.6.1.4.1.1466.115.121.1.27
SINGLE-value )

attributetype ( 1.3.6.1.4.1.7914.1.2.1.3 NAME 'vgid'
DESC 'GID of the user on the mailsystem'
EQUALITY integerMatch
SYNTAX 1.3.6.1.4.1.1466.115.121.1.27
SINGLE-value )

attributetype ( 1.3.6.1.4.1.7914.1.2.1.4 NAME 'maildir'
DESC 'Path to the maildir/mbox on the mail system'
EQUALITY caseExactMatch
SYNTAX 1.3.6.1.4.1.1466.115.121.1.15
SINGLE-value )

attributetype ( 1.3.6.1.4.1.7914.1.2.1.5 NAME 'forwardAddr'
SUBSTR caseIgnoreSubstringsMatch
DESC 'Forward mail address'
EQUALITY caseIgnoreIA5Match
SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 )

attributetype ( 1.3.6.1.4.1.7914.1.2.1.6 NAME 'quota'
DESC 'The amount of space the user can use until all further messages get bounced.'
SYNTAX 1.3.6.1.4.1.1466.115.121.1.44
SINGLE-value )

attributetype ( 1.3.6.1.4.1.7914.1.2.1.7 NAME 'storeHost'
DESC 'On which kunmail server the messagestore of this user is located.'
EQUALITY caseIgnoreIA5Match
SYNTAX 1.3.6.1.4.1.1466.115.121.1.26
SINGLE-value )

attributetype ( 1.3.6.1.4.1.7914.1.2.1.8 NAME 'delivery'
DESC 'Program to execute for all incoming mails.'
SYNTAX 1.3.6.1.4.1.1466.115.121.1.15
SINGLE-value )

attributetype ( 1.3.6.1.4.1.7914.1.2.1.9 NAME 'clearpw'
DESC 'name of the user on the mailsystem'
EQUALITY caseIgnoreIA5Match
SYNTAX 1.3.6.1.4.1.1466.115.121.1.26
SINGLE-value )

attributetype ( 1.3.6.1.4.1.7914.1.2.1.10 NAME 'home'
DESC 'Program to execute for all incoming mails.'
SYNTAX 1.3.6.1.4.1.1466.115.121.1.15
SINGLE-value )

attributetype ( 1.3.6.1.4.1.7914.1.2.1.11 NAME 'mailReplyText'
DESC 'A reply text for every incoming message'
SUBSTR caseIgnoreSubstringsMatch
SYNTAX 1.3.6.1.4.1.1466.115.121.1.44{4096}
SINGLE-value )

attributetype ( 1.3.6.1.4.1.7914.1.2.1.12 NAME 'active'
DESC 'The status of a user account: active, nopop, disabled'
EQUALITY integerMatch
SYNTAX 1.3.6.1.4.1.1466.115.121.1.27
SINGLE-value )

# Object Class Definitions

objectclass ( 1.3.6.1.4.1.7914.1.2.2.1 NAME 'kunmailUser'
DESC 'KunMail-LDAP User' SUP top STRUCTURAL
MUST ( username $ cn $ vuid $ vgid )
MAY ( maildir $ home $ clearpw $
forwardAddr $ quota $
storeHost $ delivery $
mailReplyText $ active ) )

  现在来说说这个schema文件。开始部分是attributeType的定义,相当于字段定义。最后的objectclass是定义数据所包含的属性。这里kunmailUser这种数据,要包含maildir $ home $ clearpw $ forwardAddr $ quota $ storeHost $ delivery $ mailReplyText $ active 等可选项,还要包括username $ cn $ vuid $ vgid 必选项。可选项用MAY()来包含,必选项用MUST()来包含。DESC是说明项。SUP表示父类(有点像面向对象编程啊)top表示没有父类,他自己是顶级。 STRUCTURAL是存储方式,不管他(我也说不清楚)
接下来解释attributeType的说明项。

  第一个数字是表示序号,至少我是怎么认为的,也许不对,不过。。。管他。NAME是表示属性的名字
DESC是说明
下面表示的是匹配的方式,SUBSTR是字符串匹配,EQUALITY是相等性匹配,这些在openldap的admin guide里面有,不难看懂SYNTAX是表示字段的数据类型。这个admin guide里面也有说明。SINGLE-value表示这个属性只有一个值,有些属性可以有多个值,比如联系地址等。默认的话,是多值的。

  schema准备好之后,我们要在配置文件中,把这个schema包含进去,让这个schema生效。在配置文件slapd.conf中间的开始部分加入这样的一句:include /usr/local/openldap/etc/openldap/schema/kunmail.schema

  应该注意,上面这句话之前应确保有一句:include /usr/local/openldap/etc/openldap/schema/core.schema
因为kunmail.schema里面有些东西是依赖core.schema的。

  然后slapd.conf看起来应该像下面这样:

# $OpenLDAP: pkg/ldap/servers/slapd/slapd.conf,v 1.23.2.8 2003/05/24 23:19:14 kurt Exp $
#
# See slapd.conf(5) for details on configuration options.
# This file should NOT be world readable.
#
include /usr/local/openldap/etc/openldap/schema/core.schema
include /usr/local/openldap/etc/openldap/schema/kunmail.schema

# Define global ACLs to disable default read access.

# Do not enable referrals until AFTER you have a working directory
# service AND an understanding of referrals.
#referral ldap://root.openldap.org

pidfile /usr/local/openldap/var/slapd.pid
argsfile /usr/local/openldap/var/slapd.args

#######################################################################
# ldbm database definitions
#######################################################################

database bdb
suffix "dc=cz8,dc=net"
rootdn "cn=Manager,dc=cz8,dc=net"
# Cleartext passwords, especially for the rootdn, should
# be avoid. See slappasswd(8) and slapd.conf(5) for details.
# Use of strong authentication encouraged.
rootpw abcd1234

# The database directory MUST exist prior to running slapd AND
# should only be accessible by the slapd and slap tools.
# Mode 700 recommended.
directory /usr/local/openldap/var/openldap-data
# Indices to maintain
index objectClass eq


  配置文件没什么好解释的了吧,主要是我配置了一个数据库"dc=cz8,dc=net",如果需要,还可以配置多个数据库,每个都是以database开始的。具体的方法看admin guide。(一般说来,一个公司用一个数据库)可以启动ldap服务了!
# cd /usr/local/openldap/libexec
# ./slapd

  接下来的事情就是向数据库添加数据。ldap不支持sql,所以要用ldapadd这个程序来添加,添加的时候要用一个ldif文件,把要添加的东西写在里面,ldif的格式在admin guide里面有说明,我在这里只是简要说一下。

  首先要添加根,这一步是必要的,不然任何数据都添加不进去。我们编辑一个root.ldif文件:

dn: dc=cz8,dc=net
dc: cz8
description: YuCa Network Studio
objectClass: dcObject
objectClass: organization
o: YuCa Network



  然后用 ldapadd命令将它加入ldap。
# ./ldapadd -f root.ldif -x -D "cn=Manager,dc=cz8,dc=net" -w abcd1234

然后我准备在数据库里添加一个分支,专门用来存放邮件系统的用户数据,这种分支,据说要做ou(organizational unit),一般来说,不同的分支,存放不同类型的数据,我给这个ou起名叫mail。且看ldif文件(mail.ldif)
dn: ou=mail,dc=cz8,dc=net
objectClass: organizationalUnit
ou: mail
description: Mail Directory

继续用ldapadd加入。

然后在ou=mail,cd=cz8,dc=net分支下,加入用户数据:(user.ldif)
dn: cn=heyu, ou=mail, dc=cz8, dc=net
objectClass: kunmailUser
cn: heyu
username: heyu@cz8.net
vuid: 1000
vgid: 1000
clearpw: tmd8427
home: /exports/mailhome/system/heyu
maildir: /exports/mailhome/system/heyu/Maildir/
forwardAddr: hefish@czlib.net
quota: 10000000
active: 1

  主要解释一下上面的ldif文件,主要是objectClass这一行,意思是这个节点存放kunmailUser这个类型的数据记录。其他的都是kunmailUser这个类型的属性。运行ldapadd,将其加入。现在去下在一个ldap browser/editor,登录到我们的ldap server看看,应该可以看见ldap的树状结构了。
相关文章 热门文章
  • 邮件系统双雄PK: TurboMail vs Exchange
  • 利用Transporter Suite实现从第3方邮件系统迁移到Exchange 2007
  • TurboMail邮件系统双机热备方案
  • TurboMail免费打造企业级别邮件系统
  • 避免邮件系统更换 企业规划先到位
  • 为邮件系统实现短信提醒功能
  • 微软Hotmail邮件系统引入社交网站
  • 某国际机场的TurboMail邮件系统实施案例
  • TurboMail校园邮件系统解决方案
  • TurboMail邮件系统彩邮解决方案
  • 深层剖析企业为何和如何重新选型邮件系统
  • Coremail邮件系统为厦门大学重建信息化基础
  • linux的基本操作(上)
  • Linux系统下应用知识大荟萃
  • GNU GRUB启动管理器
  • 制作基于软盘的Linux系统
  • 网络配置文件快速解读
  • linux的基本操作(下)
  • 剖析Linux系统启动过程
  • DameWare让局域网管理不再繁琐
  • 在Redhat 9下实现双机热备和集群功能
  • LINUX守护进程介绍
  • Redhat advance server 2.1集群的安装与管理
  • Linux必须学会的60个命令-文件处理
  • 自由广告区
     
    最新软件下载
  • SharePoint Server 2010 部署文档
  • Exchange 2010 RTM升级至SP1 教程
  • Exchange 2010 OWA下RBAC实现的组功能...
  • Lync Server 2010 Standard Edition 标..
  • Lync Server 2010 Enterprise Edition...
  • Forefront Endpoint Protection 2010 ...
  • Lync Server 2010 Edge 服务器部署文档
  • 《Exchange 2003专家指南》
  • Mastering Hyper-V Deployment
  • Windows Server 2008 R2 Hyper-V
  • Microsoft Lync Server 2010 Unleashed
  • Windows Server 2008 R2 Unleashed
  • 今日邮件技术文章
  • 腾讯,在创新中演绎互联网“进化论”
  • 华科人 张小龙 (中国第二代程序员 QQ...
  • 微软推出新功能 提高Hotmail密码安全性
  • 快压技巧分享:秒传邮件超大附件
  • 不容忽视的邮件营销数据分析过程中的算..
  • 国内手机邮箱的现状与未来发展——访尚..
  • 易观数据:2011Q2中国手机邮箱市场收入..
  • 穿越时空的爱恋 QQ邮箱音视频及贺卡邮件
  • Hotmail新功能:“我的朋友可能被黑了”
  • 入侵邻居网络发骚扰邮件 美国男子被重..
  • 网易邮箱莫子睿:《非你莫属》招聘多过..
  • 中国电信推广189邮箱绿色账单
  • 最新专题
  • 鸟哥的Linux私房菜之Mail服务器
  • Exchange Server 2010技术专题
  • Windows 7 技术专题
  • Sendmail 邮件系统配置
  • 组建Exchange 2003邮件系统
  • Windows Server 2008 专题
  • ORF 反垃圾邮件系统
  • Exchange Server 2007 专题
  • ISA Server 2006 教程专题
  • Windows Vista 技术专题
  • “黑莓”(BlackBerry)专题
  • Apache James 专题
  • 分类导航
    邮件新闻资讯:
    IT业界 | 邮件服务器 | 邮件趣闻 | 移动电邮
    电子邮箱 | 反垃圾邮件|邮件客户端|网络安全
    行业数据 | 邮件人物 | 网站公告 | 行业法规
    网络技术:
    邮件原理 | 网络协议 | 网络管理 | 传输介质
    线路接入 | 路由接口 | 邮件存储 | 华为3Com
    CISCO技术 | 网络与服务器硬件
    操作系统:
    Windows 9X | Linux&Uinx | Windows NT
    Windows Vista | FreeBSD | 其它操作系统
    邮件服务器:
    程序与开发 | Exchange | Qmail | Postfix
    Sendmail | MDaemon | Domino | Foxmail
    KerioMail | JavaMail | Winwebmail |James
    Merak&VisNetic | CMailServer | WinMail
    金笛邮件系统 | 其它 |
    反垃圾邮件:
    综述| 客户端反垃圾邮件|服务器端反垃圾邮件
    邮件客户端软件:
    Outlook | Foxmail | DreamMail| KooMail
    The bat | 雷鸟 | Eudora |Becky! |Pegasus
    IncrediMail |其它
    电子邮箱: 个人邮箱 | 企业邮箱 |Gmail
    移动电子邮件:服务器 | 客户端 | 技术前沿
    邮件网络安全:
    软件漏洞 | 安全知识 | 病毒公告 |防火墙
    攻防技术 | 病毒查杀| ISA | 数字签名
    邮件营销:
    Email营销 | 网络营销 | 营销技巧 |营销案例
    邮件人才:招聘 | 职场 | 培训 | 指南 | 职场
    解决方案:
    邮件系统|反垃圾邮件 |安全 |移动电邮 |招标
    产品评测:
    邮件系统 |反垃圾邮件 |邮箱 |安全 |客户端
    广告联系 | 合作联系 | 关于我们 | 联系我们 | 繁體中文
    版权所有:邮件技术资讯网©2003-2010 www.5dmail.net, All Rights Reserved
    www.5Dmail.net Web Team   粤ICP备05009143号