1. 程式人生 > >LDAP基礎:5:使用ldapadd進行資料增加

LDAP基礎:5:使用ldapadd進行資料增加

在前面的文章中學習到了如何搭建openldap服務,以及如何從客戶端進行訪問,同時最基礎的ldap的概念和樹形結構的常見構成方式也多少有些涉及,在這個基礎之上,就可以開始使用LDAP了。這篇文章來介紹一下如何建立相關的資訊。

建立內容

這裡我們將會聚焦於下圖灰色部分的建立,這也是實際專案中使用的最多的一種,在這系列的文章中將會使用openldap的osixia的映象所內建的預設的dc: example.org(這裡的資訊是openldap官方例子的資訊,在例子中我們實際使用的是example.org而不是example.com)。通過設定環境變數即可簡單改變此處,因為此部分更多與LDAP基本服務設定相關,所以使用客戶端的命令或者程式設計介面對其進行操作的部分主要聚焦於從Organisation開始的部分。
在這裡插入圖片描述

建立目標

在本文的例子中,將會在dc=example, dc=org下建立:

建立內容 型別 名稱 定位方式
部門 Organisation Unit People 通過ou=People進行
部門 Organisation Unit Servers 通過ou=Servers進行
部門 Person People 通過uid=babs進行

操作方式

執行場所

對LDAP進行操作,場所不限,LDAP伺服器上進行操作,也可以在可以連線LDAP服務的客戶端進行

使用命令

常用的資料新增,可以使用ldapmodify命令也可以使用ldapadd

資料填充

可以使用ldif傳入資料的方式,也可以通過引數方式傳入

命令介紹

使用ldapadd或者ldapmodify進行資料新增,很多情況下的客戶端實現中,這兩個是一個共通的實現,簡單到可能只是一個軟連結

liumiaocn:openldap liumiao$ which ldapadd
/usr/bin/ldapadd
liumiaocn:openldap liumiao$ ls -l /usr/bin/ldapadd
lrwxr-xr-x  1 root  wheel  10 Oct 25 11:50 /usr/bin/ldapadd -> ldapmodify
liumiaocn:openldap liumiao$

Option介紹

命令的Option就不再分命令來介紹,常用的Option的資訊和用途整理如下:

Option 說明
-H ldapuri,格式為ldap://機器名或者IP:埠號,不能與-h和-p同時使用
-h LDAP伺服器IP或者可解析的hostname,與-p可結合使用,不能與-H同時使用
-p LDAP伺服器埠號,與-h可結合使用,不能與-H同時使用
-x 使用簡單認證方式
-D 所繫結的伺服器的DN
-w 繫結DN的密碼,與-W二者選一
-W 不輸入密碼,會互動式的提示使用者輸入密碼,與-w二者選一
-f 指定ldif檔案作為輸入
-a 新增新的entry,ldapadd預設使用,ldapmodify 可指定以達到同樣作用
-c 出錯後忽略當前錯誤繼續執行,預設情況下遇到錯誤即終止
-n 模擬操作但並不實際執行,用於驗證,常與-v一同使用進行問題定位
-v 顯示詳細資訊
-d 顯示debug資訊,可設定級別
-e 設定客戶端證書
-E 設定客戶端私鑰

操作例項

使用者Barbara的LDIF資訊

使用最基礎的方式新增一個使用者Barbara,這也是man ldapmodify給出的例子,稍微做一下修改以保證能夠正常新增進去。

liumiaocn:openldap liumiao$ cat barbara.ldif 
dn: cn=Barbara Jensen,dc=example,dc=org
objectClass: inetOrgPerson
cn: Barbara Jensen
cn: Babs Jensen
sn: Jensen
title: the world's most famous mythical manager
mail: [email protected]
uid: bjensen
liumiaocn:openldap liumiao$

使用ldapadd新增Barbara

liumiaocn:openldap liumiao$ ldapadd -H ldap://192.168.31.242:389 -D "cn=admin,dc=example,dc=org" -w admin -f barbara.ldif
adding new entry "cn=Barbara Jensen,dc=example,dc=org"

liumiaocn:openldap liumiao$

使用ldapsearch可以確認到新增的這個實際上最mythical的Barbara的詳細資訊:

liumiaocn:openldap liumiao$ ldapsearch -x -h 192.168.31.242  -b dc=example,dc=org -D "cn=admin,dc=example,dc=org" -w admin
...省略
# Barbara Jensen, example.org
dn: cn=Barbara Jensen,dc=example,dc=org
objectClass: inetOrgPerson
cn: Barbara Jensen
cn: Babs Jensen
sn: Jensen
title: the world's most famous mythical manager
mail: [email protected]
uid: bjensen

# search result
search: 2
result: 0 Success

# numResponses: 4
# numEntries: 3
liumiaocn:openldap liumiao$

刪除該使用者

刪除此使用者,然後後面來驗證使用ldapmodify是否可以同樣進行操作

liumiaocn:openldap liumiao$ ldapdelete -x -h 192.168.31.242  -D "cn=admin,dc=example,dc=org" -w admin  "cn=Barbara Jensen,dc=example,dc=org"
liumiaocn:openldap liumiao$

使用ldapmodify新增Barbara

在這裡,由於ldapadd就是一個指向ldapmodify的軟連結,再詳細進行確認一下,可以得出這兩個東西應該是完全一致的操作,所以一個很簡單的問題:

ldapadd -H ldap://192.168.31.242:389 -D “cn=admin,dc=example,dc=org” -w admin -f barbara.ldif

  • Question:中的ldapadd替換稱ldapmodify是否能夠完全一致的動作?

執行一下來確認結果:

liumiaocn:openldap liumiao$ ldapmodify -H ldap://192.168.31.242:389 -D "cn=admin,dc=example,dc=org" -w admin -f barbara.ldif
ldapmodify: modify operation type is missing at line 2, entry "cn=Barbara Jensen,dc=example,dc=org"
liumiaocn:openldap liumiao$

答案是:不可以。

對應方法1: 使用-a的Option

仔細會看上文整理的Option,對-a的說明是這樣的“新增新的entry,ldapadd預設使用,ldapmodify 可指定以達到同樣作用“,所以ldapmodify的話,新增-a就可以達到同樣效果了。

liumiaocn:openldap liumiao$ ldapmodify -a -H ldap://192.168.31.242:389 -D "cn=admin,dc=example,dc=org" -w admin -f barbara.ldif
adding new entry "cn=Barbara Jensen,dc=example,dc=org"

liumiaocn:openldap liumiao$

對應方法2: 修改LDIF的寫法

為了驗證,重新把剛剛生成的Barbara再次刪掉

liumiaocn:openldap liumiao$ ldapdelete -x -h 192.168.31.242  -D "cn=admin,dc=example,dc=org" -w admin  "cn=Barbara Jensen,dc=example,dc=org"
liumiaocn:openldap liumiao$

修改LDIF的內容,新增一行資訊內容為:changetype: add,修改後的全部資訊如下:

liumiaocn:openldap liumiao$ cat barbara.ldif 
dn: cn=Barbara Jensen,dc=example,dc=org
changetype: add
objectClass: inetOrgPerson
cn: Barbara Jensen
cn: Babs Jensen
sn: Jensen
title: the world's most famous mythical manager
mail: [email protected]
uid: bjensen
liumiaocn:openldap liumiao$

這樣就可以使用同樣的命令列進行添加了

liumiaocn:openldap liumiao$ ldapmodify -H ldap://192.168.31.242:389 -D "cn=admin,dc=example,dc=org" -w admin -f barbara.ldif
adding new entry "cn=Barbara Jensen,dc=example,dc=org"

liumiaocn:openldap liumiao$

新增Organisation Unit

在新增使用者的時候關鍵的objectclass是inetOrgPerson,而對於新增部門,關鍵資訊則為organisationalUnit,新增兩個OrganisationUnit的LDIF資訊如下:

liumiaocn:openldap liumiao$ cat orgunits.ldif 
dn: ou=People,dc=example,dc=org
objectclass: top
objectclass: organizationalUnit
ou: People

dn: ou=Servers,dc=example,dc=org
objectclass: top
objectclass: organizationalUnit
ou: Servers
liumiaocn:openldap liumiao$

通過這個例子可以對LDIF進一步理解到可以是多段資訊的結合,而在實際的專案中,對LDAP資料在不是很複雜的情況下,使用LIDF進行備份和恢復也是常用的方式。

  • 使用ldapadd進行資訊的新增
liumiaocn:openldap liumiao$ ldapadd -H ldap://192.168.31.242:389 -D "cn=admin,dc=example,dc=org" -w admin -f orgunits.ldif 
adding new entry "ou=People,dc=example,dc=org"

adding new entry "ou=Servers,dc=example,dc=org"

liumiaocn:openldap liumiao$ 
  • 通過ldapsearch進行結果的查詢
liumiaocn:openldap liumiao$ ldapsearch -x -h 192.168.31.242  -b dc=example,dc=org -D "cn=admin,dc=example,dc=org" -w admin
...省略
# People, example.org
dn: ou=People,dc=example,dc=org
objectClass: top
objectClass: organizationalUnit
ou: People

# Servers, example.org
dn: ou=Servers,dc=example,dc=org
objectClass: top
objectClass: organizationalUnit
ou: Servers

# search result
search: 2
result: 0 Success

# numResponses: 6
# numEntries: 5
liumiaocn:openldap liumiao$ 

總結

這篇文章使用具體的例子,使用ldapadd和ldapmodify結合ldif檔案實現了對部門資訊和人員的新增,但注意到部門和人員的資訊還未進行關聯,當然最簡單的方式是先建立部門,然後在人員資訊中新增相關內容即可,這裡主要是為後面的進一步介紹ldapmodify的準備。