1. 程式人生 > >LDAP基礎:7:使用ldapmodify和ldapdelete進行修改或刪除

LDAP基礎:7:使用ldapmodify和ldapdelete進行修改或刪除

這篇文章主要介紹一下如何使用ldapmodify和ldapdelete進行資訊的修改或者刪除,並在前面新增的資料的基礎上進行一些簡單的例子的操作。

操作方式

執行場所

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

使用命令

常用的資料的刪除,可以使用ldapmodify命令也可以使用ldapdelete

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二者選一
-c 出錯後忽略當前錯誤繼續執行,預設情況下遇到錯誤即終止
-n 模擬操作但並不實際執行,用於驗證,常與-v一同使用進行問題定位
-v 顯示詳細資訊
-d 顯示debug資訊,可設定級別
-e 設定客戶端證書
-E 設定客戶端私鑰

注意:
常見的選項中-f,在ldapdelete和ldapmodify中有明顯的不同, ldapdelete中主要是用於記錄要刪除的dn的資訊,而ldapmodify的-f則指定的是要修改的ldif的檔案內容。

修改資訊:ldapmodify

事前確認

確認一下Barbara的現在的資訊

liumiaocn:openldap liumiao$ ldapsearch -x -h 192.168.31.242 -p 389 -b "dc=example,dc=org" -D "cn=admin,dc=example,dc=org" -w admin uid=bjensen
# extended LDIF
#
# LDAPv3
# base <dc=example,dc=org> with scope subtree
# filter: uid=bjensen
# requesting: ALL
#

# 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: 2
# numEntries: 1
liumiaocn:openldap liumiao$

修改Barbara的title

Barbara的title寫的是“the world’s most famous mythical manager”,這有點不太謙虛了,修改稱“one of the world’s most famous mythical manager”,因為畢竟官方文件的例子中還有一個叫babs的朋友。

  • 準備用於修改的ldif檔案
liumiaocn:openldap liumiao$ cat modifybarbara.ldif 
dn: cn=Barbara Jensen,dc=example,dc=org
changetype: modify
replace: title
title: one of the world's most famous mythical manager
liumiaocn:openldap liumiao$
  • 使用準備的ldif檔案使用-f傳給ldapmodify進行資訊修改
liumiaocn:openldap liumiao$ ldapmodify -a -H ldap://192.168.31.242:389 -D "cn=admin,dc=example,dc=org" -w admin -f modifybarbara.ldif 
modifying entry "cn=Barbara Jensen,dc=example,dc=org"

liumiaocn:openldap liumiao$
  • 結果確認
liumiaocn:openldap liumiao$ ldapsearch -x -h 192.168.31.242 -p 389 -b "dc=example,dc=org" -D "cn=admin,dc=example,dc=org" -w admin uid=bjensen
# extended LDIF
#
# LDAPv3
# base <dc=example,dc=org> with scope subtree
# filter: uid=bjensen
# requesting: ALL
#

# Barbara Jensen, example.org
dn: cn=Barbara Jensen,dc=example,dc=org
objectClass: inetOrgPerson
cn: Barbara Jensen
cn: Babs Jensen
sn: Jensen
mail: [email protected]
uid: bjensen
title: one of the world's most famous mythical manager

# search result
search: 2
result: 0 Success

# numResponses: 2
# numEntries: 1
liumiaocn:openldap liumiao$ 

可以看到已經完成了資訊的修改

給Barbara新增一個description的欄位

  • 事前準備ldif檔案
liumiaocn:openldap liumiao$ cat modifybarbara.ldif 
dn: cn=Barbara Jensen,dc=example,dc=org
changetype: modify
add: description
description: Barbara description
liumiaocn:openldap liumiao$ 
  • 將ldif檔案通過-f傳給ldapmodify
liumiaocn:openldap liumiao$ ldapmodify -a -H ldap://192.168.31.242:389 -D "cn=admin,dc=example,dc=org" -w admin -f modifybarbara.ldif 
modifying entry "cn=Barbara Jensen,dc=example,dc=org"

liumiaocn:openldap liumiao$
  • 結果確認
liumiaocn:openldap liumiao$ ldapsearch -x -h 192.168.31.242 -p 389 -b "dc=example,dc=org" -D "cn=admin,dc=example,dc=org" -w admin uid=bjensen
# extended LDIF
#
# LDAPv3
# base <dc=example,dc=org> with scope subtree
# filter: uid=bjensen
# requesting: ALL
#

# Barbara Jensen, example.org
dn: cn=Barbara Jensen,dc=example,dc=org
objectClass: inetOrgPerson
cn: Barbara Jensen
cn: Babs Jensen
sn: Jensen
mail: [email protected]
uid: bjensen
title: one of the world's most famous mythical manager
description: Barbara description

# search result
search: 2
result: 0 Success

# numResponses: 2
# numEntries: 1
liumiaocn:openldap liumiao$

將Barbara移動到ou=People中

  • 事前準備ldif檔案
liumiaocn:openldap liumiao$ cat modifybarbara.ldif 
dn: cn=Barbara Jensen,dc=example,dc=org
changetype: modrdn
newrdn: uid=bjensen
deleteoldrdn: 0
newsuperior: ou=people,dc=example,dc=org
liumiaocn:openldap liumiao$
  • 將ldif檔案通過-f傳給ldapmodify
liumiaocn:openldap liumiao$ ldapmodify -a -H ldap://192.168.31.242:389 -D "cn=admin,dc=example,dc=org" -w admin -f modifybarbara.ldif 
modifying rdn of entry "cn=Barbara Jensen,dc=example,dc=org"

liumiaocn:openldap liumiao$
  • 結果確認
liumiaocn:openldap liumiao$ ldapsearch -x -h 192.168.31.242 -p 389 -b "dc=example,dc=org" -D "cn=admin,dc=example,dc=org" -w admin uid=bjensen
# extended LDIF
#
# LDAPv3
# base <dc=example,dc=org> with scope subtree
# filter: uid=bjensen
# requesting: ALL
#

# bjensen, People, example.org
dn: uid=bjensen,ou=People,dc=example,dc=org
objectClass: inetOrgPerson
cn: Barbara Jensen
cn: Babs Jensen
sn: Jensen
mail: [email protected]
uid: bjensen
title: one of the world's most famous mythical manager
description: Barbara description

# search result
search: 2
result: 0 Success

# numResponses: 2
# numEntries: 1
liumiaocn:openldap liumiao$

修改Barbara的uid

  • 事前準備ldif檔案
liumiaocn:openldap liumiao$ cat modifybarbara.ldif 
dn: uid=bjensen,ou=people,dc=example,dc=org
changetype: modrdn
newrdn: uid=bjensenuid
deleteoldrdn: 0
newsuperior: ou=people,dc=example,dc=org
liumiaocn:openldap liumiao$
  • 將ldif檔案通過-f傳給ldapmodify
liumiaocn:openldap liumiao$ ldapmodify -a -H ldap://192.168.31.242:389 -D "cn=admin,dc=example,dc=org" -w admin -f modifybarbara.ldif 
modifying rdn of entry "uid=bjensen,ou=people,dc=example,dc=org"

liumiaocn:openldap liumiao$
  • 結果確認
liumiaocn:openldap liumiao$ ldapsearch -x -h 192.168.31.242 -p 389 -b "dc=example,dc=org" -D "cn=admin,dc=example,dc=org" -w admin
...省略
# bjensenuid, People, example.org
dn: uid=bjensenuid,ou=People,dc=example,dc=org
objectClass: inetOrgPerson
cn: Barbara Jensen
cn: Babs Jensen
sn: Jensen
mail: [email protected]
uid: bjensen
uid: bjensenuid
title: one of the world's most famous mythical manager
description: Barbara description
...省略
liumiaocn:openldap liumiao$

使用ldapdelete或者ldapmodify進行刪除

刪除Barbara的description欄位

  • 事前準備ldif檔案
liumiaocn:openldap liumiao$ cat modifybarbara.ldif 
dn: uid=bjensenuid,ou=people,dc=example,dc=org
changetype: modify
delete: description
liumiaocn:openldap liumiao$
  • 將ldif檔案通過-f傳給ldapmodify
liumiaocn:openldap liumiao$ ldapmodify -a -H ldap://192.168.31.242:389 -D "cn=admin,dc=example,dc=org" -w admin -f modifybarbara.ldif 
modifying entry "uid=bjensenuid,ou=people,dc=example,dc=org"

liumiaocn:openldap liumiao$
  • 結果確認
liumiaocn:openldap liumiao$ ldapsearch -x -h 192.168.31.242 -p 389 -b "dc=example,dc=org" -D "cn=admin,dc=example,dc=org" -w admin uid=bjensenuid
# extended LDIF
#
# LDAPv3
# base <dc=example,dc=org> with scope subtree
# filter: uid=bjensenuid
# requesting: ALL
#

# bjensenuid, People, example.org
dn: uid=bjensenuid,ou=People,dc=example,dc=org
objectClass: inetOrgPerson
cn: Barbara Jensen
cn: Babs Jensen
sn: Jensen
mail: [email protected]
uid: bjensen
uid: bjensenuid
title: one of the world's most famous mythical manager

# search result
search: 2
result: 0 Success

# numResponses: 2
# numEntries: 1
liumiaocn:openldap liumiao$

刪除Barbara

使用ldapdelete刪除entry只需指定dn即可,比如刪除前文中修改uid後的Barbara:

liumiaocn:openldap liumiao$ ldapdelete -x -h 192.168.31.242  -D "cn=admin,dc=example,dc=org" -w admin  "uid=bjensenuid,ou=People,dc=example,dc=org"
liumiaocn:openldap liumiao$ echo $?
0
liumiaocn:openldap liumiao$

刪除後結果確認, 使用此uid已經無法查詢出相關記錄了

liumiaocn:openldap liumiao$ ldapsearch -x -h 192.168.31.242 -p 389 -b "dc=example,dc=org" -D "cn=admin,dc=example,dc=org" -w admin uid=bjensenuid
# extended LDIF
#
# LDAPv3
# base <dc=example,dc=org> with scope subtree
# filter: uid=bjensenuid
# requesting: ALL
#

# search result
search: 2
result: 0 Success

# numResponses: 1
liumiaocn:openldap liumiao$

使用ldapmodify結合如下ldif也同樣可以實現刪除,這裡不再演示

dn: uid=bjensenuid,ou=people,dc=example,dc=org
changetype: delete

總結

使用ldapmodify和ldapdelete能夠實現常見的ldap資訊修改和刪除相關的需要。