




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
導(dǎo)讀LDAP(輕量級(jí)目錄訪問(wèn)協(xié)議,LightweightDirectoryAccessProtocol)是實(shí)現(xiàn)提供被稱為目錄服務(wù)的信息服務(wù)。目錄服務(wù)是一種特殊的數(shù)據(jù)庫(kù)系統(tǒng),其專門針對(duì)讀取,瀏覽和搜索操作進(jìn)行了特定的優(yōu)化。目錄一般用來(lái)包含描述性的,基于屬性的信息并支持精細(xì)復(fù)雜的過(guò)濾能力。目錄一般不支持通用數(shù)據(jù)庫(kù)針對(duì)大量更新操作操作需要的復(fù)雜的事務(wù)管理或回卷策略。而目錄服務(wù)的更新則一般都非常簡(jiǎn)單。這種目錄可以存儲(chǔ)包括個(gè)人信息、web鏈結(jié)、jpeg圖像等各種信息。為了訪問(wèn)存儲(chǔ)在目錄中的信息,就需要使用運(yùn)行在TCP/IP之上的訪問(wèn)協(xié)議一LDAP。LDAP目錄中的信息是是按照樹(shù)型結(jié)構(gòu)組織,具體信息存儲(chǔ)在條目(entry)的數(shù)據(jù)結(jié)構(gòu)中。常見(jiàn)的例子是通訊簿,由以字母順序排列的名字、地址和電話號(hào)碼組成。目錄服務(wù)與關(guān)系數(shù)據(jù)庫(kù)之間的主要區(qū)別在于:二者都允許對(duì)存儲(chǔ)數(shù)據(jù)進(jìn)行訪問(wèn),只是目錄主要用于讀取,其查詢的效率很高,而關(guān)系數(shù)據(jù)庫(kù)則是為讀寫而設(shè)計(jì)的。也就是目錄服務(wù)不適于進(jìn)行頻繁的更新,屬于典型的分布式結(jié)構(gòu)??偨Y(jié):對(duì)于查詢操作多于更新操作的(認(rèn)證)系統(tǒng)來(lái)說(shuō),使用OpenLDAP是一個(gè)比關(guān)系數(shù)據(jù)庫(kù)如MySq、PostgreSQL等更好的選擇。LDAP的功能在LDAP的功能模型中定義了一系列利用LDAP協(xié)議的操作,主要包含以下4部分:查詢操作:允許查詢目錄和取得數(shù)據(jù),其查詢性能比關(guān)系數(shù)據(jù)庫(kù)好。更新操作:目錄的更新操作沒(méi)關(guān)系數(shù)據(jù)庫(kù)方便,更新性能較差,但也同樣允許進(jìn)行添加、刪除、修改等操作。復(fù)制操作:前面也提到過(guò),LDAP是一種典型的分布式結(jié)構(gòu),提供復(fù)制操作,可將主服務(wù)器的數(shù)據(jù)的更新復(fù)制到設(shè)置的從服務(wù)器中。認(rèn)證和管理操作:允許客戶端在目錄中識(shí)別自己,并且能夠控制一個(gè)會(huì)話的性質(zhì)。而本文所要將的OpenLDAP就是一個(gè)優(yōu)秀的開(kāi)源的LDAP實(shí)現(xiàn)。OpenLDAP安裝配置及疑惑解答1.安裝和配置1.安裝和配置OpenLDAP=1安裝軟件非常簡(jiǎn)單,但在配置過(guò)程中遇到了不少坎坷,不是服務(wù)啟動(dòng)不成功就是驗(yàn)證不成功。具體的安裝和配置方法網(wǎng)上一大把,但都參差不齊,主要是因?yàn)樾屡f版本的OpenLDAP不同,配置方法有很大的改動(dòng)。下面給出網(wǎng)上幾個(gè)還算靠譜的Linux和Windows兩個(gè)平臺(tái)下安裝該軟件的方法:ubuntu安裝LDAP:安裝方法靠譜,但配置說(shuō)的不太清楚,配置注意事項(xiàng)看后面。UbuntuOpenLDAPServer:官方教程,最值得借鑒,是英文的,這里有中文版的,但沒(méi)英文的清晰,說(shuō)的比較簡(jiǎn)單。Linux下安裝openldap:二進(jìn)制包安裝方法,適用于非Ubuntu的Linux系統(tǒng),稍微有點(diǎn)麻煩,在安裝OpenlDAP之前還需要安裝BerkeleyDB,但配置靈活,可以自定義安裝路徑什么的。后面的配置也沒(méi)說(shuō)清楚,主要看安裝方法。Linux服務(wù)器部署系列之七一OpenLDAP篇:另一篇較詳細(xì)的二進(jìn)制安裝方法及配置。Windows下OpenLDAP的安裝及使用:介紹了LDAP的一些基礎(chǔ)知識(shí)和Windows下安裝方法。圖文介紹openLDAP在windows上的安裝配置:比較詳細(xì),值得一看。上面給出的這幾個(gè)鏈接雖然還不錯(cuò),但還是欠缺了些什么?對(duì),就是講解,網(wǎng)上給出的教程都是手把手教你如何安裝和配置,而沒(méi)有說(shuō)明版本差異、具體配置的含義及為什么這樣配置,如果因?yàn)榘姹净颦h(huán)境差異,你按其方法配置不成功,你也不知道哪里出的問(wèn)題,因此建議還是先熟悉LDAP的基礎(chǔ)知識(shí),配置文件含義然后再試著安裝。2.OpenLDAP疑惑解答下面根據(jù)我自己的經(jīng)驗(yàn),給出幾個(gè)安裝和配置注意事項(xiàng),供參考。疑惑1:細(xì)心的人會(huì)發(fā)現(xiàn)有的教程說(shuō)要配置主機(jī)DNS,添加與LDAP相關(guān)的域名,而大部分教程都沒(méi)有提及這個(gè),那么到底要不要配置呢?解答:當(dāng)然需要配置。安裝好OpenLDAP后首先需要配置slapd.conf這個(gè)文件,其中里面有suffix "dc=example,dc=com"這樣一句需要自己配置,這兩個(gè)dc代表什么意思呢?其實(shí)dc就是“domainComponent”也就是域名的組成部分,準(zhǔn)確的說(shuō)是主機(jī)域名的后綴組成部分,如果這里的配置與你的主機(jī)域名不對(duì)應(yīng)的話,服務(wù)一般是啟動(dòng)不了的。那么怎么配置域名呢?Linux和Windows下的配置文件如下:Linux下:/etc/hostsWindows下:C:\Windows\System32\drivers\etc\hosts需要在hosts文件里添加一條域名(如果沒(méi)配置的話),格式如下:hostname比如我的主機(jī)名是min,并添加的域名配置是:min那么相應(yīng)的我就需要在slapd.conf里這樣配置suffix:suffix "dc=alexia,dc=cn"當(dāng)然這里域名后綴不一定只有兩級(jí),也可以是,然后suffix就應(yīng)該是“dc=example,dc=com,dc=cn”,這隨便你怎么設(shè)置了,只要對(duì)應(yīng)就行。疑惑2:很多版本的slapd.conf里默認(rèn)都配置了下面兩個(gè)變量:modulepath /usr/lib/ldapmoduleload back_@BACKEND@這是什么意思?需要改動(dòng)嗎?解答:這是數(shù)據(jù)庫(kù)database的backend,一般slapd.conf里配置的database都是bdb,也就是BerkeleyDB,有的也許是hdb,其實(shí)也是BerkeleyDB,只是兩個(gè)不同的存儲(chǔ)引擎(就像Mysql有MyISAM和InnoDB兩個(gè)不同的存儲(chǔ)引擎一樣)。而modulepath和moduleload指定了動(dòng)態(tài)模塊路徑及動(dòng)態(tài)裝載的后端模塊,因?yàn)镺penLDAP默認(rèn)是用BerkeleyDB存儲(chǔ)數(shù)據(jù)的,如果你有動(dòng)態(tài)的數(shù)據(jù)需要裝載,那么就需要配置這兩個(gè)參數(shù),對(duì)于一般用戶將這兩個(gè)注釋掉即可。疑惑3:OpenLDAP默認(rèn)采用BerkeleyDB存儲(chǔ)數(shù)據(jù),那么可以換用其它的關(guān)系數(shù)據(jù)庫(kù)嗎?具體如何配置呢?解答:當(dāng)然可以。首先需要明確ldap數(shù)據(jù)模型來(lái)自RDBMS(關(guān)系數(shù)據(jù)庫(kù)模型),而并沒(méi)有指定一定是哪個(gè)DB,只要是關(guān)系數(shù)據(jù)庫(kù)都可以作為L(zhǎng)DAP的后臺(tái),那么你為什么會(huì)想用其它的數(shù)據(jù)庫(kù)代替自帶的BerkeleyDB呢?我想可能是性能相關(guān)了,對(duì)于少量數(shù)據(jù)你用哪個(gè)都可以,但若涉及到稍大點(diǎn)的數(shù)據(jù),比如成千上萬(wàn)的用戶查詢,那么BerkeleyDB的性能就不可觀了,而且BerkeleyDB管理起來(lái)也不太方便,畢竟對(duì)這個(gè)數(shù)據(jù)庫(kù)熟悉的人不多,如果能換作我們經(jīng)常使用的數(shù)據(jù)庫(kù),不僅性能得到提升,管理起來(lái)也十分容易,豈不是一舉多得。具體怎么配置了,請(qǐng)參考這篇文章:用postgresql作后臺(tái)的openldap,以PostgreSQL作為例子進(jìn)行講解。疑惑4:新舊版本的OpenLDAP到底有什么差異呢?解答:簡(jiǎn)單一句話就是:舊版本的OpenLDAP配置文件一般是slapd.conf(路徑可能是/etc/openldap,也可能是/usr/local/openldap,甚至可能是/usr/share/slapd/,不同版本不同安裝不同系統(tǒng)都可能不同,可使用locateslapd.conf進(jìn)行查找正確的路徑),而新版本(我測(cè)試的新版本是2.4.31)的OpenLDAP服務(wù)運(yùn)行時(shí)并不會(huì)讀取該配置文件,而是從slapd.d目錄(一般與slapd.conf在同一目錄下)中讀取相關(guān)信息,我們需要把該目錄下的數(shù)據(jù)刪掉,然后利用我們?cè)趕lapd.conf里配置的信息重新生成配置數(shù)據(jù)。這也可能是你啟動(dòng)服務(wù)后運(yùn)行l(wèi)dap相關(guān)命令卻出現(xiàn)“l(fā)dap_bind:Invalidcredentials(49)"錯(cuò)誤的主要原因。具體怎么重新生成配置數(shù)據(jù)請(qǐng)看參考資料。疑惑5:自定義的ldif數(shù)據(jù)文件中的objectclass后的domain、top、organizationalUnit、inetOrgPerson等等都是什么意思,可以隨便寫嗎?解答:存儲(chǔ)LDAP配置信息及目錄內(nèi)容的標(biāo)準(zhǔn)文本文件格式是LDIF(LDAPInterchangeFormat),使用文本文件來(lái)格式來(lái)存儲(chǔ)這些信息是為了方便讀取和修改,這也是其它大多數(shù)服務(wù)配置文件所采取的格式。LDIF文件常用來(lái)向目錄導(dǎo)入或更改記錄信息,這些信息需要按照LDAP中schema的格式進(jìn)行組織,并會(huì)接受schema的檢查,如果不符合其要求的格式將會(huì)出現(xiàn)報(bào)錯(cuò)信息。因此,ldif文件中的屬性都定義在各大schema中,其中objectclass是對(duì)象的類屬性,不能隨便填寫,而應(yīng)與schema中一致。一般slapd.conf文件的頭部都包含了這些schema:include ../etc/openldap/schema/core.schemainclude ../etc/openldap/schema/cosine.schemainclude ../etc/openldap/schema/inetorgperson.schemainclude ../etc/openldap/schema/nis.schemainclude ../etc/openldap/schema/krb5-kdc.schemainclude ../etc/openldap/schema/RADIUS-LDAPv3.schemainclude ../etc/openldap/schema/samba.schema其中前三個(gè)是比較重要的schema,定義了我們所需要的各個(gè)類,比如ldif中一般先定義一個(gè)根節(jié)點(diǎn),其相應(yīng)的objectclass一般是domain和top,而根節(jié)點(diǎn)下的ou屬性即定義組節(jié)點(diǎn)(group)的objectclass一般是organizationalUnit,group下可以是group也可以是用戶節(jié)點(diǎn),用戶節(jié)點(diǎn)的objectclass一般是inetOrgPerson。而各個(gè)節(jié)點(diǎn)的一系列屬性如用戶節(jié)點(diǎn)的uid、mail、userPassword、sn等等都定義在schema中相關(guān)的objectclass里,可以自己查找看看。疑惑6:OpenLDAP認(rèn)證用戶uid時(shí)默認(rèn)是不區(qū)分大小寫的,也就是“alexia”與“AleXia”是同一個(gè)用戶,在有些情況下這并不合理,能配置使得認(rèn)證時(shí)能區(qū)分大小寫嗎?解答:以我目前的經(jīng)驗(yàn)來(lái)看,舊版本的OpenLDAP是可以配置區(qū)分大小寫的,而新版本的OpenLDAP卻配置不了。為什么這么說(shuō)呢?這里就涉及到“matchingrules〃這個(gè)概念了,即匹配規(guī)則,就是各個(gè)屬性按什么樣的規(guī)則進(jìn)行匹配,比如是否區(qū)分大小寫、是否進(jìn)行數(shù)字匹配等等,這里有詳細(xì)的官方匹配規(guī)則描述。比如舊版本的core.schema里有下面這樣一段:attributetype(0.9.2342.1920030NAME('uid''userid')DESC'RFC1274:useridentifier'EQUALITYcaseIgnoreMatchSUBSTRcaseIgnoreSubstringsMatchSYNTAX.5{256})從字面上也可以看出,其中caseIgnoreMatch和caseIgnoreSubstringsMatch就定乂了uid或userid屬性匹配時(shí)不區(qū)分大小寫,如果我們將其改為caseExactMatch和caseExactSubstringsMatch就表示用戶uid認(rèn)證時(shí)需要區(qū)分大小寫,也就是“alexia〃與、'AleXia〃同不同的用戶,這很簡(jiǎn)單,在舊版本的OpenLDAP也行得通??墒窃谛掳姹镜腛penLDAP中卻不行,新版本的core.schema文件中也包含這樣一段:#attributetype(2.16.840.1.113717NAME('uid''userid')DESC'RFC1274:useridentifier'EQUALITYcaseIgnoreMatchSUBSTRcaseIgnoreSubstringsMatchSYNTAX.5{256})可惜是注釋掉的,那我們?nèi)∠⑨屓缓蟾膶傩孕胁恍心??答案是不行,?huì)報(bào)錯(cuò):DuplicateattributeType:"2.16.840.1.113717〃,也就是說(shuō)該屬性已經(jīng)被定義了,然后我就去包含的所有schema中搜索uid屬性的定義,結(jié)果卻找不到定義,那么為什么還會(huì)報(bào)這個(gè)錯(cuò)誤呢?后來(lái)一陣搜索,終于在這個(gè)帖子“slapd:built-inschemaforuidNumber/gidNumberdoesnothaveorderingdirective7知道了答案,原來(lái)新版本的OpenLDAP已經(jīng)把uid屬性定義schema硬編碼到了slapd程序中,也就是無(wú)法在配置文件中修改了,真是坑!針對(duì)這個(gè)問(wèn)題,我給出兩個(gè)不太好的解決方案:下載OpenLDAP源碼,找到定義uid屬性匹配規(guī)則的地方,修改它然后重新編譯。這個(gè)工作量不輕松,熱愛(ài)研究源碼的人可以嘗試。不要用uid屬性進(jìn)行認(rèn)證,我們可以自定義一個(gè)與用戶 對(duì)應(yīng)的屬性如user-id(不要與已有的屬性重復(fù)就行),其配置與uid一模一樣(即模仿uid),然后用該屬性作為認(rèn)證的因子,建議重新建一個(gè)schema,然后配置好后include進(jìn)slapd.conf中重啟服務(wù)即可。具體怎么定義和配置可以參考這篇文章。我的主要經(jīng)驗(yàn)也就這些。OpenLDAP也有客戶端,如果你配置成功后,可以用客戶端或?qū)慗ava程序進(jìn)行驗(yàn)證。OpenLDAP客戶端OpenLDAP既有圖形客戶端也有網(wǎng)頁(yè)客戶端。圖形客戶端主要有兩個(gè)圖形客戶端:LdapBrowser282(下載:LdapBrowser282.zip,下載解壓后直接雙擊:lbe.bat文件即可運(yùn)行)和LdapAdmin(官方下載),使用都非常簡(jiǎn)單。如下是兩個(gè)客戶端的界面,都需要先建立一個(gè)鏈接,填上相應(yīng)的IP地址、端口和dn配置,然后連接即可獲得你配置的數(shù)據(jù)。LDAPBrowser客戶端:LDAPAdmin客戶端:網(wǎng)頁(yè)客戶端即phpLDAPadmin,基于PHP的一個(gè)web應(yīng)用,需要配置Apache服務(wù)器和PHP,具體的配置方法可參考“phpLDAPadmin安裝配置講解,通過(guò)Web端來(lái)管理您的LDAP服務(wù)器〃,我比較偷懶,直接使用的PHPnow全套服務(wù),安裝成功后大概是下面這樣一個(gè)界面:
Entriesfound;1(Q.Ol神)Ejde-example,de-comEntriesfound;1(Q.Ol神)Ejde-example,de-com(+)擊ou^custornersou-equipment(1)outgroups⑶ou-people(3)cn^JohnSmith(1)cn^RobsrtSmtth(1)cn=5heriSmiih(1)iW條目創(chuàng)建所禁國(guó)schemasearch刷新信總異A.export更冶LoggedInm*Cfi*-jir*ibob服務(wù)器〔倒單挫索煎格]^定義的核索)MyLDAPServer基本DNou=pcoplefldc=CKan:;pleJdc=cojiUAf瀏寬魏索苑圍Sub(簽吁于捌) v會(huì)索過(guò)誠(chéng)器CTU=Jolm+顯不居匡河si^aid,homePhohe,ea口Orderby「 ?—ncn=JohrSmith使用Java完成LDAP身份驗(yàn)證下面借鑒網(wǎng)上資料提供一個(gè)簡(jiǎn)單的認(rèn)證程序如下:importjava.util.Hashtable;importjavax.naming.AuthenticationException;importjavax.naming.Context;importjavax.naming.NamingEnumeration;importjavax.naming.NamingException;importjavax.naming.directory.SearchControls;importjavax.naming.directory.SearchResult;importjavax.naming.ldap.Control;importjavax.naming.ldap.InitialLdapContext;importjavax.naming.ldap.LdapContext;publicclassLDAPAuthentication{privatefinalStringURL=〃ldap://:389/〃;privatefinalStringBASEDN=〃ou=Tester,dc=alexia,dc=cn〃;//根據(jù)自己情況進(jìn)行修改privatefinalStringFACTORY="com.sun.jndi.ldap.LdapCtxFactory”;privateLdapContextctx=null;privatefinalControl]]connCtls=null;privatevoidLDAP_connect(){Hashtable<String,String>env=newHashtable<String,String>();env.put(Context.INITIAL_CONTEXT_FACTORY,FACTORY);env.put(Context.PROVIDER_URL,URL+BASEDN);env.put(Context.SECURITY_AUTHENTICATION,"simple");Stringroot="cn=manager,dc=alexia,dc=cn”;//根,根據(jù)自己情況修改env.put(Context.SECURITY_PRINCIPAL,root);//管理員env.put(Context.SECURITY_CREDENTIALS,"123456");//管理員密碼try{ctx=newInitialLdapContext(env,connCtls);System.out.println("認(rèn)證成功”);}catch(javax.naming.AuthenticationExceptione){System.out.println("認(rèn)證失?。?);e.printStackTrace();}catch(Exceptione){System.out.println("認(rèn)證出錯(cuò):");e.printStackTrace();}if(ctx!=null){try{ctx.close();}catch(NamingExceptione){e.printStackTrace();}}}privateStringgetUserDN(Stringuid){StringuserDN="”;LDAP_connect();try{SearchControlsconstraints=newSearchControls();constraints.setSearchScope(SearchControls.SUBTREE_SCOPE);NamingEnumeration<SearchResult>en=ctx.search(〃〃,"uid="+uid,constraints);if(en==null||!en.hasMoreElements()){System.out.println("未找到該用戶");}//maybemorethanoneelementwhile(en!=null&&en.hasMoreElements()){Objectobj=en.nextElement();if(objinstanceofSearchResult){SearchResultsi=(SearchResult)obj;userDN+=si.getName();userDN+=","+BASEDN;}else{System.out.println(obj);}}}catch(Exceptione){System.out.println("查找用戶時(shí)產(chǎn)生異常。");e.printStackTrace();}returnuserDN;}publicbooleanauthenricate(StringUID,Stringpassword){booleanvalide=false;StringuserDN=getUserDN(UID);try{ctx.add
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 勞務(wù)生產(chǎn)合同范本
- 保安帶電 自營(yíng)合同范本
- 企業(yè)形象合同范本
- 公證送達(dá)合同范本
- 上船押金合同范本
- 共同領(lǐng)養(yǎng)寵物合同范本
- 勾調(diào)顧問(wèn)合作協(xié)議合同范本
- 公司租賃民房合同范本
- 勞保中標(biāo)合同范本
- 農(nóng)田包地合同范本
- 《中國(guó)人口老齡化》課件
- 靜脈采血最佳護(hù)理實(shí)踐相關(guān)知識(shí)考核試題
- 檢驗(yàn)檢測(cè)中心檢驗(yàn)員聘用合同
- 腰椎后路減壓手術(shù)
- 商場(chǎng)扶梯安全培訓(xùn)
- 《全科醫(yī)學(xué)概論》課件-以家庭為單位的健康照顧
- 自來(lái)水廠安全施工組織設(shè)計(jì)
- 《跟單信用證統(tǒng)一慣例》UCP600中英文對(duì)照版
- 《醫(yī)院應(yīng)急培訓(xùn)》課件
- 提高教育教學(xué)質(zhì)量深化教學(xué)改革措施
- 招標(biāo)代理機(jī)構(gòu)遴選投標(biāo)方案(技術(shù)標(biāo))
評(píng)論
0/150
提交評(píng)論