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

~ 以下略 ~

好了,三行,三行就符合本篇的主要設定,現在我就來解釋一下這三行的意思:

  • 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 檔裡:

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 來產生吧,這樣就可以很快的建立這些名錄了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值