文章详情

  • 游戏榜单
  • 软件榜单
关闭导航
热搜榜
热门下载
热门标签
php爱好者> php文档>DLAP入门

DLAP入门

时间:2006-05-29  来源:oscarlin

参考书籍

  • LDAP 系统管理 (O'Reilly, ISBN: 986-7794-21-4)
  • http://www.openldap.org/doc/admin23/index.html

现今网络常用的服务,以 HTTP、Mail 和 File System (Samba) 为最常用的服务,然而在这些常用的服务里,会有使用者账号的问题,每当要使用 Mail 时要输入 Mail 的账号密码,存取 File System 要有 File System 账号密码,再更多的服务就要记更多的账号密码,小弟曾看过某机关,一位承办人居要要背五组以上的的账号密码,而每两个月又要修改一次,想想看这是多么恐怖的一件事。

LDAP 是一种目绿服务,可使用 LDAP 记录各种的人员信息,就像是通讯簿一样,又更进阶一点,他也可以拿来做账号整合,若是在 AP 上都有所支持,那么要使用同一组账号秘码就不再是难以搞定的事了。

在小弟等当兵的这一段日子里,打算使用 LDAP 来做 Linux login、Postfix、Samba、HTTP 等账号密码整合。所以,我将会写一系列的 LDAP 整合文章,当然,太深入、难以说明或是太过于理论的地方我都不会讲,因为这只是笔记,我会尽量说明清楚。为了要让阅读本文章的读者们可以更容易的找到相关书籍,我在文章里也会提供参考图书或网页的数据。

无论如何,小弟只对 Redhat Linux 的部份较为熟悉,所以在以下文章里所提到的 LDAP,其实是指 OpenLDAP 套件,跟 Microsoft 的 Active Directory 没有关系,因为小弟对 AD 也不熟。

在这个章节里,我将要介绍基本的 LDAP 观念和如何使者用 ldap command 来新增、查寻数据。而在实作的环境里,我是使用 CentOS 4.0,也就是说若您的系统是使用 CentOS 4、Redhat Enterprise Linux 4、Fedora Core 3 或 Fedora Core 4 的话应该都可以照着本文章实作,当然,CentOS 4.0 里附的 OpenLDAP 版本是 openldap-2.2。

安装

要实作 LDAP 的话,当然一定要安装 LDAP 套件了,包含了 server 及 devel 相关的套件,你可以查看系统有无 LDAP Server 套件。

root # rpm -qa | grep openldap
openldap-2.2.13-2
openldap-devel-2.2.13-2
openldap-servers-2.2.13-2
openldap-clients-2.2.13-2
root #

若没有的话,可使用 CentOS 4 光盘所附的 RPM 来安装就可以了。

root # rpm -ivh openldap*
~ 中间略 ~
root #

规划

其实 LDAP 也不用想得太难,把他想成数据库的一种就对了,对于有数据库设计经验的人应该不成问题,但是若你之前都没有碰过,那就把 LDAP 想成组织图一样就可以了,只是这个组织图是在你脑海里浮现,所以你最好要再准备一张纸,把你的架构画出来才行。就我这次提供的组织来看,大约是以下这样:

                    l-penguin.idv.tw

                      /          \

                  login         company

                   /  \         /     \

                user group   unit     customer

                            /  |  \

                        mis account hr

为了这次的实做,我把这个 l-penguin.idv.tw 分成主要两个部份,login 部份是用来做有关 login 的资料,所有有关 login 的机制都是放在这里。而 company 里面,就只单纯提供通讯簿的查寻而已。而这个架构图,在之后的 LDAP 系列文件里,还会出现,我现在的实做,是以 l-penguin.idv.tw -> company -> unit 这个路线走,在最后的结果,可以查到在每个部份下的人员。

Note: 这个部份,我还没有讲到 LDAP 的表示法,主要是要让各位读者明白,在使用 LDAP 之前要先有一个架构,画出来再依图实做就会很好理解。这个部份,可以参考 LDAP 系统管理 第二章 LDAPv3 概论。

LDAP 表示法

若要表示一笔人员记录,可使用:
cn=user name,ou=gourp,dc=your,dc=domain

若是以本例来说,在 mis 部门下有一位 steven,那么对于这位 steven 的表示法为:
cn=steven,ou=mis,ou=unit,ou=company,dc=l-penguin,dc=idv,dc=tw

这一长串,我们称之为一个 dn 值,在 LDAP 的表示方法都是由小到大,也就是人名先表示、再表示部门、单位(这和老外的门牌表示法是一样的意思)。

当然,经过这么一说你就可以知道 cn 值在同一个 ou 下是不可以重复的,就是说在 ou=mis 下不可以有两位 steven,不然就照成数据重复。当然,在同一公司里叫 steven 的人可能到处跑,但是同一部门下同时叫 steven 的机率就就会降低了。

LDAP 也可以使用中文,比方说小弟是在 mis 部门下的,若依名字设定 dn 的话,就会变成:
cn=廖子仪,ou=mis,ou=unit,ou=company,dc=l-penguin,dc=idv,dc=tw

相信,有了中文的支持下,大家对 LDAP 应该不会太排斥才对。

主要设定档

在使用 LDAP 之前,一定要先设定好主要设定档,如此才能让你的 LDAP 正常使用。OpenLDAP 主要设定档在 /etc/openldap/slapd.conf,这个 slapd.conf 若要各位用手打出来可能会让大家反弹,所幸里面已经有最主要的设定了,这些设定可以符合大部份的需求,剩下来的只需要一些微调而已。

Note: 主要设定文件, 在 LDAP 系统管理 第三章 OpenLDAP 里可得到详细信息。

 

root # vi /etc/openldap/slapd.conf
============================================
suffix "dc=l-penguin,dc=idv,dc=tw"
rootdn "cn=Manager,dc=l-penguin,dc=idv,dc=tw"
rootpw secret
============================================

好了,三行,三行就符合本篇的主要设定,现在我就来解释一下这三行的意思:

  • suffix "dc=l-penguin,dc=idv,dc=tw"

suffix 就是用来定义你 LDAP 的根后缀

  • rootdn "cn=Manager,dc=l-penguin,dc=idv,dc=tw"

Unix/Linux root 里有至高无尚的地位,可以打破任何规定,而在这里,这个 rootdn 就是指 LDAP 的 root,设定了之后就可以对整个 LDAP 系统数据做新增、删除、修改等动作。一般 cn 值会是 Manager。

  • rootpw secret

故名思意就是指定刚刚那个 Manager 的密码,而在这个范例中,我们是使用 secret 这个明码的文字,当然是为了解说方便,真正在管理时还是以加密过的文字较为安全。

设定完之后,你应该可以体会到这个 slapd.conf 有多重要,因为里面包含了最大权限管理者的账号密码,所以除了相关账号之外,应该不允许有其它人修改和阅读。

设计机关档 / 启动 ldap

当完成最主要的设定之后,系统内不会有任何数据,所以我们必需逐步建立,当然最重要的是机关设定吧!

记录信息的格式我们一般取为 *.ldif 档,一般第一次接触会显得很陌生,在这里我将设计一个符合我规划的 LDIF 档案,并存在 /etc/openldap/data/root-unit.ldif 档里:

# root node
dn: dc=l-penguin,dc=idv,dc=tw
dc: l-penguin
objectClass: dcObject
objectClass: organizationalUnit
ou: l-penguin Dot idv Dot tw

#login top
dn: ou=login,dc=l-penguin,dc=idv,dc=tw
ou: login
objectClass: organizationalUnit

#user, uid, password
dn: ou=user,ou=login,dc=l-penguin,dc=idv,dc=tw
ou: user
objectClass: organizationalUnit

#group
dn: ou=group,ou=login,dc=l-penguin,dc=idv,dc=tw
ou: group
objectClass: organizationalUnit

##for company organization top
dn: ou=company,dc=l-penguin,dc=idv,dc=tw
ou: company
objectClass: organizationalUnit

#for company organization (unit)
dn: ou=unit,ou=company,dc=l-penguin,dc=idv,dc=tw
ou: unit
objectClass: organizationalUnit

#human resource (under unit)
dn: ou=hr,ou=unit,ou=company,dc=l-penguin,dc=idv,dc=tw
ou: hr
objectClass: organizationalUnit

#MIS (under unit)
dn: ou=mis,ou=unit,ou=company,dc=l-penguin,dc=idv,dc=tw
ou: mis
objectClass: organizationalUnit

#Account (under unit)
dn: ou=account,ou=unit,ou=company,dc=l-penguin,dc=idv,dc=tw
ou: account
objectClass: organizationalUnit

# for customers information
dn: ou=customer,ou=company,dc=l-penguin,dc=idv,dc=tw
ou: customer
objectClass: organizationalUnit

好的,以上我们是一层一层的规划下来,每一笔新的记录和前一笔新记录要使用一行空白行来隔开表示示别;而每一笔一开头就要表示这笔资料的完整 dn 值,就像是绝对路径一样;在每一笔资料的参数里,可以自行选用要使用那些 objectClass。

当然,各位若不想用手慢慢 key 这些无聊的文字,可以由此下载 root-unit.ldif 档案。

现在设定完了之后,我们要这些机关新增到 LDAP 里,可以使用 slapadd 来新增:

root # slapadd -v -l /etc/openldap/data/root-unit.ldif
added: "ou=login,dc=l-penguin,dc=idv,dc=tw" (00000005)
added: "ou=user,ou=login,dc=l-penguin,dc=idv,dc=tw" (00000006)
added: "ou=group,ou=login,dc=l-penguin,dc=idv,dc=tw" (00000007)
added: "ou=company,dc=l-penguin,dc=idv,dc=tw" (00000008)
added: "ou=unit,ou=company,dc=l-penguin,dc=idv,dc=tw" (00000009)
added: "ou=hr,ou=unit,ou=company,dc=l-penguin,dc=idv,dc=tw" (0000000a)
added: "ou=mis,ou=unit,ou=company,dc=l-penguin,dc=idv,dc=tw" (0000000b)
added: "ou=account,ou=unit,ou=company,dc=l-penguin,dc=idv,dc=tw" (0000000c)
added: "ou=customer,ou=company,dc=l-penguin,dc=idv,dc=tw" (0000000d)
root #

现在你可以很清楚的看到,你的机关名录都被新增进去了!

若确定了之后,再来就启动 DLAP 吧,若你和我一样是由 RPM 安装的,就很简单了:

root # service ldap start
Checking configuration files for : config file testing succeeded
Starting slapd: [ OK ]
root #

这样就完成了!

Note: 在使用 slap* 工具之前,并不可以启动 LDAP。

再来,查看 LDAP 数据录,下面的指令可以查看所有项目:

root # ldapsearch -x -b "dc=l-penguin,dc=idv,dc=tw"
# extended LDIF
#
# LDAPv3
# base <dc=l-penguin,dc=idv,dc=tw> with scope sub
# filter: (objectclass=*)
# requesting: ALL
#

# l-penguin.idv.tw
dn: dc=l-penguin,dc=idv,dc=tw
dc: l-penguin
ou: l-penguin Dot idv Dot tw
objectClass: dcObject
objectClass: organizationalUnit

# login, l-penguin.idv.tw
dn: ou=login,dc=l-penguin,dc=idv,dc=tw
ou: login
objectClass: organizationalUnit

# user, login, l-penguin.idv.tw
dn: ou=user,ou=login,dc=l-penguin,dc=idv,dc=tw
ou: user
objectClass: organizationalUnit

# group, login, l-penguin.idv.tw
dn: ou=group,ou=login,dc=l-penguin,dc=idv,dc=tw
ou: group
objectClass: organizationalUnit
~ 其它略 ~
# search result
search: 2
result: 0 Success

# numResponses: 11
# numEntries: 10

root #

你得到的结果会是一长串的项目,虽然有可能会看不懂,但你最少可以确定刚刚新增的数据都有成功的进去。对于一开始接触 LDAP 的各位读者,一长串总比“什么都没有”来得好吧 :)

设计人员名录

人员名录和机关设计原理一样,也是使用文字文件的 ldif 来做设计。在这里我准备新增几个人员加入到各不同的单位里,当然所示范的资料里人员或身份证都是瞎掰杜撰的 ^^

我把设定档存成 /etc/openldap/data/users.ldif

#设定 吴怡君 通讯簿
dn: cn=吴怡君,ou=hr,ou=unit,ou=company,dc=l-penguin,dc=idv,dc=tw
cn: 吴怡君
sn: N/A
objectclass: person
objectclass: inetOrgPerson
givenName: 吴怡君
mail: [email protected]
telephoneNumber: 02-29587572
mobile: 0939689593
postalAddress: 台北县中和市景平路1号
postalCode: 235
ou: 人力资源部
o: l-penguin Corp.
labeledURI: http://www.l-penguin.idv.tw/
title: 办事员

碍于篇幅上面这只是一个人员的资料而已,这位隶属于人事资源部的吴小姐 (?!) ,我使用了 inetOrgPerson 和 person 这两个 objectclass。其它的请望文生意吧,尤其是你不应该再问那个 dn: 值是什么意思。有一点值得题的是,上面 sn: 这个参数,其实是“姓”啦!

对于开始规划使用 LDAP 的公司来说,要手动 key 这些名录可能会死人,你可以请工读生帮忙做这些锁事,或是略施小计,使用 Shell Script 或 Perl 来产生吧,这样就可以很快的建立这些名录了。

好吧,我还是知道有人先抱着玩玩的心态来做实验,但是又没有现成的人名数据可以参考,那么我就把本次的 users.ldif 给各位下载了。

Note: 关于 inetOrgPerson 和 person 这两个 objectClass 可以查阅 LDAP 系统管理 第四章 4.2 定义纲要。

新增人员名录

建立好人员名录之后,请得要注意下列几项:

  1. 转换到 unix 格式
  2. 汉字字符和 UTF-8

我相信,很多人一定是在 Windows 编好 ldif 文件之后再传到主机上,但是在 Windows 编好的文件,有经验的使用者会发现用 vi 一打开之后每一行的最后面会多一种 ^M 的字符,这种字符在 Linux 可是不被认得的,若没有消除就会造成新增错误。你可以使用 vi 取代掉,或是使用更简单的方法,让 dos2unix 来帮你做:

root # dos2unix /etc/openldap/data/users.ldif
root #

汉字字符的问题,因为在 Windows 编完之后,会使用 Big5 编码,所以,我们要把他转成 UTF-8 字符,为什么?因为 LDAP 就规定了 ldif 文件需要使用 UTF-8 格式,这样子明白了吧!要让 Big5 变成 UTF-8 可以使用 iconv 这个程序来转换:

root # iconv -f big5 -t UTF-8 -o users.ldif.utf8 users.ldif
root # file users.ldif.utf8
users.ldif.utf8: UTF-8 Unicode text
root #

好了,经过一翻烦杂的设定之后就可以开始来新增数据了,新增数据可使用 ldapmodify 来完成任务:

root # ldapmodify -D "cn=Manager,dc=l-penguin,dc=idv,dc=tw" -w secret -x -a -f /etc/openldap/data/users.ldif.utf8
~ 中间略 ~
root #

好了,若中间没有发生任何的问题,就表示新增成功,一样我们使用 ldapsearch 来查看吧:

root # ldapsearch -x -b "ou=unit,ou=company,dc=l-penguin,dc=idv,dc=tw"
# extended LDIF
#
# LDAPv3
# base <ou=unit,ou=company,dc=l-penguin,dc=idv,dc=tw> with scope sub
# filter: (objectclass=*)
# requesting: ALL
#
~ 略 ~
# \E9\BB\83\E6\80\A1\E9\9A\86, hr, unit, company, l-penguin.idv.tw
dn:: Y2496buD5oCh6ZqGLG91PWhyLG91PXVuaXQsb3U9Y29tcGFueSxkYz1sLXBlbmd1aW4sZGM9a
WR2LGRjPXR3
cn:: 6buD5oCh6ZqG
sn: N/A
objectClass: top
objectClass: person
objectClass: inetOrgPerson
givenName:: 6buD5oCh6ZqG
mail: [email protected]
telephoneNumber: 02-29587572
mobile: 0939689593
postalAddress:: 5Y+w5YyX57ij5Lit5ZKM5biC5pmv5bmz6LevMeiZnw==
postalCode: 235
ou:: 5Lq65Yqb6LOH5rqQ
o: l-penguin Corp.
labeledURI: http://www.l-penguin.idv.tw/
title:: 5Lq65LqL6LOH5rqQ6YOo5Li75Lu7

# \E5\90\B3\E5\AE\B6\E8\87\BB, hr, unit, company, l-penguin.idv.tw
dn:: Y2495ZCz5a626Ie7LG91PWhyLG91PXVuaXQsb3U9Y29tcGFueSxkYz1sLXBlbmd1aW4sZGM9a
WR2LGRjPXR3
cn:: 5ZCz5a626Ie7
sn: N/A
objectClass: top
objectClass: person
objectClass: inetOrgPerson
givenName:: 5ZCz5a626Ie7
mail: [email protected]
telephoneNumber: 02-29587572
mobile: 0939689593
postalAddress:: 5Y+w5YyX57ij5Lit5ZKM5biC5pmv5bmz6LevMeiZnw==
postalCode: 235
ou:: 5Lq65Yqb6LOH5rqQ
o: l-penguin Corp.
labeledURI: http://www.l-penguin.idv.tw/
title:: 6L6m5LqL5ZOh
~ 略 ~
# search result
search: 2
result: 0 Success

# numResponses: 22
# numEntries: 21
root #

GUI 工具

哎呀,人客呀,大家一看到这个小单元,可能会认为自己又误上贼船了,千辛万苦努力看完前面的废话之后居然又出现一个 GUI 工具,但是,大家千万不要认为小弟诱拐大家上贼船,明明有很方便的 GUI 工具还不放在第一个介绍~

可别误会呀,若各位是从头开始看的话,那么已经可以开始使用文字模式来新增了,GUI 只是一种辅助而已,若是不了解其原理,那么就算有 GUI 工具还是无法使用顺手。

在这里我介绍的 GUI 工具是 ldapbrowser,这工具可用来新增、移除、修改你的数据。使用方法就由各位去发现吧!

名称:ldapbrowser
首页:http://www-unix.mcs.anl.gov/~gawor/ldap/
下载:http://www-unix.mcs.anl.gov/~gawor/ldap/download.html

后记:

套一句 LDAP 系统管理 作者讲的话,学习 LDAP 就像跳伞一样,当越接近地面时,事物会变得越来越清晰。在此小弟实在是非常强力的推荐 LDAP 系统管理这本书,它在理论上解释的非常清楚,如果有时间的话这本书应该要好好读一次以了解 LDAP 其中的原理。

当然最新最快更新的文件还是 OpenLDAP 官方的文件,但因为是英文版的我想一开始会让很多人打退堂鼓,其实这是不必要的,当你阅读了官方在线文件之后,很多问题都会发现其实都有解决方案。

 

相关阅读 更多 +
排行榜 更多 +
无敌流浪汉3手机版下载

无敌流浪汉3手机版下载

飞行射击 下载
龙珠巅峰对决手游下载

龙珠巅峰对决手游下载

飞行射击 下载
杀戮尖塔mod手机版下载

杀戮尖塔mod手机版下载

棋牌卡牌 下载