LDAP 入门
参考书籍
LDAP 应用
一直到现在,小弟完成了几篇 LDAP 的文件,如果您有需要,可以参考看看。
现今网路常用的服务,以 HTTP、Mail 和 File System (Samba) 为最常用的服务,然而在这些常用的服务里,会有使用者帐号的问题,每当要使用
Mail 时要输入 Mail 的帐号密码,存取 File System 要有 File System 帐号密码,再更多的服务就要记更多的帐号密码,小弟曾看过某机关,一位承办人居要要背五组以上的的帐号密码,而每两个月又要修改一次,想想看这是多么恐怖的一件事。
LDAP 是一种目绿服务,可使用 LDAP 记录各种的人员资讯,就像是通讯录一样,又更进阶一点,他也可以拿来做帐号整合,若是在 AP 上都有所支援,那么要使用同一组帐号秘码就不再是难以搞定的事了。
在小弟等当兵的这一段日子里,打算使用 LDAP 来做 Linux login (new window)、Postfix (new window)、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 套件。
01
02
03
04
05
06
|
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 来安装就可以了。
01
02
03
|
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 里可得到详细资讯。 |
DB_CONFIG 档案设定了 index 的快取数量,可调整效能的表现,在一开始建置时需要先行建立,这个档案的预设范例可以从 /etc/openldap 下取得,并把它复制到 /var/lib/ldap
0001
|
root # cp /etc/openldap/DB_CONFIG.example /var/lib/ldap/DB_CONFIG |
设定 /etc/openldap/slapd.conf 档案
0001
0002
0003
0004
0005
|
~ 以上略 ~
suffix "dc=l-penguin,dc=idv,dc=tw"
rootdn "cn=Manager,dc=l-penguin,dc=idv,dc=tw"
rootpw secret
~ 以下略 ~ |
好了,三行,三行就符合本篇的主要设定,现在我就来解释一下这三行的意思:
设定完之后,你应该可以体会到这个 slapd.conf 有多重要,因为里面包含了最大权限管理者的帐号密码,所以除了相关帐号之外,应该不允许有其它人修改和阅读。
设计机关档 / 启动 ldap
当完成最主要的设定之后,系统内不会有任何资料,所以我们必需逐步建立,当然最重要的是机关设定吧!
记录资讯的格式我们一般取为 *.ldif 档,一般第一次接触会显得很陌生,在这里我将设计一个符合我规划的 LDIF 档案,并存在 /etc/openldap/data/root-unit.ldif
档里:
0001
0002
0003
0004
0005
0006
|
# root node
dn: dc=l-penguin,dc=idv,dc=tw
dc: l-penguin
objectClass: dcObject
objectClass: organizationalUnit
ou: l-penguin Dot idv Dot tw |
好的,以上我们是一层一层的规划下来,每一笔新的记录和前一笔新记录要使用一行空白行来隔开表示示别;而每一笔一开头就要表示这笔资料的完整 dn
值,就像是绝对路径一样;在每一笔资料的参数里,可以自行选用要使用那些 objectClass。
当然,各位若不想用手慢慢 key 这些无聊的文字,可以由此下载 root-unit.ldif
档案。
现在设定完了之后,我们要这些机关新增到 LDAP 里,可以使用 slapadd 来新增:
01
02
03
04
05
06
07
08
09
10
11
|
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 安装的,就很简单了:
01
02
03
04
|
root # service ldap start
Checking configuration files for : config file testing succeeded
Starting slapd: [ OK ]
root # |
这样就完成了!
Note: 在使用 slap* 工具之前,并不可以启动 LDAP。 |
再来,查看 LDAP 资料录,下面的指令可以查看所有项目:
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
|
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
0001
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013
0014
0015
0016
|
#设定 吴怡君 通讯录
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: c293831287@l-penguin.idv.tw
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 定义纲要。 |
新增人员名录
建立好人员名录之后,请得要注意下列几项:
- 转换到 unix 格式
- 中文字元和 UTF-8
我相信,很多人一定是在 Windows 编好 ldif 档之后再传到主机上,但是在 Windows 编好的文件,有经验的使用者会发现用 vi
一打开之后每一行的最后面会多一种 ^M 的字元,这种字元在 Linux 可是不被认得的,若没有消除就会造成新增错误。你可以使用 vi 取代掉,或是使用更简单的方法,让
dos2unix 来帮你做:
01
02
|
root # dos2unix /etc/openldap/data/users.ldif
root # |
中文字元的问题,因为在 Windows 编完之后,会使用 Big5 编码,所以,我们要把他转成 UTF-8 字元,为什么?因为 LDAP
就规定了 ldif 文件需要使用 UTF-8 格式,这样子明白了吧!要让 Big5 变成 UTF-8 可以使用 iconv 这个程式来转换:
01
02
03
04
|
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 来完成任务:
01
02
03
|
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 来查看吧:
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
|
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
#
~ 略 ~
# E9BB83E680A1E99A86, hr, unit, company, l-penguin.idv.tw
dn:: Y2496buD5oCh6ZqGLG91PWhyLG91PXVuaXQsb3U9Y29tcGFueSxkYz1sLXBlbmd1aW4sZGM9a
WR2LGRjPXR3
cn:: 6buD5oCh6ZqG
sn: N/A
objectClass: top
objectClass: person
objectClass: inetOrgPerson
givenName:: 6buD5oCh6ZqG
mail: d197700415@l-penguin.idv.tw
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
# E590B3E5AEB6E887BB, hr, unit, company, l-penguin.idv.tw
dn:: Y2495ZCz5a626Ie7LG91PWhyLG91PXVuaXQsb3U9Y29tcGFueSxkYz1sLXBlbmd1aW4sZGM9a
WR2LGRjPXR3
cn:: 5ZCz5a626Ie7
sn: N/A
objectClass: top
objectClass: person
objectClass: inetOrgPerson
givenName:: 5ZCz5a626Ie7
mail: d295723341@l-penguin.idv.tw
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 官方的文件,但因为是英文版的我想一开始会让很多人打退堂鼓,其实这是不必要的,当你阅读了官方线上文件之后,很多问题都会发现其实都有解决方案。
Last modified: 04/09/2008 03/03/2007 08/09/2005 |