LDAP概念

LDAP是輕量目錄訪問協(xié)議,英文全稱是Lightweight Directory Access Protocol,一般都簡稱為LDAP.

現(xiàn)在市場上有關LDAP的產(chǎn)品已有很多,各大軟件公司都在他們的產(chǎn)品中集成了LDAP服務,如Microsoft的ActiveDirectory、Lotus的Domino Directory、IBM的WebSphere中也集成了LDAP服務.LDAP的開源實現(xiàn)是OpenLDAP,它比商業(yè)產(chǎn)品一點也不差,而且源碼開放.

OpenLDAP是最常用的目錄服務之一,它是一個由開源社區(qū)及志愿者開發(fā)和管理的一個開源項目,提供了目錄服務的所有功能,包括目錄搜索、身份認證、安全通道、過濾器等等.大多數(shù)的Linux發(fā)行版里面都帶有OpenLDAP的安裝包.OpenLDAP服務默認使用非加密的TCP/IP協(xié)議來接收服務的請求,并將查詢結(jié)果傳回到客戶端.由于大多數(shù)目錄服務都是用于系統(tǒng)的安全認證部分比如:用戶登錄和身份驗證,所以它也支持使用基于 SSL/TLS 的加密協(xié)議來保證數(shù)據(jù)傳送的保密性和完整性.OpenLDAP是使用OpenSSL來實現(xiàn)SSL/TLS加密通信的.

LDAP的信息模型是建立在”條目”(entries)的基礎上.一個條目是一些屬性的集合,并且具有一個全局唯一的”可區(qū)分名稱”DN,一個條目可以通過DN來引用.每一個條目的屬性具有一個類型和一個或者多個值.類型通常是容易記憶的名稱,比如”cn”是通用名稱(common name),或者”mail”是電子郵件地址.條目的值的語法取決于屬性類型.比如,cn屬性可能具有一個值”Babs Jensen” .一個mail屬性可能包含”bbs@example.com” .一個jpegphoto屬性可能包含一幅JPEG(二進制)格式的圖片.

LDAP常用關鍵字列表 LDAP通過屬性objectClass來控制哪一個屬性必須出現(xiàn)或允許出現(xiàn)在一個條目中,它的值決定了該條目必須遵守的模式規(guī)則.

關鍵字 英文全稱 含義
dc Domain Component 域名的部分,其格式是將完整的域名分成幾部分,如域名為example.com變成dc=example,dc=com
uid User Id 用戶ID,如“tom”
ou Organization Unit 組織單位,類似于Linux文件系統(tǒng)中的子目錄,它是一個容器對象,組織單位可以包含其他各種對象(包括其他組織單元),如“market”
cn Common Name 公共名稱,如“Thomas Johansson”
sn Surname 姓,如“Johansson”
dn Distinguished Name 惟一辨別名,類似于Linux文件系統(tǒng)中的絕對路徑,每個對象都有一個惟一的名稱, 如“uid= tom,ou=market,dc=example,dc=com”,在一個目錄樹中DN總是惟一的
rdn Relative dn 相對辨別名,類似于文件系統(tǒng)中的相對路徑,它是與目錄樹結(jié)構(gòu)無關的部分,如“uid=tom”或“cn= Thomas Johansson”
c Country 國家,如“CN”或“US”等.
o Organization 組織名,如“Example,Inc.”

Entry

條目,也叫記錄項,是LDAP中最基本的顆粒,就像字典中的詞條,或者是數(shù)據(jù)庫中的記錄.通常對LDAP的添加、刪除、更改、檢索都是以條目為基本對象的.

  • dn:每一個條目都有一個唯一的標識名(distinguished Name,DN),如上述中一個 dn:”uid=mac,ou=People,dc=example,dc=cn”.通過DN的層次型語法結(jié)構(gòu),可以方便地表示出條目在LDAP樹中的位置,通常用于檢索.
  • rdn:一般指dn逗號最左邊的部分,如cn=baby.它與RootDN不同,RootDN通常與RootPW同時出現(xiàn),特指管理LDAP中信息的最高權限用戶.
  • Base DN:LDAP目錄樹的最頂部就是根,也就是所謂的“Base DN”,如”dc=example,dc=com”.

schema

對象類(ObjectClass)、屬性類型(AttributeType)、語法(Syntax)分別約定了條目、屬性、值,他們之間的關系如下圖所示.所以這些構(gòu)成了模式(Schema)——對象類的集合.條目數(shù)據(jù)在導入時通常需要接受模式檢查,它確保了目錄中所有的條目數(shù)據(jù)結(jié)構(gòu)都是一致的.

schema(一般在/etc/ldap/schema/目錄)在導入時要注意前后順序.

對于LDAP目錄中保存的信息,可以使用LDIF(LDAP Interchange Format)格式來保存.這是一種標準文本文件格式,使用這種格式保存得的LDAP服務器數(shù)據(jù)庫中的數(shù)據(jù)可方便讀取和修改,這也是其他大多數(shù)服務配置文件所采取的格式.

Attribute

屬性(Attribute)類似于程序設計中的變量,可以被賦值.在OpenLDAP中聲明了許多常用的Attribute(用戶也可自己定義Attribute).

每個條目都可以有很多屬性(Attribute),比如常見的人都有姓名、地址、電話等屬性.每個屬性都有名稱及對應的值,屬性值可以有單個、多個,比如你有多個郵箱.

屬性不是隨便定義的,需要符合一定的規(guī)則,而這個規(guī)則可以通過schema制定.比如,如果一個entry沒有包含在 inetorgperson 這個 schema 中的objectClass: inetOrgPerson,那么就不能為它指定employeeNumber屬性,因為employeeNumber是在inetOrgPerson中定義的.

LDAP為人員組織機構(gòu)中常見的對象都設計了屬性(比如commonName,surname).下面有一些常用的別名:

屬性 別名 語法 描述 值(舉例)
commonName cn Directory String 姓名 sean
surname sn Directory String Chow
organizationalUnitName ou Directory String 單位(部門)名稱 IT
organization o Directory String 組織(公司)名稱 example
telephoneNumber Telephone Number 電話號碼 110
objectClass 內(nèi)置熟悉 top

常見的Attribute含義如下:

  • c:國家.
  • cn:common name,指一個對象的名字.如果指人,需要使用其全名.
  • dc:domain Component,常用來指一個域名的一部分.
  • givenName:指一個人的名字,不能用來指姓.
  • l:指一個地名,如一個城市或者其他地理區(qū)域的名字.
  • mail:電子信箱地址.
  • o:organizationName,指一個組織的名字.
  • ou:organizationalUnitName,指一個組織單元的名字.
  • sn:surname,指一個人的姓.
  • telephoneNumber:電話號碼,應該帶有所在的國家的代碼.
  • uid:userid,通常指某個用戶的登錄名,與Linux系統(tǒng)中用戶的uid不同.

ldap命令的使用

增加:ldapadd

選項:
-x   進行簡單認證
-D   用來綁定服務器的DN
-h   目錄服務的地址
-w   綁定DN的密碼
-f   使用ldif文件進行條目添加的文件

exp:
將test.ldif中的數(shù)據(jù)導入ldap
# ldapadd -x -D "cn=root,dc=example,dc=com" -w password -f /root/test.ldif
COPY

刪除:ldapdelete

選項:
-c         連續(xù)運行模式 (運行出錯時跳過繼續(xù)執(zhí)行)
-f file    指定文件
-M         啟用管理DSA IT控制
-P version 協(xié)議版本(default: 3)
-r         遞歸刪除

exp:
# ldapdelete -x -D "cn=Manager,dc=example,dc=com" -w password "uid=test1,ou=People,dc=test,dc=com"
# ldapdelete -x -D 'cn=root,dc=it,dc=com' -w password 'uid=zyx,dc=it,dc=com'
COPY

修改:ldapmodify

選項
-a 添加新的條目.缺省的是修改存在的條目.
-C 自動追蹤引用.
-c 出錯后繼續(xù)執(zhí)行程序并不中止.缺省情況下出錯的立即停止.
-D binddn 指定搜索的用戶名(一般為一dn 值).
-e 設置客戶端證書文件,例: -e cert/client.crt
-E 設置客戶端證書私鑰文件,例: -E cert/client.key
-f file 從文件內(nèi)讀取條目的修改信息而不是從標準輸入讀取.
-H ldapuri 指定連接到服務器uri.常見格式為ldap://hostname:port
-h ldaphost 指定要連接的主機的名稱/ip 地址.它和-p 一起使用.
-p ldapport 指定要連接目錄服務器的端口號.它和-h 一起使用.
-M[M] 打開manage DSA IT 控制. -MM 把該控制設置為重要的.
-n 用于調(diào)試到服務器的通訊.但并不實際執(zhí)行搜索.服務器關閉時,返回錯誤;服務器打開時,常和-v 參數(shù)一起測試到服務器是否是一條通路.
-v 運行在詳細模塊.在標準輸出中打出一些比較詳細的信息.比如:連接到服務器的ip 地址和端口號等.
-V 啟用證書認證功能,目錄服務器使用客戶端證書進行身份驗證,必須與-ZZ 強制啟用TLS 方式配合使用,并且匿名綁定到目錄服務器.
-W 指定了該參數(shù),系統(tǒng)將彈出一提示入用戶的密碼.它和-w 參數(shù)相對使用.
-w bindpasswd 直接指定用戶的密碼. 它和-W 參數(shù)相對使用.
-x 使用簡單認證.
-Z[Z] 使用StartTLS 擴展操作.如果使用-ZZ,命令強制使用StartTLS 握手成功.

exp:
# ldapmodify -x -D "cn=root,dc=it,dc=com" -W -f modify.ldif
# 交互式修改
# ldapmodify -x -D "cn=root,dc=it,dc=com" -W secret
COPY

查詢:ldapsearch

選項
-x   進行簡單認證
-D   用來綁定服務器的DN
-w   綁定DN的密碼
-b   指定要查詢的根節(jié)點
-H   制定要查詢的服務器

exp:
# ldapsearch -x -D "cn=root,dc=kevin,dc=com" -w secret -b "dc=kevin,dc=com"

# 使用簡單認證,用 "cn=root,dc=kevin,dc=com" 進行綁定,要查詢的根是 "dc=kevin,dc=com".這樣會把綁定的用戶能訪問"dc=kevin,dc=com"下的所有數(shù)據(jù)顯示出來.

# ldapsearch -x -W -D "cn=administrator,cn=users,dc=osdn,dc=cn" -b "cn=administrator,cn=users,dc=osdn,dc=cn" -h troy.osdn.zzti.edu.cn
# ldapsearch -b "dc=canon-is,dc=jp" -H ldaps://192.168.10.192:389
COPY

設置密碼:ldappasswd

選項
-x   進行簡單認證
-D   用來綁定服務器的DN
-w   綁定DN的密碼
-S   提示的輸入密碼
-s pass 把密碼設置為pass
-a pass 設置old passwd為pass
-A   提示的設置old passwd
-H   是指要綁定的服務器
-I   使用sasl會話方式

exp:
# ldappasswd -x -D 'cm=root,dc=it,dc=com' -w secret 'uid=zyx,dc=it,dc=com' -S
COPY

數(shù)據(jù)導出: slapcat

選項
-l   表示導出為LDIF文件格式

exp:
# slapcat -l export.ldif

參考

https://lework.github.io/2019/07/18/ldap/

?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

  • 目錄服務就是按照樹狀存儲信息的模式。目錄服務的數(shù)據(jù)類型主要是字符型, 而不是關系數(shù)據(jù)庫提供的整數(shù)、浮點數(shù)、日期、貨...
    黑色I幽默閱讀 4,434評論 0 4
  • 一、目錄服務目錄是一個為查詢、瀏覽和搜索而優(yōu)化的專業(yè)分布式數(shù)據(jù)庫,它呈樹狀結(jié)構(gòu)組織數(shù)據(jù),就好象Linux/Unix...
    我只是一個小白木木閱讀 7,597評論 0 4
  • 1. 基礎知識鋪墊 1.1 什么是目錄? (1) 目錄是一類為了瀏覽和搜索數(shù)據(jù)二十幾的特殊的數(shù)據(jù)庫,例如:最知名的...
    frederickhou閱讀 16,495評論 2 2
  • 一、什么是LDAP? (一)在介紹什么是LDAP之前,我們先來復習一個東西:“什么是目錄服務?” 1. 目錄服務是...
    pigness閱讀 4,494評論 0 7
  • DN 是唯一的 389 端口為明文傳輸端口 不要單節(jié)點,預防事故發(fā)生。 ldap的功能 實現(xiàn)負載keppalive...
    我只是一個小白木木閱讀 1,815評論 0 1

友情鏈接更多精彩內(nèi)容