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 |
若没有的话,可使用 CentOS 4 光盘所附的 RPM 来安装就可以了。
root # rpm -ivh openldap* |
规划
其实 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"
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
#login top
#user, uid, password
#group
##for company organization top
#for company organization (unit)
#human resource (under unit)
#MIS (under unit)
#Account (under unit)
# for customers information |
好的,以上我们是一层一层的规划下来,每一笔新的记录和前一笔新记录要使用一行空白行来隔开表示示别;而每一笔一开头就要表示这笔资料的完整 dn 值,就像是绝对路径一样;在每一笔资料的参数里,可以自行选用要使用那些 objectClass。
当然,各位若不想用手慢慢 key 这些无聊的文字,可以由此下载 root-unit.ldif 档案。
现在设定完了之后,我们要这些机关新增到 LDAP 里,可以使用 slapadd 来新增:
root # slapadd -v -l /etc/openldap/data/root-unit.ldif |
现在你可以很清楚的看到,你的机关名录都被新增进去了!
若确定了之后,再来就启动 DLAP 吧,若你和我一样是由 RPM 安装的,就很简单了:
root # service ldap start |
这样就完成了!
Note: 在使用 slap* 工具之前,并不可以启动 LDAP。 |
再来,查看 LDAP 数据录,下面的指令可以查看所有项目:
root # ldapsearch -x -b "dc=l-penguin,dc=idv,dc=tw"
# l-penguin.idv.tw
# login, l-penguin.idv.tw
# user, login, l-penguin.idv.tw
# group, login, l-penguin.idv.tw
# numResponses: 11 root # |
你得到的结果会是一长串的项目,虽然有可能会看不懂,但你最少可以确定刚刚新增的数据都有成功的进去。对于一开始接触 LDAP 的各位读者,一长串总比“什么都没有”来得好吧 :)
设计人员名录
人员名录和机关设计原理一样,也是使用文字文件的 ldif 来做设计。在这里我准备新增几个人员加入到各不同的单位里,当然所示范的资料里人员或身份证都是瞎掰杜撰的 ^^
我把设定档存成 /etc/openldap/data/users.ldif
#设定 吴怡君 通讯簿 |
碍于篇幅上面这只是一个人员的资料而已,这位隶属于人事资源部的吴小姐 (?!) ,我使用了 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 来帮你做:
root # dos2unix /etc/openldap/data/users.ldif |
汉字字符的问题,因为在 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 |
好了,经过一翻烦杂的设定之后就可以开始来新增数据了,新增数据可使用 ldapmodify 来完成任务:
root # ldapmodify -D "cn=Manager,dc=l-penguin,dc=idv,dc=tw" -w secret -x -a -f /etc/openldap/data/users.ldif.utf8 |
好了,若中间没有发生任何的问题,就表示新增成功,一样我们使用 ldapsearch 来查看吧:
root # ldapsearch -x -b "ou=unit,ou=company,dc=l-penguin,dc=idv,dc=tw"
# \E5\90\B3\E5\AE\B6\E8\87\BB, hr, unit, company, l-penguin.idv.tw
# numResponses: 22 |
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 官方的文件,但因为是英文版的我想一开始会让很多人打退堂鼓,其实这是不必要的,当你阅读了官方在线文件之后,很多问题都会发现其实都有解决方案。