OpenLDAP的基本概念
生活随笔
收集整理的這篇文章主要介紹了
OpenLDAP的基本概念
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
LDAP
- LDAP只是專門用于查找的一種數據庫。 讀取速度快,但支持寫入,但速度相對較慢。 這就是為什么LDAP通常用于存儲集中式用戶帳戶的原因。
- 在LDAP中,數據是存儲的節點(很像關系DB中的記錄)。 每個節點都有一些命名屬性。 例如,代表用戶的節點可能具有以下屬性(cn代表“通用名”,而sn代表“姓”):
- 就像數據庫中的記錄或Java中的對象一樣,節點可以具有的屬性是固定的。 這由名為objectClass的屬性指定。 例如,有一個名為“ person”的對象類,它說它可以具有cn,sn和email,然后一個屬于該“ person”類的節點可以具有以下屬性:
- 一個節點可能屬于多個對象類。 例如,可能有一個名為“ securityObject”的對象類,它說它可以具有一個密碼屬性,然后,如果需要將密碼放入節點中,則可以這樣做:
- 如何使用節點表示部門或公司? 這是通過“ organizationalUnit” objectClass(“ ou”代表“ organizational unit”)完成的:
- 如果通通先生在那個財務部門,該如何表示這種關系? 與相對的數據庫用外鍵表示這種關系不同,在LDAP中,一個節點可以放在另一個節點下作為子節點。 例如,讓我們將人員節點作為財務部門節點的子節點,而財務部門節點作為公司節點的子節點:
- 這種父子關系由稱為“ dn”(專有名稱,就像文件的完整路徑)的屬性表示。 也就是說,您可以從節點的dn確定父節點的dn。
- 通常,您將cn添加到父節點的dn中以獲得節點本身的dn。 但是,您不必使用cn。 您可以隨意使用任何屬性來實現該目的(稱為“相對dn”),只要該屬性在兄弟姐妹之間是唯一的即可。 例如,如果沒有兩個人的cn值相同,則cn很好。 這樣,在給定dn的情況下,定位節點非常快。
- 創建目錄的頂級節點時,需要指定其dn。 通常,您將使用公司的DNS域名(假設它是foo.com):
- 其中dc表示“域組件”,只是域名中的標簽。
- 一些對象類(例如person或organizationalUnit)被設計為用作節點的“主要”對象類,而其他一些對象類(例如securityObject)(正式稱為“ simpleSecurityObject”)被設計為“輔助”對象,而被添加到節點。 前者被稱為“結構對象類”,而后者被稱為“輔助對象類”。
- 對于每個節點,它必須只有一個結構對象類 。 它可以具有零個或多個輔助對象類。
架構圖
- 屬性和對象類是定義的,而不是硬編碼的。 對于Debian上的OpenLDAP,可以在/ etc / ldap / schema中找到模式。 例如,您可以在core.schema中找到以下對象類:
- 它說它必須具有'sn'和'cn'屬性,并可能具有'userPassword'屬性等。它說其超類是'top',它是代表最頂層對象類的內置對象類。 。 它還說“人”對象類是結構類。
- 您可以在此處找到最常用的對象類和屬性。
使用LDAP進行身份驗證
- 一種簡單的方法是根據用戶名檢索節點,獲取密碼并將其與用戶輸入的密碼進行比較。
- 但是,這允許通過服務通過網絡檢索任何用戶的敏感信息(密碼)。 因此,還有另一種方法:將dn和密碼發送到LDAP服務,然后讓它執行檢查。 這稱為對該dn的“綁定”。 本質上,您是作為特定節點登錄的。
- 以上兩種方法都將以明文方式傳輸密碼。 因此,在訪問LDAP服務時(使用ldaps://),您可能應該使用TLS。
- 上述方法是其他服務(例如郵件,Samba或Apache)最常用于檢查用戶密碼的方法。
- 使用OpenLDAP執行管理時,您可以使用上面的“綁定”方法以代表管理員的節點身份登錄。 這稱為“簡單身份驗證”:
- 但是,有時將身份驗證為不是管理員身份而不是目錄中的節點更為方便。 例如,如果您的站點使用Kerberos,則可以使用OpenLDAP執行單點登錄。 這通過其SASL支持來完成。 SASL反過來支持許多機制,例如PLAIN(純文本),GSSAPI(Kerberos),EXTERNAL(使用帶有TLS的客戶端證書之類的傳輸)。 當SASL進行身份驗證時,OpenLDAP將組成一個dn來代表您的身份。 例如,對于Kerberos域foo.com中的用戶Kent,偽造的dn將為uid = kent,cn = foo.com,cn = gssapi,cn = auth。 這是授予權限所必需的。
在Debian上設置并運行OpenLDAP
- 在Debian上設置OpenLDAP時,您需要重新配置軟件包,以便它為您以及代表管理員的節點創建初始目錄:
- 然后,要檢查其是否正常運行,可以使用SASL EXTERNAL機制,并使用Unix域套接字(ldapi:///)作為root用戶連接到它:
詢問
- 就像關系數據庫一樣,您可以執行查詢來檢索節點及其屬性。 例如,您可以嘗試在dn為dc = foo,dc = com(搜索的“基礎”)的節點下查找所有帶有cn = Kent Tong(“過濾器”)的節點:
- 您可以嘗試查找其objectClass為'person'且cn包含單詞'Kent'的所有節點:
- 您可能會告訴它僅檢索某些屬性:
更新數據
- 要添加新節點,請確保已存在父節點,然后在文本文件(稱為LDIF文件)中指定dn和其他屬性,并將其標記為“添加”請求:
- 然后將LDIF文件輸入ldapmodify:
- 要修改(添加,更改或刪除)現有節點的屬性,請首先指定該節點,然后列出每個屬性更改,并用包含單個連字符的行將它們分開。 最后,以空行結束節點:
- 刪除節點:
參考:來自JCG合作伙伴 Kent Tong 的OpenLDAP基本概念,來自Kent Tong在信息技術博客上的個人想法 。
翻譯自: https://www.javacodegeeks.com/2013/03/basic-concepts-of-openldap.html
總結
以上是生活随笔為你收集整理的OpenLDAP的基本概念的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: JavaScript基础语法(一)
- 下一篇: gdal影像镶嵌并裁剪