日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

无法将该对象添加到ldap服务器_LDAP 基础知识

發布時間:2024/7/23 编程问答 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 无法将该对象添加到ldap服务器_LDAP 基础知识 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

LDAP 基礎知識

目錄

簡介

協議概覽

目錄結構

架構(Schema)

對象類(objectClass)

屬性(Attribute)

條目(Entry)

LDAP 中的數據

常用命令

啟動和關閉: start-ds / stop-ds

檢查 LDAP 服務器狀態: status

搜尋條目: ldapsearch

修改密碼: ldappasswordmodify

列出 backends: list-backends

導出 LDIF 文件: export-ldif

導入 LDIF 文件: import-ldif

管理賬戶: manage-account

性能

LDAP 瀏覽器

參考文獻

簡介

LDAP 是 Lightweight Directory Access Protocol 的縮寫,即 輕量目錄訪問協議。它基于 X.500 標準下更簡單的子集標準開發,因此有時 LDAP 也被稱之為 X.500-lite,即輕量級 x.500。

目錄服務在發展內部網絡和因特網應用方面扮演著重要角色,它可以通過互聯網分享用戶、系統、網絡、服務以及應用信息。

目錄服務可以提供任何系統化的數據集,并以等級結構(hiearchical structure)呈現結果。比如,公司的郵件目錄,或者包含地址和電話號碼的電話目錄。

LDAP 的一個常用功能是提供用戶名和密碼的集中存儲。不同的應用和服務可以用其來認證用戶。

協議概覽

客戶端發起 LDAP 會話連接到 LDAP 服務器。默認連接端口是 389(LDAP),或者 636(LDAPS)。客戶端發起操作請求到服務器,服務器返回響應結果。客戶端無需等待服務器響應即可發送下一個請求。服務器則會依次返回響應結果。

客戶端可以發送如下操作請求:

? StartTLS - 使用 LDAPv3 TLS 擴展來請求安全連接

? Bind - 認證并指定 LDAP 協議版本

? Search - 搜索目錄條目

? Compare - 測試命名條目是否包含指定的屬性值

? Add a new entry - 添加一個條目

? Delete an entry - 刪除一個條目

? Modify an entry - 修改一個條目

? Modify DN - 修改唯一識別名

? Extended Operation - 用于定義其他操作的通用操作

? Unbind - 關閉連接(注意,并非指 Bind 的逆向操作)

目錄結構

在 LDAP 里, 一切都是等級化的,或者稱之為層級化(hiearchical)。

一棵樹有樹干,樹枝和樹葉;樹葉長在樹枝上,樹枝依附于樹干。這就是一個簡單的層級結構。LDAP 的結構同一棵樹類似。假設 LDAP 里存儲的是公司的信息,那么可以把公司(company)本身理解為樹干,公司里面的各個部門,比如組(group),理解為樹干,把用戶(user)理解為樹葉。這樣的結構稱之為目錄信息樹(DIrectory Information Tree,DIT)。

我們在目錄信息樹里創建一個條目(entry)時,條目的信息存儲在屬性(attribute)里,屬性又被組合成對象類(objectClass),對象類進一步組成了架構(schema)。

下滿我們來解釋一下這幾個重要的概念。

架構(Schema)

? Schema 就是一個集合。所有的 objectClass 和 attribute 都定義在 Schema 里。

? 每一個 attribute 和 objectClass,包括其父級 attribute 和 objectClass 都必須定義在一個 Schema 里,且該 Schema 必須能夠被 LDAP 服務器識別。

? 定義在一個 Schema 里的 attribute 可以被另一個 Schema 里的 objectClass 使用。

對象類(objectClass)

? objectClass 是 attribute 的集合。

? objectClass 定義在 Shema 里。

? objectClass 可以是下面的類型:

– STRUCTURAL - 可以用于創建條目,即數據對象

– AUXILIARY - 可以添加到任何條目

– ABSTRACT - 不存在,抽象的。最常見的 ABSTRACT objectClass 是 top,表示每個 objectClass 層級的最高形式,用來結束一個層級。

? objectClass 可以以層級的形式呈現,這里它可以繼承來自父級的屬性。也就是說,objectClass 可以是一個層級的一部分,這種情況下,objectClass 必須和它的父級 objectClass 保持同樣的類型,即 STRUCTURAL 或者 AUXILIARY 類型。當父級是 top ABSTRACT 時無需遵守此規則,因為 top ABSTRACT 用結束任何層級結構。

? 一個 objectClass 可以有一個或多個父級的 objectClass。

? objectClass 是用來包含屬性的方式。

? objectClass 定義一個 attribute 是否是必須的(MUST)或者是可選的(MAY)。

? objectClass 遵守 ASN.1 注釋標準。

示例:下面是一個簡單的 objectClass 定義

objectclass ( 2.5.6.2 NAME 'country' DESC 'RFC2256: a country'SUP top STRUCTURALMUST cMAY ( searchGuide $ description ) )

解釋:

? objectClass 是關鍵字,指明這是一個 objectClass 的定義

? 2.5.6.2 NAME 'country' 定義 objectClass 的全局唯一識別名。它由兩部分組成:

– NAME 'country' 為 objectClass 定義一個好理解的名字 country

– 2.5.6.2 定義全局唯一識別名,這種形式稱之為 OID(ObjectIdentifier)。由哪個組織分配這個號碼并不重要,但是必須是全局唯一的。通常推薦向 IANA申請一個 PEN (Private Enterprise Number)作為 OID 使用。

? SUP 'top' 表示該 objectClass 有一個父級的 objectClass,也就是說它是一個層級的一部分。一個 objectClass 可以有一個或多個父級的 objectClass。

? STRUCTURAL 表示該 objectClass 包含屬性且可以形成目錄信息樹(DIT)里的條目(entry)。一個條目里只能包含一個 STRUCTURAL objectClass。objectClass 也可以是 AUXILIARY,這說明它包含 attributes,可以和任何 STRUCTURAL objectClass一起使用構成一個條目,但是不可以單獨構成一個條目。

? DESC 'a country' 為可選值,用來描述 objectClass。

? MUST c 表示 c 屬性是必須的。這里的屬性 c (c 或者 countryName)必須存在,否則 objectClass 實例無法創建成功。如果要指明多個屬性是必須的,寫法是 ( attr1 $ attr2 $ attrn)。

? MAY ( searchGuide $ description ) 表示 searchGuide 和 description 是可選的,即創建 objectClass 時這兩個屬性不需要一定存在。

屬性(Attribute)

? attribute 定義在 Schema里。

? 一個 attribute 可以包含在一個或多個 objectClass 里。

? 一個 attribute 可以在包含它的 objectClass 里出現一次(SINGLE-VALUE)或多次(MULTI-VALUE)。默認為多次。

? 一個 attribute 可以是一個層級的一部分,此時它繼承所有來自父級的屬性。比如,commonName(cn),givenName(gn) 和 surname(sn)都是 name 屬性的子類。

? attribute 的定義包含它的類型(SYNTAX),比如,通過 matchingRules 定義字符串(string)或者數字(number)比較時是否大小寫敏感。

? attribute 定義遵守 ASN.1 注釋標準

示例 1:下面是一個簡單的 attribute 定義

attributetype ( 2.5.4.3 NAME ( 'cn' 'commonName' ) SUP name )

解釋:

? attributetype 說明這是一個關于 attribute 的定義

? 2.5.4.3 NAME ('cn' 'commonName') 定義一個全局唯一識別名。該識別名由兩部分組成:

– NAME ('cn' 'commonName') 定義一個可理解的名字 commonName 或者短別名 cn。原則上,短別名的個數沒有限制。cn 排在第一位,它被稱為主要名稱(primary name)。這在為搜索優化做條目索引時非常重要。

– 2.5.4.3 定義全局唯一的 OID (ObjectIdentifier)。由哪個組織分配這個號碼并不重要,但是必須是全局唯一的。通常推薦向 IANA申請一個 PEN (Private Enterprise Number)作為 OID 使用。

示例 2:

attributetype ( 2.5.4.41 NAME 'name'EQUALITY caseIgnoreMatchSUBSTR caseIgnoreSubstringsMatchSYNTAX 1.3.6.1.4.1.1466.115.121.1.15{32768} )

解釋:

? attributetype 同上。

? 2.5.4.41 NAME 'name' 同上。

? EQUALITY caseIgnoreMatch 定義了該屬性在搜索過濾(serach filter)中的行為。比如,(name=andy)。這里指定該屬性在搜索中大小寫不敏感。這里的 caseIgnoreSubstringMatch 就是一個 matchingRule。

? SYNTAX 1.3.6.1.4.1.1466.115.121.1.15{32768} 是一個 OID,定義數據類型(data type)和要應用到數據的規則(data validation)。完整的定義可參考 RFC 2252 section 4.3.2。在本例中,OID 定義該屬性為目錄字符串(Directory String)類型(參考 RFC 2252 section 6.10)。 {32768} 定義字符串的最大長度,這是可選的。

條目(Entry)

? 目錄信息樹里 objectClass 的集合

? entry 有且只能有一個 STRUCTURAL objectClass。一個 STRUCTURAL objectClass 可能有一個同為 STRUCTURAL 類型的父級。

? entry 可以包含任意數目的 AUXILIARY objectClass。

? entry 可以有子 entry(child entry),父 entry(parent entry),同級 entry(sibling entry)

? entry 有三種類型:

– object entry - 最常見的一種,包含位于 objectClass 屬性(attributes)里的用戶數據

– alias entry - 帶有單一屬性 aliasedObjectName 的 objectClass 別名

– subentry - 用于存儲與父 entry 相關的管理或者操作數據

下圖是關于 objectClass, attribute 以及 entry 的示意圖:

LDAP 中的數據

LDAP 中的數據以條目(entry)的形式呈現,就像英文字典里單詞的條目。比如下面這個條目。它有很多屬性,例如:uid:bjensen,mail:bjensen@example.com。查找條目時,只需要指定一個或者多個屬性即可。

同時,該條目有一個唯一識別名稱:dn: uid=bjensen,ou=People,dc=example,dc=com。DN 是 Distinguished Name 的縮合。在目錄里沒有兩條相同的唯一識別名稱。

dn: uid=bjensen,ou=People,dc=example,dc=com uid: bjensen cn: Babs Jensen cn: Barbara Jensen facsimileTelephoneNumber: +1 408 555 1992 gidNumber: 1000 givenName: Barbara homeDirectory: /home/bjensen l: San Francisco mail: bjensen@example.com objectClass: inetOrgPerson objectClass: organizationalPerson objectClass: person objectClass: posixAccount objectClass: top ou: People ou: Product Development roomNumber: 0209 sn: Jensen telephoneNumber: +1 408 555 1862 uidNumber: 1076

常用命令

鑒于大多數的 LDAP 軟件大同小異,這里的內容就以OpenDS/OpenDJ 為例。

啟動和關閉: start-ds / stop-ds

? 語法: start-ds / stop-ds

? Windows:

– 打開命令窗口

– 瀏覽到到 bat

– 運行:

? 啟動: start-ds

? 關閉: stop-ds

? *nix:

– 打開命令窗口

– 瀏覽到到 /bin

– 運行:

? 啟動: ./start-ds

– 關閉: ./stop-ds

檢查 LDAP 服務器狀態: status

? 語法: status

? Windows:

– 打開命令窗口

– 瀏覽到到 bat

– 運行: status

? *nix:

– 打開命令窗口

– 瀏覽到到 /bin

? 運行: ./status

搜尋條目: ldapsearch

? 語法: ldapsearch ,其中: 為選項, 為過濾條件, 為顯示的屬性

? 示例: ldapsearch -p 389 -h 192.168.93.128 -D cn=Manager -w ts -b o=ptc uid=demo ,其中:

– :-p 389 -h 192.168.93.128 -D cn=Manager -w ts -b o=ptc

– : uid=demo

dn: uid=demo,ou=people,cn=AdministrativeLdap,cn=Windchill_11.2,o=ptc objectClass: organizationalPerson objectClass: top objectClass: person objectClass: inetOrgPerson uid: demo mail: demouser preferredLanguage: en-US description: demo sn: Demo cn: Demo, Usero: Demo OrganizationuserPassword: {SSHA}IDSc3KN4Q1b2YSGfCBQiU4CXgBySg+AQsWkpEA==

? 我們可以使用更復雜的條件,比如 "(|(uid=demo)(mail=demouser))": ldapsearch -p 389 -h 192.168.93.128 -D cn=Manager -w ts -b o=ptc "(|(uid=demo)(mail=demouser))"

修改密碼: ldappasswordmodify

? 語法: ldappasswordmodify

? 示例: ldappasswordmodify -p 389 -h 192.168.93.128 -D cn=Manager -w ts -a uid=demo,ou=people,cn=AdministrativeLdap,cn=Windchill_11.2,o=ptc -n tsts ,其中:

– : -p 389 -h 192.168.93.128 -D cn=Manager -w ts -a uid=demo,ou=people,cn=AdministrativeLdap,cn=Windchill_11.2,o=ptc -n tsts

? 如果修改成功,則會輸出: The LDAP password modify operation was successful

列出 backends: list-backends

? 語法: list-backends ,其中:

– -b, --baseDN {baseDN}

– -n, --backendID {backendName}

? 示例:list-backends

Backend ID : Base DN ---------------:------------------ adminRoot : cn=admin data ads-truststore : cn=ads-truststore backup : cn=backups config : cn=config monitor : cn=monitor schema : cn=schema tasks : cn=tasks userRoot : o=ptc

導出 LDIF 文件: export-ldif

? 語法: export-ldif

? 示例:

– 即刻導出文件: export-ldif --ldifFile /root/config.ldif --backendID config --hostName localhost --port 4444 --bindDN cn=Manager --bindPassword ts --trustAll

– 定時導出文件,比如,在 2017/03/09 11:25:00 導出文件: export-ldif --ldifFile "/root/20170309112500.ldif" --backendID userRoot --hostName "http://en2k8-wnc-x24.ptcts.com" --port 4444 --bindDN "cn=Manager" --bindPassword ts --trustAll --start "20170309112500"

– 定期導出文件,比如,每月的第一天,12:50 分導出文件: export-ldif --ldifFile "/root/50121.ldif" --backendID userRoot --hostName "http://en2k8-wnc-x24.ptcts.com" --port 4444 --bindDN "cn=Manager" --bindPassword ts --trustAll --recurringTask "50 12 1 * *"

導入 LDIF 文件: import-ldif

? 語法: import-ldif

? 示例: import-ldif --ldifFile "/root/export.ldif" --backendID "userRoot" --overwrite --hostName "http://en2k8-wnc-x24.ptcts.com" --port "4444" --bindDN "cn=Manager" "--bindPassword" ts --trustAll

管理賬戶: manage-account

? 顯示賬戶的信息: manage-account -D "cn=manager" -w ts get-all --targetDN "uid=wcadmin,ou=people,cn=AdministrativeLdap,cn=Windchill_11.2,o=ptc"

Password Policy DN: cn=Default Password Policy,cn=Password Policies,cn=config Account Is Disabled: false Account Expiration Time: Seconds Until Account Expiration: Password Changed Time: 20190607070745.945Z Password Expiration Warned Time: Seconds Until Password Expiration: Seconds Until Password Expiration Warning: Authentication Failure Times: Seconds Until Authentication Failure Unlock: Remaining Authentication Failure Count: 5 Last Login Time: Seconds Until Idle Account Lockout: Password Is Reset: false Seconds Until Password Reset Lockout: Grace Login Use Times: Remaining Grace Login Count: 0 Password Changed by Required Time: Seconds Until Required Change Time: Password History:

? 顯示用戶狀態信息: manage-account -D "cn=manager" -w ts get-account-is-disabled --targetDN "uid=wcadmin,ou=people,cn=AdministrativeLdap,cn=Windchill_11.2,o=ptc"

Account Is Disabled: false

? 禁用/啟用賬戶

– 禁用賬戶:manage-account -h localhost -p 4444 -D "cn=Manager" -w ts -X set-account-is-disabled --operationValue true --targetDN "uid=kongwusun,ou=people,cn=AdministrativeLdap,cn=Windchill_11.2,o=ptc"

– 啟用賬戶:manage-account -h localhost -p 4444 -D "cn=Manager" -w ts clear-account-is-disabled --targetDN "uid=kongwushun,ou=people,cn=AdministrativeLdap,cn=Windchill_10.0,o=ptc"

性能

可以快速查看 /logs:

BIND RES conn=5 op=2 msgID=23 result=0 authDN="uid=wcadmin,ou=people,cn=AdministrativeLdap,cn=Windchill_11.2,o=ptc" etime=0

其中,etime 的值默認以毫秒(milliseconds)為單位,表示服務器處理請求的時間。過大的 etime 通常暗示服務器存在性能問題。

如果需要調整 LDAP 的 JVM運行參數,可以編輯 /config/java.properties, 然后使用 dsjavaproperties 命令使設置生效。具體示例可參考這里。

其他需要考慮的性能調優因素可以參考官方文檔。

LDAP 瀏覽器

LDAP 瀏覽器可以連接到 LDAP 服務器,讓我們可以方便的查看、搜索、編輯 LDAP 內容。JXplorer 就是這樣一款免費的開源瀏覽器。當然,有很多其他的 LDAP 瀏覽器,大家可以自行下載嘗試。

參考文獻

1.

LDAP_百度百科?baike.baidu.com

2.

https://en.wikipedia.org/wiki/LightweightDirectoryAccess_Protocol?en.wikipedia.org

3.

LDAP for Rocket Scientists?www.zytrax.com

4.

OpenDJ 3.5 > Administration Guide?backstage.forgerock.com 創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎

總結

以上是生活随笔為你收集整理的无法将该对象添加到ldap服务器_LDAP 基础知识的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。