LDAP 初體驗 : 用 Open LDAP 當郵件通訊錄
Step 0 .前製工作
你要先安裝,初步設定好你的 OPENLDAP ,可以參考下面這篇LDAP(安裝)
step 1. OpenLDAP 目錄架構圖
接下的範例皆以此圖為輪廓
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"
一開始什麼都沒有我們自己新增一個 "add"
我之前設定的 LDAP Server – https://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 了.密碼則是在做搜尋時才需要.
在 Address Book / Edit / Search Address 搜尋一下
使用 outlook express 和 Evolution 也是一樣在設定完 LDAP Server 之後使用者資料就可以透過他.
One thought on “LDAP-郵件通訊錄”