3,781 瀏覽數

LDAP-郵件通訊錄

LDAP 初體驗 : 用 Open LDAP 當郵件通訊錄

Step 0 .前製工作

你要先安裝,初步設定好你的 OPENLDAP ,可以參考下面這篇 LDAP(安裝)

step 1. OpenLDAP 目錄架構圖

接下的範例皆以此圖為輪廓
linux_client01
 LDAP 的全名是:Lightweight Directory Access Protocol,我們可以透過 TCP/IP 所提供的目錄服務, 裡面的資料可以包含使用者的登入資料或是使用的 mail 以及其他有用資訊. 這服務已經普遍應用在很多作業系統上例如:Novell 的 NDS(NetWare Directory Services) 及 Microsoft 的 AD(Active Directory) 等.而在 Linux 下就是 openldap , 先來說明一下 LDAP 的連線字串的表示方式:LDAP://Server/DN,其 DN 可包含了下面三種東西:

  • CN:Common Name
  • OU:Organizational Unit
  • DC:Domain Component

在新增 LDAP 的分錄檔 (LDAP Data Interchange Format) 先來說說 LDAP 的資料表示法,如果我們再公司要找一個人一定會先問在哪一個單位怎麼稱呼.這就是典型的 DN(Distinguished Name) 也就是 LDAP 的資料表示法.如剛剛所說要表示一筆人員的記錄可以使用:我們會看到如下的 DN 字串表示式:
cn=Roy,ou=Hardware,dc=benjr,dc=tw

  • cn=Roy 有一位 Roy 先生
  • ou=Hardware 是在 hardware 部門工作
  • dc=benjr,dc=tw 效命於 benjr.tw 這一家公司.

這一長串就是 DN(Distinguished Name) ,通常我們在表示一個物件時是從小到大來表示. 而這 DN 必須為唯一,也就是說在 benjr.tw 公司的 hardware 部門是不能同時有兩個 Roy ,但不同公司或部門是可以允許有不同的 Roy 存在.但在搜尋時卻是以大到小的方式,如同 DNS .先從 公司名稱,部門單位,人名 搜尋下來.
現在來新增最頂端的分錄檔 (LDAP Data Interchange Format)

Step 2. 新增第一筆 LDAP 的分錄檔( BDN.LDIF )

一開始我們先來新增 DC:Domain Component, BDN.ldif (Base Distinguish Name) 資料至 openldap
I. 新增第一筆 BDN.ldif 檔

[root@benjr ~]# vi BDN.ldif
dn:dc=benjr,dc=tw
objectclass:top
objectclass:Domain
dc:benjr
  • dn: distingush name(每一筆的dn在LDAP內必須唯一,因為搜尋是以dn為基礎),dc=benjr,dc=tw 必須和之前 slapd.conf 相符合
  • objectclass: top 與 objectclass:Domain 指定 ldap server 此筆資料為最上層的搜尋基礎,而所有的 objectclass 皆定義在 schema 目錄內.因此 slapd.conf 在最前面才會先 include 這些必要的 schema 檔
  • dc:benjr 是 objectclass:Domain 必須要的資料,也就是我們的網域節點名稱,以我們為範例 benjr.tw 的 dc 就是 benjr

note:在編輯時要注意不要產生任何空白字元否則在加入時會產生錯誤.如果你是使用 windows 下的編輯軟體記得要先做 #dos2unix 因為 unix 和 windows 的換行有些許的不同.

執行 ldapadd

[root@benjr ~]# ldapadd -x -D "cn=root,dc=benjr,dc=tw"  -W -f BDN.ldif
Enter LDAP Password:
adding new entry "dc=benjr,dc=tw"
  • x  : 使用簡單的驗證(亦即,不用進行 SASL 認證)
  • D : 指定 dn (Distinguished Name) 識別名稱連結 LDAP directory.
  • W: 使用互動式輸入管理者密碼,有別於 -w(小寫)在需緊接著密令後面鍵入密碼
  • f  : 指定 LDIF 檔名

這樣就成功加入一筆資料

執行 ldapsearch

[root@benjr ~]# ldapsearch -x -b 'dc=benjr,dc=tw'
version: 2
#
# filter: (objectclass=*)
# requesting: ALL
#
# benjr, tw
dn: dc=benjr,dc=tw
objectClass: top
objectclass:Domain
dc:benjr
# search result
search: 2
result: 0 Success
# numResponses: 2
# numEntries: 1
  • x  : 使用簡單的驗證(亦即,不用進行 SASL 認證)
  • b: 指定 BDN(Base Distinguished Name),也就是篩選條件.

先前加入的資料也成功搜尋到了,接下來我要新增 ou(organizationalUnit) 來存放使用者的資訊.

Step 3. 新增使用者 LDAP 的分錄檔( LDIF )

在將 user 加入 LDAP 前,要新增的是 OU:Organizational Unit,我設定的是 People 這個 ou(organizationalUnit) 用來未來加入新使用者的資訊.

[root@benjr ~]# vi people.ldif
dn:ou=People,dc=benjr,dc=tw
objectclass:organizationalUnit
ou:People
[root@benjr ~]# ldapadd -x -D "cn=root,dc=benjr,dc=tw"  -W -f people.ldif
Enter LDAP Password:
adding new entry "ou=People,dc=benjr,dc=tw"
[root@benjr ~]# ldapsearch -x -b 'ou=People,dc=benjr,dc=tw'
version: 2
#
# filter: (objectclass=*)
# requesting: ALL
#
# People, benjr, tw
dn: ou=People,dc=benjr,dc=tw
objectClass: organizationalUnit
ou: people
# search result
search: 2
result: 0 Success
# numResponses: 7
# numEntries: 6

可以看到  'ou=People,dc=benjr,dc=tw' 成功加入.

我們是要新增 mail account 的使用者所以基本上要有 mail , Address , phone number 等資料.而這些屬性包括在哪些 object 你可以查 /etc/openldap/schema 目錄中的 *.schema 檔中都有定義.

postalAddress / telephoneNumber 定義在 core.schema 中的 person.而 mail 定義在 inetorgperson.schema 中的 inetOrgPerson,所以我們 objectclass 至少要包含這兩個.

[root@benjr ~]# cat /etc/openldap/schema/core.schema
objectclass ( 2.5.6.7 NAME 'organizationalPerson'
DESC 'RFC2256: an organizational person'
SUP person STRUCTURAL
MAY ( title $ x121Address $ registeredAddress $ destinationIndicator $
preferredDeliveryMethod $ telexNumber $ teletexTerminalIdentifier $
telephoneNumber $ internationaliSDNNumber $
facsimileTelephoneNumber $ street $ postOfficeBox $ postalCode $
postalAddress $ physicalDeliveryOfficeName $ ou $ st $ l ) )
[root@benjr ~]# cat /etc/openldap/schema/inetorgperson.schema
objectclass ( 2.16.840.1.113730.3.2.2
NAME 'inetOrgPerson'
DESC 'RFC2798: Internet Organizational Person'
SUP organizationalPerson
STRUCTURAL
MAY (
audio $ businessCategory $ carLicense $ departmentNumber $
displayName $ employeeNumber $ employeeType $ givenName $
homePhone $ homePostalAddress $ initials $ jpegPhoto $
labeledURI $ mail $ manager $ mobile $ o $ pager $
photo $ roomNumber $ secretary $ uid $ userCertificate $
x500uniqueIdentifier $ preferredLanguage $
userSMIMECertificate $ userPKCS12 )
)

 現在可以來建立使用者的 ldif 檔.下面是兩個使用者的資料. 

[root@benjr ~]# vi mailaccount.ldif
dn: uid=EricChen,ou=People,dc=benjr,dc=tw
uid: EricChen
cn: Eric
givenname: EricChen
sn: Chen
mail: ericchen@benjr.tw
objectClass: person
objectClass: inetOrgPerson
telephoneNumber: 02-2222222
mobile: 0988888888
postalAddress: Taipei county, Taiwan
 
dn: uid=RogerChen,ou=People,dc=benjr,dc=tw
uid: RogerChen
cn: Roger
givenname: RogerChen
sn: Chen
mail: rogerchen@benjr.tw
objectClass: person
objectClass: inetOrgPerson
telephoneNumber: 02-2222222
mobile: 0988888888
postalAddress: Taipei county, Taiwan

匯入剛建立使用者的ldif檔.

[root@benjr ~]# ldapadd -x -W -D"cn=root,dc=benjr,dc=tw" -f mailcount.ldif
Enter LDAP Password:
adding new entry "uid=ericchen,ou=People,dc=benjr,dc=tw"
adding new entry "uid=rogerchen,ou=People,dc=benjr,dc=tw"

 看看有沒有匯入成功!

[root@benjr ~]# ldapsearch -x -b "dc=benjr,dc=tw"
# extended LDIF
#
# LDAPv3
# base <dc=benjr,dc=tw> with scope subtree
# filter: (objectclass=*)
# requesting: ALL
#
 
# benjr.tw
dn: dc=benjr,dc=tw
objectClass: top
objectClass: domain
dc: benjr
 
# People, benjr.tw
dn: ou=People,dc=benjr,dc=tw
objectClass: organizationalUnit
ou: People
 
# EricChen, People, benjr.tw
dn: uid=EricChen,ou=People,dc=benjr,dc=tw
uid: EricChen
cn: Eric
givenName: EricChen
sn: Chen
mail: ericchen@benjr.tw
objectClass: person
objectClass: inetOrgPerson
telephoneNumber: 02-2222222
mobile: 0988888888
postalAddress: Taipei county, Taiwan
 
# RogerChen, People, benjr.tw
dn: uid=RogerChen,ou=People,dc=benjr,dc=tw
uid: RogerChen
cn: Roger
givenName: RogerChen
sn: Chen
mail: rogerchen@benjr.tw
objectClass: person
objectClass: inetOrgPerson
telephoneNumber: 02-2222222
mobile: 0988888888
postalAddress: Taipei county, Taiwan

Step 4. LDAP Email Client 

這邊使用 Thunderbird 做示範,打開我們的 Thunderbird 選擇 "Edit / Preferences / Compaosition / Addressing" 預設只有 Local Address Books ,要點選前我們必須先設定 "address Autocompletion / Directory Server / Edit Directories"
ldapmail01
一開始什麼都沒有我們自己新增一個 "add"
ldapmail02

我之前設定的 LDAP Server – http://benjr.tw/27685 的資料如下

  • suffix "dc=benjr,dc=tw"
  • rootdn "cn=root,dc=benjr,dc=tw"
  • rootpw {SSHA}83DJ4KVwqlk1uh9k2uDb8+NT1U4RgkEs

suffix 對應成 Base DN 而 Bind DN 就是 rootdn 了.密碼則是在做搜尋時才需要.
ldapmail03
在 Address Book / Edit / Search Address 搜尋一下
ldapmail04
使用 outlook express 和 Evolution 也是一樣在設定完 LDAP Server 之後使用者資料就可以透過他.

網友的想法

  1. 自動參照通知: LDAP | Benjr.tw

發表迴響