官术网_书友最值得收藏!

第1章 OpenLDAP介紹及工作原理詳解

運(yùn)維案例

系統(tǒng)運(yùn)維人員入職新公司后,運(yùn)維經(jīng)理將維護(hù)的服務(wù)器列表、賬號(hào)、密碼、遠(yuǎn)程管理卡等相關(guān)信息進(jìn)行交付。運(yùn)維人員通過地址、用戶名以及密碼了解設(shè)備應(yīng)用環(huán)境配置信息,此時(shí)通過機(jī)器列表、賬號(hào)和密碼嘗試登錄系統(tǒng),發(fā)現(xiàn)大部分機(jī)器無法登錄。

登錄過程中發(fā)現(xiàn)大量以root超級(jí)用戶進(jìn)行登錄,無論是測(cè)試環(huán)境還是生產(chǎn)環(huán)境,為了保障系統(tǒng)、應(yīng)用服務(wù)安全,都不建議以root身份登錄系統(tǒng)進(jìn)行操作。

通過服務(wù)器列表發(fā)現(xiàn)大部分密碼設(shè)置過于簡(jiǎn)單,極其容易被攻擊者所破解。同時(shí)用戶權(quán)限沒有得到靈活控制,大部分普通用戶具有root權(quán)限,這在維護(hù)中增加了系統(tǒng)潛在操作的風(fēng)險(xiǎn)。

當(dāng)系統(tǒng)、應(yīng)用出現(xiàn)異常時(shí),通過服務(wù)器列表提供的地址、賬號(hào)和密碼無法登錄系統(tǒng),只好通過離職人員獲取賬號(hào)和密碼進(jìn)行故障處理,處理時(shí)效大大延遲,且賬號(hào)安全無法得到保障。

從以上案例解讀,讀者不難發(fā)現(xiàn)賬號(hào)管理存在如下問題:

● 系統(tǒng)賬號(hào)身份無法集中管理;

● 系統(tǒng)賬號(hào)權(quán)限無法集中控制;

● 系統(tǒng)賬號(hào)授權(quán)無法集中管理;

● 系統(tǒng)賬號(hào)審計(jì)無法集中管理;

● 系統(tǒng)賬號(hào)密碼策略無法集中控制。

為了規(guī)避以上問題存在的風(fēng)險(xiǎn)點(diǎn)及維護(hù)管理帶來的異常,一般可以通過商業(yè)化軟件以及開源軟件實(shí)現(xiàn)賬號(hào)集中管理。由于商業(yè)化軟件價(jià)格昂貴,此時(shí)通過開源集中賬號(hào)管理(OpenLDAP)軟件是不錯(cuò)的選擇,且它功能強(qiáng)大、靈活性強(qiáng)、架構(gòu)成熟,其中的權(quán)限控制、訪問控制、主機(jī)權(quán)限策略、密碼審計(jì)、同步機(jī)制以及通過第三方開源工具實(shí)現(xiàn)負(fù)載高可用等,提供一整套安全的賬號(hào)統(tǒng)一管理機(jī)制。

用戶通過集中認(rèn)證管理平臺(tái)實(shí)現(xiàn)身份、權(quán)限的驗(yàn)證,獲得服務(wù)器授權(quán)之后登錄系統(tǒng)及應(yīng)用管理平臺(tái),此時(shí)用戶可自我維護(hù)賬號(hào)、密碼,且無須管理員干涉密碼修改,實(shí)現(xiàn)用戶賬號(hào)自身安全性。用戶通過驗(yàn)證服務(wù)器獲取主機(jī)登錄策略,獲取OpenLDAP服務(wù)器的授權(quán),從而實(shí)現(xiàn)用戶登錄主機(jī)的靈活控制。

本書通過三篇一步步帶領(lǐng)讀者了解OpenLDAP及其工作原理和實(shí)現(xiàn)方式、安裝配置、客戶端部署、命令GUI管理、加密算法、高級(jí)功能模塊實(shí)現(xiàn)以及企業(yè)應(yīng)用案例等模塊。本章介紹什么是OpenLDAP、它的工作原理以及相關(guān)術(shù)語。

1.1 關(guān)于OpenLDAP

1.1.1 OpenLDAP是什么

OpenLDAP是一款輕量級(jí)目錄訪問協(xié)議(Lightweight Directory Access Protocol, LDAP),屬于開源集中賬號(hào)管理架構(gòu)的實(shí)現(xiàn),且支持眾多系統(tǒng)版本,被廣大互聯(lián)網(wǎng)公司所采用。

LDAP具有兩個(gè)國家標(biāo)準(zhǔn),分別是X.500和LDAP。OpenLDAP是基于X.500標(biāo)準(zhǔn)的,而且去除了X.500復(fù)雜的功能并且可以根據(jù)自我需求定制額外擴(kuò)展功能,但與X.500也有不同之處,例如OpenLDAP支持TCP/IP協(xié)議等,目前TCP/IP是Internet上訪問互聯(lián)網(wǎng)的協(xié)議。

OpenLDAP則直接運(yùn)行在更簡(jiǎn)單和更通用的TCP/IP或其他可靠的傳輸協(xié)議層上,避免了在OSI會(huì)話層和表示層的開銷,使連接的建立和包的處理更簡(jiǎn)單、更快,對(duì)于互聯(lián)網(wǎng)和企業(yè)網(wǎng)應(yīng)用更理想。LDAP提供并實(shí)現(xiàn)目錄服務(wù)的信息服務(wù),目錄服務(wù)是一種特殊的數(shù)據(jù)庫系統(tǒng),對(duì)于數(shù)據(jù)的讀取、瀏覽、搜索有很好的效果。目錄服務(wù)一般用來包含基于屬性的描述性信息并支持精細(xì)復(fù)雜的過濾功能,但OpenLDAP目錄服務(wù)不支持通用數(shù)據(jù)庫的大量更新操作所需要的復(fù)雜的事務(wù)管理或回滾策略等。

OpenLDAP默認(rèn)以Berkeley DB作為后端數(shù)據(jù)庫,Berkeley DB數(shù)據(jù)庫主要以散列的數(shù)據(jù)類型進(jìn)行數(shù)據(jù)存儲(chǔ),如以鍵值對(duì)的方式進(jìn)行存儲(chǔ)。Berkeley DB是一類特殊的數(shù)據(jù)庫,主要用于搜索、瀏覽、更新查詢操作,一般對(duì)于一次寫入數(shù)據(jù)、多次查詢和搜索有很好的效果。Berkeley DB數(shù)據(jù)庫是面向查詢進(jìn)行優(yōu)化,面向讀取進(jìn)行優(yōu)化的數(shù)據(jù)庫。Berkeley DB不支持事務(wù)型數(shù)據(jù)庫(MySQL、MariDB、Oracle等)所支持的高并發(fā)的吞吐量以及復(fù)雜的事務(wù)操作。

OpenLDAP目錄中的信息是按照樹形結(jié)構(gòu)進(jìn)行組織的,具體信息存儲(chǔ)在條目(entry)中,條目可以看成關(guān)系數(shù)據(jù)庫中的表記錄,條目是具有區(qū)別名(Distinguished Name, DN)的屬性(attribute),DN是用來引用條目,DN相當(dāng)于關(guān)系數(shù)據(jù)庫(Oracle/MySQL)中的主鍵(primary key),是唯一的。屬性由類型(type)和一個(gè)或者多個(gè)值(value)組成,相當(dāng)于關(guān)系數(shù)據(jù)庫中字段的概念。

1.1.2 為什么選擇OpenLDAP產(chǎn)品

我們知道,賬號(hào)是登錄系統(tǒng)的唯一入口。要登錄系統(tǒng),首先系統(tǒng)要存在登錄所使用的賬號(hào)(/etc/passwd)及密碼信息(/etc/shadow),然后經(jīng)過系統(tǒng)查找順序(/etc/nsswith.conf)及認(rèn)證模塊(/etc/pam.d/*)驗(yàn)證,得到授權(quán)后方可登錄系統(tǒng)。如果多個(gè)用戶登錄系統(tǒng),就需要在每個(gè)系統(tǒng)上創(chuàng)建用戶名和密碼;否則,就無法登錄系統(tǒng)。

對(duì)于賬號(hào)管理人員而言,維護(hù)10臺(tái)、100臺(tái)機(jī)器的賬號(hào),或許勉強(qiáng)可以維護(hù)、管理。如果機(jī)器數(shù)量達(dá)到1000以上時(shí),對(duì)于賬號(hào)的創(chuàng)建、回收、權(quán)限的分配、密碼策略、賬號(hào)安全審計(jì)等一系列操作,賬號(hào)管理人員就心有余而力不足了。此時(shí)OpenLDAP賬號(hào)集中管理軟件就應(yīng)用而生,它可以實(shí)現(xiàn)賬號(hào)集中維護(hù)、管理,只需要將被管理的機(jī)器加入到服務(wù)器端即可,此后所有與賬號(hào)相關(guān)的策略均在服務(wù)端實(shí)現(xiàn),從而解決了運(yùn)維案例所產(chǎn)生的眾多管理問題。

關(guān)于賬號(hào)的添加、刪除、修改、權(quán)限的賦予等一系列操作只需要在服務(wù)端操作即可,無須在客戶端機(jī)器進(jìn)行單獨(dú)操作。客戶端賬號(hào)及密碼均通過OpenLDAP服務(wù)器進(jìn)行驗(yàn)證,從而實(shí)現(xiàn)賬號(hào)集中認(rèn)證管理,此時(shí)賬號(hào)管理員只須維護(hù)OpenLDAP服務(wù)器條目即可。

OpenLDAP屬于開源軟件,且OpenLDAP支持LDAP最新標(biāo)準(zhǔn)、更多模塊擴(kuò)展功能、自定義schema滿足需求、權(quán)限管理、密碼策略及審計(jì)管理、主機(jī)控制策略管理、第三方應(yīng)用平臺(tái)管理以及與第三方開源軟件結(jié)合實(shí)現(xiàn)高可用負(fù)載均衡平臺(tái)等諸多功能,這也是商業(yè)化管理軟件無可比擬的。所以關(guān)于賬號(hào)的管理OpenLDAP是企業(yè)唯一的選擇。目前各大著名公司都在使用OpenLDAP實(shí)現(xiàn)賬號(hào)的集中管理,如PPTv、金山、Google、Facebook等,這也是選擇OpenLDAP實(shí)現(xiàn)賬號(hào)統(tǒng)一管理的原因之一。

1.1.3 OpenLDAP目錄服務(wù)優(yōu)點(diǎn)

OpenLDAP目錄服務(wù)有以下10個(gè)優(yōu)點(diǎn)。

● OpenLDAP是一個(gè)跨平臺(tái)的標(biāo)準(zhǔn)互聯(lián)網(wǎng)協(xié)議,它基于X.500標(biāo)準(zhǔn)協(xié)議。

● OpenLDAP提供靜態(tài)數(shù)據(jù)查詢搜索,不需要像在關(guān)系數(shù)據(jù)中那樣通過SQL語句維護(hù)數(shù)據(jù)庫信息。

● OpenLDAP基于推和拉的機(jī)制實(shí)現(xiàn)節(jié)點(diǎn)間數(shù)據(jù)同步,簡(jiǎn)稱復(fù)制(replication)并提供基于TLS、SASL的安全認(rèn)證機(jī)制,實(shí)現(xiàn)數(shù)據(jù)加密傳輸以及Kerberos密碼驗(yàn)證功能。

● OpenLDAP可以基于第三方開源軟件實(shí)現(xiàn)負(fù)載(LVS、HAProxy)及高可用性解決方案,24小時(shí)提供驗(yàn)證服務(wù),如Headbeat、Corosync、Keepalived等。

● OpenLDAP數(shù)據(jù)元素使用簡(jiǎn)單的文本字符串(簡(jiǎn)稱LDIF文件)而非一些特殊字符,便于維護(hù)管理目錄樹條目。

● OpenLDAP可以實(shí)現(xiàn)用戶的集中認(rèn)證管理,所有關(guān)于賬號(hào)的變更,只須在OpenLDAP服務(wù)器端直接操作,無須到每臺(tái)客戶端進(jìn)行操作,影響范圍為全局。

● OpenLDAP默認(rèn)使用協(xié)議簡(jiǎn)單如支持TCP/ZP協(xié)議傳輸條目數(shù)據(jù),通過使用查找操作實(shí)現(xiàn)對(duì)目錄樹條目信息的讀寫操作,同樣可以通過加密的方式進(jìn)行獲取目錄樹條目信息。

● OpenLDAP產(chǎn)品應(yīng)用于各大應(yīng)用平臺(tái)(Nginx、HTTP、vsftpd、Samba、SVN、Postfix、OpenStack、Hadoop等)、服務(wù)器(HP、IBM、Dell等)以及存儲(chǔ)(EMC、NetApp等)控制臺(tái),負(fù)責(zé)管理賬號(hào)驗(yàn)證功能,實(shí)現(xiàn)賬號(hào)統(tǒng)一管理。

● OpenLDAP實(shí)現(xiàn)具有費(fèi)用低、配置簡(jiǎn)單、功能強(qiáng)大、管理容易及開源的特點(diǎn)。

● OpenLDAP通過ACL(Access Control List)靈活控制用戶訪問數(shù)據(jù)的權(quán)限,從而保證數(shù)據(jù)的安全性。

1.1.4 OpenLDAP功能

在LDAP的功能模型中定義了一系列利用LDAP協(xié)議的操作,主要包含以下4部分。

● 查詢操作(ldapsearch):允許查詢目錄并取得條目,其查詢性能比關(guān)系數(shù)據(jù)庫好。

● 更新操作(ldapupdate):目錄樹條目支持條目的添加、刪除、修改等操作。

● 同步操作:OpenLDAP是一種典型的分布式結(jié)構(gòu),提供復(fù)制同步,可將主服務(wù)器上的數(shù)據(jù)通過推或拉的機(jī)制實(shí)現(xiàn)在從服務(wù)器上更新,完成數(shù)據(jù)的同步,從而避免OpenLDAP服務(wù)器出現(xiàn)單點(diǎn)故障,影響用戶驗(yàn)證。

● 認(rèn)證和管理操作:允許客戶端在目錄中識(shí)別自己,并且能夠控制一個(gè)會(huì)話的性質(zhì)。

1.1.5 OpenLDAP協(xié)議版本概述

目前OpenLDAP 2.4版本使用V2和V3兩個(gè)版本,其V3特點(diǎn)如下所示。

● RFC 2251:LDAP V3核心協(xié)議,定義LDAP V3協(xié)議的基本模型和基本操作。

● RFC 2252:定義LDAPV3中的基本數(shù)據(jù)模式(schema)來保證數(shù)據(jù)的存取規(guī)范。

● RFC 2253:定義LDAP V3中的區(qū)別名(DN)表達(dá)方式。

● RFC 2254:定義LDAP V3中的過濾器的表達(dá)方式。

● RFC 2255:LDAP統(tǒng)一資源地址的格式。

● RFC 2256:在LDAP V3中使用X.500的Schema列表。

● RFC 2820:LDAP通過訪問控制列表來控制目錄的訪問權(quán)限。

● RFC 2829:定義LDAP V3中的認(rèn)證方式。

● RFC 2830:定義如何通過擴(kuò)展使用TLS服務(wù)。

● RFC 2847:定義LDAP數(shù)據(jù)導(dǎo)入、導(dǎo)出文件接口LDIF。

1.1.6 LDAP產(chǎn)品匯總

LDAP賬號(hào)集中管理產(chǎn)品匯總見表1-1。

表1-1 LDAP賬號(hào)集中管理產(chǎn)品匯總

每一款產(chǎn)品無論是商業(yè)軟件還是開源軟件,都有它們的應(yīng)用場(chǎng)景。本書主要講解以開源方式實(shí)現(xiàn)賬號(hào)統(tǒng)一管理的軟件OpenLDAP在UNIX/Linux主機(jī)上的應(yīng)用場(chǎng)景及企業(yè)應(yīng)用實(shí)例。對(duì)于其他LDAP產(chǎn)品,讀者可以通過搜索引擎進(jìn)行了解,在此不作過多闡述。

1.1.7 OpenLDAP適用場(chǎng)景

OpenLDAP賬號(hào)管理軟件適用于所有不同發(fā)行版的UNIX系統(tǒng)、Windows系統(tǒng)以及各種應(yīng)用平臺(tái)的用戶管理,如Apache、Nginx、Zabbix、Postfix、Samba、FTP、SVN、Openvpn、Git、Hadoop、OpenStack以及存儲(chǔ)設(shè)備控制臺(tái)等。OpenLDAP適用于少則一臺(tái)機(jī)器,多則千臺(tái)機(jī)器的系統(tǒng),可實(shí)現(xiàn)賬號(hào)集中式統(tǒng)一管理。

1.1.8 OpenLDAP支持的系統(tǒng)平臺(tái)

OpenLDAP支持的系統(tǒng)平臺(tái)如圖1-1所示。

圖1-1 OpenLDAP支持的系統(tǒng)平臺(tái)

:通過圖1-1可以了解到,OpenLDAP支持眾多系統(tǒng)平臺(tái),例如各種UNIX發(fā)行版本、微軟Windows、Mac OS、IBM AIX等眾多平臺(tái)。本書重點(diǎn)以紅帽系統(tǒng)為藍(lán)本,并以理論與實(shí)相結(jié)合的思想帶領(lǐng)讀者熟悉并在企業(yè)中熟練使用OpenLDAP產(chǎn)品。

1.1.9 OpenLDAP高級(jí)功能匯總

OpenLDAP具有下述高級(jí)功能。

● 實(shí)現(xiàn)賬號(hào)統(tǒng)一集中管理

● 權(quán)限控制管理(sudo)

● 密碼控制策略管理

● 密碼審計(jì)管理

● 密碼控制策略

● 主機(jī)控制管理

● 同步機(jī)制管理

● TLS/SASL加密傳輸

● 高可用負(fù)載均衡架構(gòu)

● 自定義schema

● 各種應(yīng)用平臺(tái)集成賬號(hào)管理

作者會(huì)在高級(jí)篇和實(shí)戰(zhàn)篇中詳解每個(gè)功能模塊的原理、實(shí)現(xiàn)方式以及在企業(yè)中如何應(yīng)用,讓讀者通過本書詳細(xì)了解OpenLDAP產(chǎn)品、架構(gòu)以及與各種應(yīng)用的結(jié)合實(shí)現(xiàn)統(tǒng)一賬號(hào)管理。

1.2 OpenLDAP目錄架構(gòu)

1.2.1 OpenLDAP目錄架構(gòu)介紹

目前OpenLDAP目錄架構(gòu)分為兩種:一種為互聯(lián)網(wǎng)命名組織架構(gòu);另一種為企業(yè)級(jí)命名組織架構(gòu)。本節(jié)分別為介紹兩種架構(gòu)的用途,但本書主要以企業(yè)級(jí)命名組織架構(gòu)為核心進(jìn)行闡述OpenLDAP內(nèi)部邏輯結(jié)構(gòu)、工作原理以及企業(yè)實(shí)踐等相關(guān)知識(shí)。

1.2.2 互聯(lián)網(wǎng)命名組織架構(gòu)

LDAP的目錄信息是以樹形結(jié)構(gòu)進(jìn)行存儲(chǔ)的,在樹根一般定義國家(c=CN)或者域名(dc=com),其次往往定義一個(gè)或多個(gè)組織(organization, o)或組織單元(organization unit, ou)。一個(gè)組織單元可以包含員工、設(shè)備信息(計(jì)算機(jī)/打印機(jī)等)相關(guān)信息。例如uid=babs, ou=People, dc=example, dc=com,如圖1-2所示。

圖1-2 LDAP互聯(lián)網(wǎng)命名組織架構(gòu)(此圖來自http://www.openldap.org

1.2.3 企業(yè)級(jí)命名組織架構(gòu)

企業(yè)級(jí)命名組織架構(gòu)的示例如圖1-3所示。

圖1-3 LDAP企業(yè)規(guī)劃命名方式

1.2.4 OpenLDAP的系統(tǒng)架構(gòu)

OpenLDAP目前是一款開源賬號(hào)集中管理軟件,且屬于C/S架構(gòu)(見圖1-4)。通過配置服務(wù)器和客戶端,實(shí)現(xiàn)賬號(hào)的管理,并通過與第三方應(yīng)用相結(jié)合,實(shí)現(xiàn)客戶端所有賬號(hào)均可通過服務(wù)端進(jìn)行驗(yàn)證,例如Samba、Apache、Zabbix、FTP、Postfix、EMC存儲(chǔ)以及系統(tǒng)登錄驗(yàn)證并授權(quán)。

圖1-4 OpenLDAP的C/S架構(gòu)

1.2.5 OpenLDAP的工作模型

OpenLDAP的工作模型如圖1-5所示。

圖1-5 OpenLDAP的工作模型

OpenLDAP工作模型解釋如下:

● 客戶端向OpenLDAP服務(wù)器發(fā)起驗(yàn)證請(qǐng)求;

● 服務(wù)器接收用戶請(qǐng)求后,并通過slapd進(jìn)程向后端的數(shù)據(jù)庫進(jìn)行查詢;

● slapd將查詢的結(jié)果返回給客戶端即可。如果有緩存機(jī)制,服務(wù)器端會(huì)先將查詢的條目進(jìn)行緩存,然后再發(fā)給客戶端。

1.3 OpenLDAP schema概念

1.3.1 schema介紹及用途

schema是OpenLDAP軟件的重要組成部分,主要用于控制目錄樹中各種條目所擁有的對(duì)象類以及各種屬性的定義,并通過自身內(nèi)部規(guī)范機(jī)制限定目錄樹條目所遵循的邏輯結(jié)構(gòu)以及定義規(guī)范,保證整個(gè)目錄樹沒有非法條目數(shù)據(jù),避免不合法的條目存在目錄樹中,從而保障整個(gè)目錄樹信息的完整性、唯一性。

在OpenLDAP目錄樹中,schema用來指定一個(gè)條目所包含的對(duì)象類(objectClass)以及每一個(gè)對(duì)象類所包含的屬性值(attribute value)。其屬性又分為必要屬性和可選屬性兩種,一般必要屬性是指添加條目時(shí)必須指定的屬性,可選屬性是可以選擇或不選擇的。schema定義對(duì)象類,對(duì)象類包含屬性的定義,對(duì)象類和屬性組合成條目。

目錄樹中條目可理解為是一個(gè)具體的對(duì)象,它們均是通過schema創(chuàng)建的,并符合schema的標(biāo)準(zhǔn)規(guī)范,如對(duì)你所添加的數(shù)據(jù)條目中所包含的對(duì)象類級(jí)屬性進(jìn)行檢測(cè),檢測(cè)通過完成添加,否則打印錯(cuò)誤信息。因此,schema是一個(gè)數(shù)據(jù)模型,數(shù)據(jù)模型可以理解為關(guān)系數(shù)據(jù)庫的存儲(chǔ)引擎,如MyISAM、InnoDB,主要用來決定數(shù)據(jù)按照什么方式進(jìn)行存儲(chǔ),并定義存儲(chǔ)在目錄樹不同條目中數(shù)據(jù)類型之間的關(guān)系。

schema是一個(gè)標(biāo)準(zhǔn),定義了OpenLDAP目錄樹對(duì)象和屬性存取方式,這也是OpenLDAP能夠存儲(chǔ)什么數(shù)據(jù)類型的取決因素。因此數(shù)據(jù)有什么屬性等均根據(jù)schema來實(shí)現(xiàn)。OpenLDAP默認(rèn)的schema文件一般存放在/etc/openldap/schema/目錄下,此目錄下每個(gè)文件定義了不同的對(duì)象類和屬性。如果想引用額外的schema,只需要在配置文件中通過include包含所指定的schema即可。

以下代碼可用于獲取當(dāng)前系統(tǒng)OpenLDAP所使用的schema規(guī)范,了解當(dāng)前所使用的schema文件,這有助于添加目錄樹中的條目信息,如對(duì)象類以及包含哪些屬性及值,減少添加條目提示的各種語法錯(cuò)誤。

    [root@mldap01 schema]# cat /etc/openldap/slapd.conf | grep '^incl*'
    include        /etc/openldap/schema/corba.schema
    include        /etc/openldap/schema/core.schema
    include        /etc/openldap/schema/cosine.schema
    include        /etc/openldap/schema/duaconf.schema
    include        /etc/openldap/schema/dyngroup.schema
    include        /etc/openldap/schema/inetorgperson.schema
    include        /etc/openldap/schema/java.schema
    include        /etc/openldap/schema/misc.schema
    include        /etc/openldap/schema/nis.schema  #定義網(wǎng)絡(luò)信息服務(wù)
    include        /etc/openldap/schema/openldap.schema #OpenLDAP自身
    include        /etc/openldap/schema/ppolicy.schema  #定義用戶密碼規(guī)則,例如密碼長(zhǎng)度及復(fù)雜度
    include        /etc/openldap/schema/collective.schema

schema在OpenLDAP目錄樹中承接規(guī)范、對(duì)條目所包含的objectClass以及數(shù)據(jù)字節(jié)數(shù)、格式等來保證整個(gè)目錄樹的完整性。

1.3.2 獲取schema的途徑

默認(rèn)安裝OpenLDAP組件后,系統(tǒng)的配置定義一組常用的schema文件,這組文件一般存放在/etc/openldap/schema目錄內(nèi),可通過include引用。當(dāng)所定義的objectClass不存在時(shí),該如何獲取objectClass?下面就介紹如何獲取schema來包含objectClass。

1.服務(wù)器自身產(chǎn)生的schema文件

通過服務(wù)器自身軟件包的安裝來生成schema文件,本節(jié)以sudo為例演示其過程。

● 查看軟件包生成的文件列表,代碼如下。

    # rpm -ql sudo-1.8.6p3 | grep -i schema
    /usr/share/doc/sudo-1.8.6p3/schema.ActiveDirectory
    /usr/share/doc/sudo-1.8.6p3/schema.OpenLDAP
    /usr/share/doc/sudo-1.8.6p3/schema.iPlanet

● 通過配置文件引入schema,代碼如下。

    # cp -f /usr/share/doc/sudo-1.8.6p3/schema.OpenLDAP /etc/openldap/schema/sudo.schema
    # echo "include /etc/openldap/schema/sudo.schema" > /etc/openldap/slapd.conf

● 通過schema產(chǎn)生ldif文件,代碼如下。

    # slapcat -f ~/sudo/sudoSchema.conf -F /tmp/ -n0-s "cn={0}sudo, cn=schema, cn=config" >
    ~/sudo/sudo.ldif
    # sed -i "s/{0}sudo/{12}sudo/g" ~/sudo/sudo.ldif
    # head -n-8~/sudo/sudo.ldif > ~/sudo/sudo-config.ldif

● 通過OpenLDAP指令導(dǎo)入目錄樹,代碼如下。

    ldapadd -Y EXTERNAL -H ldapi:/// -f ~/sudo/sudo-config.ldif

此時(shí)就可以通過sudo schema文件定義各種sudo規(guī)則從而實(shí)現(xiàn)用戶權(quán)限的控制。

2.自定義schema文件

當(dāng)所定義的objectClass不在規(guī)定范圍內(nèi),就需要定義schema文件來包含objectClass。關(guān)于自定義schema在此不作過多的介紹。

關(guān)于自定義schema文件,需要注意以下幾點(diǎn)。

● 保證屬性名稱唯一性;

● 通過OID標(biāo)識(shí)符定義objectClass;

● 屬性的描述;

● 必選屬性以及可選屬性集合定義。

1.4 OpenLDAP目錄條目概述

1.4.1 objectClass分類

objectClass類通常分三類:結(jié)構(gòu)型、輔助型、抽象型。

● 結(jié)構(gòu)型(structural):如person和organizationUnit。

● 輔助型(auxiliary):如extensibleObject。

● 抽象型(abstract):如top,抽象型的objectClass不能直接使用。

1.4.2 OpenLDAP常見的objectClass

OpenLDAP常見的objectClass類如下所示。

● alias

● applicationEntity

● dSA

● applicationProcess

● bootableDevice

● certificationAuthority

● certificationAuthority-V2

● country

● cRLDistributionPoint

● dcObject

● device

● dmd

● domain

● domainNameForm

● extensibleObject

● groupOfNames

● groupOfUniqueNames

● ieee802Device

● ipHost

● ipNetwork

● ipProtocol

● ipService

● locality

● dcLocalityNameForm

● nisMap

● nisNetgroup

● nisObject

● oncRpc

● organization

● dcOrganizationNameForm

● organizationalRole

● organizationalUnit

● dcOrganizationalUnitNameForm

● person

● organizationalPerson

● inetOrgPerson

● uidOrganizationalPersonNameForm

● residentialPerson

● posixAccount

● posixGroup

● shadowAccount

● strongAuthenticationUser

● uidObject

● userSecurityInformation

如上對(duì)象類由OpenLDAP官方所提供,以滿足大部分企業(yè)的需求,OpenLDAP還支持系統(tǒng)所提供的對(duì)象類,例如sudo、samba等。后續(xù)章節(jié)將對(duì)企業(yè)中常用的對(duì)象類進(jìn)行闡述并通過案例演示其實(shí)現(xiàn)過程,讓讀者熟悉其原理及實(shí)現(xiàn)過程。

當(dāng)OpenLDAP官方以及系統(tǒng)提供的對(duì)象類無法滿足企業(yè)的特殊需求時(shí),讀者可根據(jù)OpenLDAP schema內(nèi)部結(jié)構(gòu)制定schema規(guī)范并生成對(duì)象類,來滿足當(dāng)前需求。

1.4.3 objectClass詳解

在OpenLDAP目錄樹中,每個(gè)條目必須包含一個(gè)屬于自身?xiàng)l件的對(duì)象類,然后再定義其條目屬性及對(duì)應(yīng)的值。

OpenLDAP條目的屬性能否添加取決于條目所繼承的objectClass是否包含此屬性。objectClass具有繼承關(guān)系,也就是說,條目添加的屬性最終取決于自身所繼承的所有objectClass的集合。如果所添加的屬性不在objectClass范圍內(nèi),此時(shí)目錄服務(wù)器不允許添加此屬性。如果要添加,就必須添加schema文件產(chǎn)生objectClass所對(duì)應(yīng)的屬性。objectClass和Attribute由schema文件來規(guī)定,存放在/etc/openldap/schema目錄下,schema文件規(guī)范objectClass的構(gòu)成以及屬性和值在目錄樹中的對(duì)應(yīng)關(guān)系。后面章節(jié)會(huì)介紹如何通過定義schema文件來產(chǎn)生objectClass,從而生成所需要的屬性。

每一個(gè)屬性和值將用作每個(gè)條目在目錄樹中存儲(chǔ)信息的標(biāo)準(zhǔn),例如能包含哪些屬性信息。對(duì)于objectClass的理解,讀者可以將objectClass的屬性值理解為一種模板。模板定義哪些信息可以存取,哪些信息不可以存儲(chǔ)在目錄樹中。

1.4.4 objectClass案例分析

下面給出兩個(gè)對(duì)象類案例分析示例。

● objectClass案例分析示例1

所有的objectClass定義都存放在/etc/openldap/schema/*.schema文件中。例如,person屬性的定義就存放在core.schema文件中。

    objectclass ( 2.5.6.6 NAME 'person'
            DESC 'RFC2256: a person'
            SUP top STRUCTURAL
            MUST ( sn $ cn )
            MAY ( userPassword $ telephoneNumber $ seeAlso $ description ) )

分析:

如果要定義person類型,需要定義頂級(jí)為top,并且必須定義sn和cn兩個(gè)屬性,還可以附加userPassword、telephoneNumber、seeAlso、description 4個(gè)屬性值。郵件地址、國家等屬性不可以定義,除非讀者添加相關(guān)的objectClass條目,否則提示相關(guān)屬性不允許添加。

● objectClass案例分析示例2

    objectClass: (2.5.6.0 NAME 'top'
    ABSTRACT
    MUST (objectClass))

    objectClass: ( 2.5.6.6 NAME 'person'
    SUP top STRUCTURAL
    MUST (sn $ cn )
    MAY (userPassword $ telephoneNumber $
    seeAlso $ description ))

分析:

對(duì)于此案例,如果要定義top屬性,必須定義一個(gè)objectClass屬性。因?yàn)榇税咐羞€定義了person屬性,所以要必須定義sn和cn屬性,以及可以附加的屬性(userPassword、telephoneNumber、seeAlso、description)。此案例中必須要定義的有3個(gè)屬性分別是objectClass、sn以及cn。通過此案例下一級(jí)的objectClass可以繼承上一級(jí)objectClass的屬性信息。

:根據(jù)定義,對(duì)于不同的objectClass,屬性的相關(guān)信息也不同。希望通過上面兩個(gè)案例的介紹,能讓讀者了解objectClass的含義以及屬性的含義。

1.5 屬性

1.5.1 屬性概述

屬性(Attribute)在目錄樹中主要用于描述條目相關(guān)信息,例如用戶條目的用途、聯(lián)系方式、郵件、uid、gid、公司地址等輔助信息。屬性由objectClass所控制,一個(gè)objectClass的節(jié)點(diǎn)具有一系列Attribute, Attribute可以理解為L(zhǎng)inux系統(tǒng)當(dāng)中的變量,每個(gè)變量都有對(duì)應(yīng)的值,OpenLDAP Attribute也是有對(duì)應(yīng)的值。這些屬性的對(duì)應(yīng)值表示每個(gè)對(duì)象的特點(diǎn),但有些屬性在添加時(shí)是必須指定的,有些屬性是非必要的(類似于條目更詳細(xì)的描述)。在目錄樹中常用的Attribute有uid、sn、giveName、I、objectClass、dc、ou、cn、mail、telephoneNumber、c等。

1.5.2 Attribute詳解

目錄樹中常用的屬性及其描述見表1-2。

表1-2 OpenLDAP Attribute及其描述

:為了方面大家理解OpenLDAP中每個(gè)Attribute的含義,讀者可通過Linux系統(tǒng)對(duì)用戶及用戶屬性的定義(/etc/passwd)來輔助了解,例如:

    sandy:x:501:501:Check administrator:/home/sandy:/bin/bash

1.6 LDIF詳解

1.6.1 LDIF用途

LDIF(LDAP Data Interchanged Format)的輕量級(jí)目錄訪問協(xié)議數(shù)據(jù)交換格式的簡(jiǎn)稱,是存儲(chǔ)LDAP配置信息及目錄內(nèi)容的標(biāo)準(zhǔn)文本文件格式,之所以使用文本文件來存儲(chǔ)這些信息是為了方便讀取和修改,這也是其他大多數(shù)服務(wù)配置文件所采取的格式。通常用來交換數(shù)據(jù)并在OpenLDAP服務(wù)器之間互相交換數(shù)據(jù),并且可以通過LDIF實(shí)現(xiàn)數(shù)據(jù)文件的導(dǎo)入、導(dǎo)出以及數(shù)據(jù)文件的添加、修改、重命名等操作,這些信息需要按照LDAP中schema的規(guī)范進(jìn)行操作,并會(huì)接受schema的檢查,如果不符合OpenLDAP schema規(guī)范要求,則會(huì)提示相關(guān)語法錯(cuò)誤。

1.6.2 LDIF文件特點(diǎn)

● LDIF文件每行的結(jié)尾不允許有空格或者制表符。

● LDIF文件允許相關(guān)屬性可以重復(fù)賦值并使用。

● LDIF文件以.ldif結(jié)尾命名。

● LDIF文件中以#號(hào)開頭的一行為注釋,可以作為解釋使用。

● LDIF文件所有的賦值方式為:屬性:[空格]屬性值。

● LDIF文件通過空行來定義一個(gè)條目,空格前為一個(gè)條目,空格后為另一個(gè)條目的開始。

:如果讀者要手動(dòng)定義LDIF文件添加修改條目,需要了解以上相關(guān)特點(diǎn);否則,會(huì)提示各種各樣的語法錯(cuò)誤。而且OpenLDAP服務(wù)器中定義LDIF文件,每個(gè)條目必須包含一個(gè)objectclass屬性,并且需要定義值,objectclass屬性有頂級(jí)之分,在定義objectclass之前需要了解objectclass的相關(guān)依賴性,否則在添加或者修改時(shí)也會(huì)提示相關(guān)語法錯(cuò)誤。

1.6.3 LDIF格式語法

● LDIF文件存取OpenLDAP條目標(biāo)準(zhǔn)格式:

    # 注釋,用于對(duì)條目進(jìn)行解釋
    dn:條目名稱
    objectClass(對(duì)象類): 屬性值
    objectClass(對(duì)象類): 屬性值
    ……

● LDIF格式樣例如下:

    dn: uid=Guodayong, ou=people, dc=gdy, dc=com    //DN描述項(xiàng),在整個(gè)目錄樹上為唯一的
    objectClass: top
    objectClass: posixAccount
    objectClass: shadowAccount
    objectClass: person
    objectClass: inetOrgPerson
    objectClass: hostObject
    sn: Guo
    cn: Guodayong
    telephoneNumber:xxxxxxxxxxx
    mail: dayong_guo@126.com

:冒號(hào)后面有一個(gè)空格,然后才是屬性的值,schema規(guī)范定義要求很嚴(yán)格。(這點(diǎn)請(qǐng)讀者切記!)

1.7 對(duì)象標(biāo)識(shí)符講解

對(duì)象標(biāo)識(shí)符(object identifier)被LDAP內(nèi)部數(shù)據(jù)庫引用的數(shù)字標(biāo)識(shí)。Attribute的名字是為了方便人們讀取,但為了方便計(jì)算機(jī)的處理,通常使用一組數(shù)字來標(biāo)識(shí)這些對(duì)象,這類同于SNMP中的MIB2。例如,當(dāng)計(jì)算機(jī)接收到dc這個(gè)Attribute時(shí),它會(huì)將這個(gè)名字轉(zhuǎn)換為對(duì)應(yīng)的OID:1.3.6.1.4.1.1466.115.121.1.26。

schema定義了OpenLDAP框架目錄所應(yīng)遵循的結(jié)構(gòu)和規(guī)則,保障整個(gè)目錄樹的完整性。主要包括4個(gè)部分,分別是OID、objectClass、匹配規(guī)則、屬性,本小節(jié)主要介紹OID相關(guān)知識(shí)點(diǎn)。

每個(gè)schema中,都具有合法而全局唯一的對(duì)象標(biāo)識(shí)符,簡(jiǎn)稱OID。主要用于被LDAP內(nèi)部數(shù)據(jù)庫引用的標(biāo)識(shí),schema生產(chǎn)objectClass, objectClass生成Attribute, Attribute的產(chǎn)生主要是為了方便人們所理解,但為了方便計(jì)算機(jī)處理,通常使用一組數(shù)字來標(biāo)識(shí)這些對(duì)象,類似于SNMP中MIB2概念。

OID在OpenLDAP項(xiàng)目中承擔(dān)重要角色,是存在層級(jí)關(guān)系的。由表1-3得知,項(xiàng)目ID為1.1,分為6個(gè)層級(jí),分別是SNMP元素定義、LDAP元素定義、屬性類型、屬性名稱、對(duì)象類型、對(duì)象名稱。如果你要定義一個(gè)OID,需要到http://www.iana.org/申請(qǐng)免費(fèi)已注冊(cè)的OID或者通過http://pen.iana.org/pen/PenApplication.page填寫信息并提交來完成OID的申請(qǐng)。

表1-3 OID層級(jí)關(guān)系

關(guān)于OID相關(guān)的更多知識(shí),讀者可以通過www.openldap.org官網(wǎng)進(jìn)行詳細(xì)了解,在此不做過多闡述。

1.8 自動(dòng)化運(yùn)維解決方案

1.8.1 互聯(lián)網(wǎng)面臨的問題

當(dāng)今局域網(wǎng)、互聯(lián)網(wǎng)不斷發(fā)展,其網(wǎng)絡(luò)規(guī)模也在不斷擴(kuò)大,為了集中管理主機(jī)及其相關(guān)資源,我們可以通過DHCP及DNS服務(wù)器來自動(dòng)分配IP地址、子網(wǎng)掩碼、網(wǎng)關(guān)、主機(jī)名等相關(guān)網(wǎng)絡(luò)配置信息。隨著企業(yè)規(guī)模不斷發(fā)展,系統(tǒng)規(guī)模不斷增加,那么作為系統(tǒng)運(yùn)維管理人員維護(hù)服務(wù)器有些力不從心,比如:

● 當(dāng)公司業(yè)務(wù)不斷發(fā)展,當(dāng)前業(yè)務(wù)系統(tǒng)無法滿足需求,這時(shí)該如何快速部署系統(tǒng)并且應(yīng)用到當(dāng)前的業(yè)務(wù)系統(tǒng)?

● 批量對(duì)業(yè)務(wù)系統(tǒng)進(jìn)行變更以及管理,傳統(tǒng)方式需要通過登錄每臺(tái)機(jī)器進(jìn)行操作管理,那么如何在短時(shí)間內(nèi)完成各種應(yīng)用的變更及日常管理,提高工作效率?

● 隨著運(yùn)維團(tuán)隊(duì)的不斷擴(kuò)大,為了保證系統(tǒng)賬號(hào)安全性,賬號(hào)管理員需要在線上系統(tǒng)的所有機(jī)器進(jìn)行創(chuàng)建個(gè)人運(yùn)維賬號(hào)(useradd account && echo "password" | passwd --stdin account ||echo "account add failed")。當(dāng)運(yùn)維管理人員異動(dòng)或者離職時(shí),賬號(hào)管理員需要登錄線上系統(tǒng),做同樣的操作(userdel -r account),這不但容易出錯(cuò),而且寶貴的時(shí)間不知不覺中就浪費(fèi)。那么如何對(duì)賬號(hào)進(jìn)行集中管理,提高保障系統(tǒng)賬號(hào)的安全性?

● 為了保證線上系統(tǒng)的安全性,通常登錄堡壘機(jī)及跳板機(jī)對(duì)線上服務(wù)器的登錄進(jìn)行維護(hù)以及各種變更操作,這通過購買商業(yè)軟件可以實(shí)現(xiàn),例如帕拉迪軟件。那么如何通過開源的方式實(shí)現(xiàn)堡壘機(jī)以及跳板機(jī)的功能?

我們了解了目前企業(yè)中面臨的各種各樣的問題,了解了問題的所在,那就帶著這些問題讓我們一起看看通過自動(dòng)化運(yùn)維是如何解決的。

1.8.2 自動(dòng)化解決方案

目前,自動(dòng)化運(yùn)維解決方案有以下幾種。

● 系統(tǒng)安裝

企業(yè)中批量安裝系統(tǒng)是難免的事情,如何在短時(shí)間內(nèi)安裝大量系統(tǒng)?為了提高工作效率,一般運(yùn)維管理員通常會(huì)使用PXE +Kickstart、Cobbler開源軟件來實(shí)現(xiàn)系統(tǒng)的自動(dòng)安裝部署。PXE+Kickstart架構(gòu)不適合同時(shí)安裝不同系統(tǒng)平臺(tái)。目前Cobbler軟件在企業(yè)中應(yīng)用比較廣泛。

● 自動(dòng)化部署

對(duì)于自動(dòng)化部署平臺(tái)的管理,一般采用開源軟件實(shí)現(xiàn),如Puppet(C/S架構(gòu))、Ansible(SSH互信實(shí)現(xiàn))、Saltstack等開源架構(gòu)實(shí)現(xiàn)統(tǒng)一管理以及各種應(yīng)用變更部署。針對(duì)每一款產(chǎn)品都有一定的應(yīng)用場(chǎng)景,大多數(shù)企業(yè)混合使用,針對(duì)不同的場(chǎng)景使用不同的產(chǎn)品,例如,使用Puuppet進(jìn)行推送,利用Saltstack遠(yuǎn)程執(zhí)行命令等,目前Puppet深受運(yùn)維人員喜愛。

● 賬號(hào)集中管理

對(duì)于線上系統(tǒng)及各種應(yīng)用平臺(tái)實(shí)現(xiàn)賬號(hào)統(tǒng)一管理,實(shí)現(xiàn)方式有開源軟件以及商業(yè)軟件。例如OpenLDAP(開源軟件)、NIS、IBM Tivoli Directory Server(商業(yè)管理軟件)。針對(duì)OpenLDAP軟件有眾多功能模塊,同樣也可以通過自定義schema實(shí)現(xiàn)企業(yè)中特殊的需求以及通過第三方軟件實(shí)現(xiàn)高可用負(fù)載架構(gòu)等,這是商業(yè)軟件所沒有的特點(diǎn)。商業(yè)軟件價(jià)格比較昂貴,這對(duì)中小型企業(yè)是一項(xiàng)不菲的開支。

目前OpenLDAP主要在中大(型)企業(yè)得到廣泛應(yīng)用,使用LDAP實(shí)現(xiàn)各種系統(tǒng)及平臺(tái)用戶集中身份驗(yàn)證,降低賬號(hào)管理復(fù)雜度,增強(qiáng)系統(tǒng)及賬號(hào)安全性,實(shí)現(xiàn)賬號(hào)統(tǒng)一集中管理。同樣本書重點(diǎn)講解OpenLDAP產(chǎn)品以及在企業(yè)中應(yīng)用的場(chǎng)景。

● 堡壘機(jī)、跳板機(jī)實(shí)現(xiàn)

為了保證線上服務(wù)器的安全性,一般會(huì)在前端設(shè)立安全關(guān)卡。滿足條件才允許你使用賬號(hào)進(jìn)行登錄線上服務(wù)器。目前保壘機(jī)、跳板機(jī)的實(shí)現(xiàn)方式有采用OpenLDAP+Jumpserver(開源架構(gòu))、帕拉迪軟件(商業(yè)軟件)等。對(duì)于小型企業(yè),采用商業(yè)軟件無疑會(huì)給企業(yè)帶來不菲的開支,選擇開源的架構(gòu)無疑是不錯(cuò)的選擇。實(shí)戰(zhàn)章節(jié)會(huì)介紹Jumpserver軟件的使用及其在企業(yè)中的應(yīng)用場(chǎng)景。

1.9 本章總結(jié)

本章介紹了OpenLDAP產(chǎn)品、功能及優(yōu)點(diǎn)、適用場(chǎng)景,讓讀者慢慢對(duì)陌生而強(qiáng)大的自動(dòng)化賬號(hào)管理軟件進(jìn)行系統(tǒng)的了解。并針對(duì)OpenLDAP的組織架構(gòu)、OpenLDAP關(guān)鍵術(shù)語(schema、objectClass、attribute、LDIF)及相關(guān)實(shí)現(xiàn)方式進(jìn)行詳細(xì)介紹。最后介紹企業(yè)中自動(dòng)化運(yùn)維解決方案。

OpenLDAP術(shù)語對(duì)于后期高級(jí)配置以及應(yīng)用平臺(tái)集成起到非常重要的鋪墊作用,希望讀者能夠認(rèn)認(rèn)真真閱讀本章。

下面的章節(jié)將會(huì)介紹OpenLDAP服務(wù)器的安裝、配置文件組成及含義、搭建案例等相關(guān)實(shí)戰(zhàn)操作。請(qǐng)讀者拭目以待。

主站蜘蛛池模板: 石屏县| 盐源县| 海南省| 博乐市| 凌源市| 宝坻区| 临武县| 依兰县| 喀喇| 沈丘县| 武乡县| 贵南县| 海宁市| 开江县| 顺昌县| 舟曲县| 山东| 云和县| 海门市| 额尔古纳市| 灵武市| 东至县| 蒙山县| 冀州市| 阜新市| 涿鹿县| 农安县| 平泉县| 乐都县| 扎囊县| 岗巴县| 湖北省| 双鸭山市| 泰安市| 广西| 奎屯市| 灵宝市| 海阳市| 富源县| 乐平市| 三原县|