版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
OpenLDAP:用ACL控制訪問權(quán)限說明:這段時(shí)間我在學(xué)習(xí)Openldap的知識(shí),關(guān)于訪問控制權(quán)限這一塊遇上較大的麻煩。我在網(wǎng)上看到了一些人的帖子,有些寫的不錯(cuò),有些寫的不全,還有些完全是照抄別人的,還不注明出處。因此我把我搜集到的東西整理出一個(gè)文檔,獻(xiàn)給各位正在學(xué)習(xí)openldap的朋友,我的初衷是回饋社會(huì),支持免費(fèi)和開源,水平有限,諸多包涵。我所引用到的東西,我都將注明出處,感謝提供我信息的人,我想說,youarethegreatest。第一部分語法綜述1?用ACL控制授權(quán)我們?cè)贚DAP中創(chuàng)建目錄樹后,最感興趣的就是如何控制用戶在目錄樹中的權(quán)限(讀寫)。誰在什么條件下有記錄權(quán)限,我們有權(quán)限看到哪些信息。ACL(AccessControlList)訪問控制列表就是解決用戶權(quán)限問題的。2?我們要把ACL寫在哪里?ACL寫在OpenLDAP的服務(wù)端全局配置文件slapd.conf中,如下這段即為其指令:accesstodn.base=""by*readaccesstodn?base="cn=Subschema"by*readaccessto*byselfwritebyusersreadbyanonymousauth也可以寫在一個(gè)單獨(dú)的文件中,如access.conf,然后在全局配置文件slapd.conf中調(diào)用,在配置文件中引入這個(gè)文件即可,如下:include/etc/openldap/access.confinclude后面的路徑為該文件的放置地址。3.ACL語法基礎(chǔ)怎么看懂ACL指令?首先看下ACL訪問指令的格式:flIIIIIIIfIIffIIflIIIIIfIIflIIIIflIIIIIIIfIIffIIflIIIIIfIIflIIIIflIIIIIIIfIIffIIflIIIIIfIIflIIIIaccessto[resources]by[who][typeofaccessgranted][control]by[who][typeofaccessgranted][control]More'by'clauses,ifnecessary.???iiiiiiiiifiiiiiiitifififTiiiififiiiiiiiiifiiiiiiitifififTriiififiiiiiiiiifiiiiiiitifififTriiifif指令中包含1個(gè)to語句,多個(gè)by語句。這個(gè)指令的大體意思是,通過accessto約束我們?cè)L問的范圍(resources),通過by設(shè)定哪個(gè)用戶(who)獲取對(duì)這個(gè)約束范圍有什么權(quán)限(typeofaccessgranted),并控制(control)這個(gè)by語句完成后是否繼續(xù)執(zhí)行下一個(gè)by語句或者下一個(gè)ACL指令。Accessto[resources]resources可以有多種形式,如DN,attrs,F(xiàn)ilters.以下即詳細(xì)說明。3?1?通過約束DN進(jìn)行訪問(同層級(jí)訪問)如下所示,accesstodn="uid=matt,ou=Users,dc=example,dc=com"by*none這個(gè)指令是指訪問uid=matt,ou=Users,dc=example,dc=com這個(gè)DN,即把訪問的范圍約束在這個(gè)DN中。by*none是指對(duì)于任何人的訪問都是拒絕的。總體的意思就是,任何人都沒有權(quán)限訪問uid=matt,ou=Users,dc=example,dc=com這個(gè)DN,當(dāng)然,服務(wù)器管理員是可以訪問的,不然它無法維護(hù)這個(gè)OpenLDAP中的用戶信息。再來看一個(gè),accesstodn?subtree="ou=Users,dc=example,dc=com"by*none在這個(gè)例子中,我們用了dn?subtree。在我們的目錄信息樹中,在ou=Users子樹下可能有多個(gè)用戶。舉例來說,DN為uid=matt,ou=Users,dc=example,dc=com就是ou=Users,dc=example,dc=com的子樹,當(dāng)要試圖訪問他時(shí),這個(gè)ACL指令就起了作用??傮w的意思是,任何人都沒有權(quán)限訪問ou=Users,dc=example,dc=com以及其子樹的信息。#######################################################################dn.base:RestrictaccesstothisparticularDN.Thisisthedefault,anddn.exactanddn.baselevelaresynonyms(同義詞)ofdn.base.dn.one:RestrictaccesstoanyentriesimmediatelybelowthisDN.dn.onelevelisasynonym.dn.children:Restrictaccesstothechildren(subordinate)entriesofthisDN.Thisissimilartosubtree,exceptthatthegivenDNitselfisnotrestrictedbytherule.以上內(nèi)容意思是,dn.base:約束這個(gè)特定DN的訪問。他和dn.exact和dn.baselevel是相同的意思。dn.one:約束這個(gè)特定的DN第一級(jí)子樹的訪問。dn.onelevel是同義詞。dn.children:這個(gè)和dn.subtree類似,都是對(duì)其以下的子樹訪問權(quán)的約束。不同點(diǎn)在于,這個(gè)的約束是不包含自己本身DN。而subtree包含了本身的DN。#######################################################################對(duì)于dn的約束條件還可以利用模糊約束,如下:accesstodn.regex="uid=[A,]+,ou=Users,dc=example,dc=com"by*nonedn.regex是用來做匹配(match)用的。這個(gè)指令將約束所有uid=(任何值),ou=Users,dc=example,dc=com的DN,其中的任何值是用[A,]+這個(gè)符號(hào)組合來表示的,他可以代表任何至少有1個(gè)字符,且字符當(dāng)中沒有逗號(hào)(,)的值。更明確點(diǎn)說,意思就是在ou=Users,dc=example,dc=com這個(gè)DN下的所有以u(píng)id為屬性的一級(jí)子樹都屬于這個(gè)約束的范圍。3.2?通過約束attrs訪問(跨層級(jí)訪問)對(duì)于DN的約束大多用在對(duì)某個(gè)層級(jí)的約束,而用attrs的話,就可以跨層級(jí)(或者說跨越父類樹),通過屬性來約束訪問的范圍。accesstoattrs=homePhoneby*none這個(gè)例子意思是,任何人都沒有權(quán)限訪問屬性為homePhone的信息。在attrs后面的值可以多個(gè),如accesstoattrs=homePhone,homePostalAddress如果想約束某個(gè)對(duì)象類(Objectclass)的所有屬性,我們或許可以有這樣的形式:accesstoattrs=title,registeredAddress,destinationIndicator, 但這個(gè)方法太耗時(shí),也難以閱讀,顯得笨重,以下給出一個(gè)好的方法:accesstoattrs=@organizationalPersonby*none用@的方法必須謹(jǐn)慎,這段指令不僅僅約束了organizationalPerson里的屬性,也約束了person對(duì)象類的屬性。為什么?因?yàn)閛rganizationalPerson對(duì)象類是person的子類,因此,所有person中的屬性就當(dāng)然也是organizationalPerson的屬性了。如果想做除了organizationalPerson的其他對(duì)象類的約束,可以用!來表示:accesstoattrs=!organizationalPerson也可以加入屬性的值,具體約束某個(gè)值:accesstoattrs=givenNameval="Matt"這個(gè)指令也可以用模糊約束的方法,如下:accesstoattrs=givenNameval.regex="M.*"最后給個(gè)一般情況下用到的利用屬性約束的例子:accesstoattrs=memberval.children="ou=Users,dc=example,dc=com"by*none3?3?通過Filters訪問Filters提供一種支持條目記錄匹配的方法,如下:accesstofilter="(objectClass=simpleSecurityObject)"by*none這表示我們可以約束所有記錄中包含對(duì)象類為simpleSecurityObject的信息。與編程語言類似,ACL指令也有類似與或的條件判斷,如下:accesstofilter="(|(|(givenName=Matt)(givenName=Barbara))(sn=Kant))"by*none這段代碼過濾出givenName為Matt或者Barbara,或者surname為Kant的信息。第二部分例子說明例子1#ACLconfigure以下內(nèi)容定義訪問控制accesstoattr=userPassword #只能由自已修改usrPassword有效驗(yàn)證用戶査詢。byselfwritebyanonymousauthaccesstoattr=mailbydn="cn=root,dc=it,dc=com"write #只能由自已修改mail,有效驗(yàn)證用戶査詢。byselfwritebyanonymousauthaccesstodn=".*,dc=it,dc=com" #允許所有人査詢沒受控制訪問限制的信息。byselfwriteby*read例子2Theaccesscontrolfacilitydescribedaboveisquitepowerful.Thissectionshowssomeexamplesofitsusefordescriptivepurposes.Asimpleexample:accessto*by*read//所有用戶可以readThisaccessdirectivegrantsreadaccesstoeveryone.accessto*byselfwritebyanonymousauthby*readThisdirectiveallowstheusertomodifytheirentry,allowsanonymoustoauthenticationagainsttheseentries,andallowsallotherstoreadtheseentries.Notethatonlythefirstbyclausewhichmatchesapplies.Hence,theanonymoususersaregrantedauth,notread.Thelastclausecouldjustaswellhavebeen"byusersread".Itisoftendesirabletorestrictoperationsbaseduponthelevelofprotectioninplace.Thefollowingshowshowsecuritystrengthfactors(SSF)canbeused.accessto*byssf=128selfwritebyssf=64anonymousauthbyssf=64usersreadThisdirectiveallowsuserstomodifytheirownentriesifsecurityprotectionshaveofstrength128orbetterhavebeenestablished,allowsauthenticationaccesstoanonymoususers,andreadaccesswhen64orbettersecurityprotectionshavebeenestablished.Ifclienthasnotestablishsufficientsecurityprotections,theimplicitby*noneclausewouldbeapplied.ThefollowingexampleshowstheuseofastylespecifierstoselecttheentriesbyDNintwoaccessdirectiveswhereorderingissignificant.accesstodn.children="dc=example,dc=com"by*searchaccesstodn.children="dc=com"by*readReadaccessisgrantedtoentriesunderthedc=comsubtree,exceptforthoseentriesunderthedc=example,dc=comsubtree,towhichsearchaccessisgranted.Noaccessisgrantedtodc=comasneitheraccessdirectivematchesthisDN.Iftheorderoftheseaccessdirectiveswasreversed,thetrailingdirectivewouldneverbereached,sinceallentriesunderdc=example,dc=comarealsounderdc=comentries.Alsonotethatifnoaccesstodirectivematchesornobyclause,accessisdenied.Thatis,everyaccesstodirectiveendswithanimplicitby*noneclauseandeveryaccesslistendswithanimplicitaccessto*by*nonedirective.Thenextexampleagainshowstheimportanceofordering,bothoftheaccessdirectivesandthebyclauses.Italsoshowstheuseofanattributeselectortograntaccesstoaspecificattributeandvariousselectors.accesstodn.subtree="dc=example,dc=com"attr=homePhonebyselfwritebydn.children="dc=example,dc=com"searchbypeername.regex=IP:10\..+readaccesstodn.subtree="dc=example,dc=com"byselfwritebydn.children="dc=example,dc=com"searchbyanonymousauthThisexampleappliestoentriesinthe"dc=example,dc=com"subtree.ToallattributesexcepthomePhone,anentrycanwritetoitself,entriesunder/r/entriescansearchbythem,anybodyelsehasnoaccess(implicitby*none)exceptingforauthentication/authorization(whichisalwaysdoneanonymously).ThehomePhoneattributeiswritablebytheentry,searchablebyentriesunder/r/,readablebyclientsconnectingfromnetwork10,andotherwisenotreadable(implicitby*none).Allotheraccessisdeniedbytheimplicitaccessto*by*none.SometimesitisusefultopermitaparticularDNtoaddorremoveitselffromanattribute.Forexample,ifyouwouldliketocreateagroupandallowpeopletoaddandremoveonlytheirownDNfromthememberattribute,youcouldaccomplishitwithanaccessdirectivelikethis:accesstoattr=member,entrybydnattr=memberselfwriteThednattrselectorsaysthattheaccessappliestoentrieslistedinthememberattribute.TheselfwriteaccessselectorsaysthatsuchmemberscanonlyaddordeletetheirownDNfromtheattribute,notothervalues.Theadditionoftheentryattributeisrequiredbecauseaccesstotheentryisrequiredtoaccessanyoftheentry'sattributes.例子3accesstodn=”.*,dc=it,dc=com”attr=userPasswordbydn=”cn=root,dc=it,dc=com”writebyselfwriteby*authaccesstodn=”.*,dc=it,dc=com”attr=mailbydn=”cn=root,dc=it,dc=com”writebyselfwriteby*readaccesstodn=”.*,ou=people,dc=it,dc=com”by*readaccesstodn=”.*,dc=it,dc=com”byselfwriteby*read上面的配置僅允許userPassword屬性的所有者修改項(xiàng),但僅當(dāng)所有者提供他或她的優(yōu)先密碼時(shí)才允許進(jìn)行修改。在所有其它情況下,只能出于認(rèn)證目的來訪問該項(xiàng),而不能查看它。第二個(gè)accessto項(xiàng)允許用戶修改自己的電子郵件地址(attr=mail)。第三個(gè)項(xiàng)指定除了rootdn夕卜,對(duì)于所有人,ou=people,dc=it,dc=com中的任何DN都是只讀的。這可防止用戶更改其用戶名、uid、gid和主目錄等。最后,最后一項(xiàng)是包容前面訪問控制中未涉及的任何東西的安全的“大雜燴”。例如,它允許用戶更改其自己地址簿中的項(xiàng)。第三部分總結(jié)訪問控制列表的最后說明:3.1語法accessto<what>[by<who><access><control>]+其中,accessto指示啟用訪問控制,上句大致可以理解為:accessto<對(duì)什么目標(biāo)進(jìn)行控制>[by<作用于哪些訪問者><授予什么樣的訪問權(quán)限x采取什么樣的匹配控制動(dòng)作>]+3.2剖析3.2.1控制目標(biāo)<what>這一域主要是實(shí)現(xiàn)對(duì)ACL應(yīng)用對(duì)象的指定,對(duì)象可以是記錄和屬性。選擇ACL目標(biāo)記錄的方法一般有兩種:DN和filter,語法為:<what>::=*|[dn[.<basic-style>]=<regex>|dn.<scope-style>=<DN>][filter=<ldapfilter>][attrs=<attrlist>]指定所有的記錄accessto*通過DN指定語法如下:todn[.<basic-style>]=<regex><basic-style>::=regex|exacttodn.<scope-style>=<DN><scope-style>::=base|one|subtree|children第一種方法是使用正則表達(dá)式(dn.regex)或精確匹配(dn.style)的方式來匹配符合條件的記錄(這個(gè)好像不像想象的那么簡單,實(shí)現(xiàn)起來頗為費(fèi)腦筋),例如:accesstodn="A.*,uid=([A,]+),ou=users,(.*)$"第二種方法通過“區(qū)域”選擇的方法進(jìn)行目標(biāo)記錄的選取,對(duì)以指定的DN開始的目錄樹區(qū)域進(jìn)行目標(biāo)記錄匹配。匹配區(qū)域的方式共有四種:base只匹配DN本身一條記錄one匹配以給定DN為父目錄的所有記錄subtree匹配以給定DN為根目錄的所有子樹內(nèi)的記錄children匹配給定DN下的所有記錄,但應(yīng)該不包括以DN直接命名的那條記錄(參見例子的解釋)例如:對(duì)于0:dc=mydomain,dc=org1:cn=root,dc=mydomain,dc=org2:ou=users,dc=mydomain,dc=org3:uid=samba,ou=users,dc=mydomain,dc=org4:cn=Administator,uid=samba,ou=users,dc=mydomain,dc=org5:uid=guest,ou=users,dc=mydomain,dc=org規(guī)則dn.base="ou=users,dc=mydomain,dc=org"只會(huì)匹配記錄2規(guī)則dn.one="ou=users,dc=mydomain,dc=org"匹配記錄3和記錄5,記錄4是記錄3的子目錄,故不算在內(nèi)規(guī)則dn.subtree="ou=users,dc=mydomain,dc=org"匹配記錄2、3、4、5規(guī)則dn.children="ou=users,dc=mydomain,dc=org"匹配記錄3、4、5,因?yàn)橛涗?、1和2都是以DN直接命名的,故不匹配通過filter匹配記錄通過filter指定過濾規(guī)則進(jìn)行記錄過慮,語法如下:accesstofilter=<ldapfilter>其中filter指定的為search的過濾規(guī)則,這類同于linux系統(tǒng)中g(shù)rep的匹配方式。如:accesstofilter=(objectClass=sambaSamAccount)也可以結(jié)合使用DN和filter進(jìn)行記錄的匹配,例如:accesstodn.subtree="ou=users,dc=mydomain,dc=org"filter=(objectClass=posixAccount)通過attrs選取匹配記錄語法:attrs=<attributelist>例如:accesstoattrs=uid,uidNumber,gidNumber也可以結(jié)合使用DN和attrs進(jìn)行記錄的匹配,例如:accesstodn.subtree="ou=users,dc=mydomain,dc=org"attrs=uid3.2.2被用來授權(quán)的訪問者vwho>的指定指定被授權(quán)的用戶范圍的方法大致有以下幾種:所有的訪問者,包括匿名的用戶anonymous非認(rèn)證的匿名用戶users認(rèn)證的用戶self目標(biāo)記錄的用戶自身dn[.vbasic-style>]=vregex>在指定目錄內(nèi)匹配正則表達(dá)式的用戶dn.vscope-style>=vDN>指定DN內(nèi)的用戶例如:bydn.subtree="ou=users,dc=domain,dc=org"="Asam
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五年度水路貨運(yùn)運(yùn)輸承包服務(wù)合同2篇
- 二零二五版水電安裝工程安全評(píng)估與施工合同2篇
- 二零二五版農(nóng)業(yè)貸款定金合同規(guī)范文本3篇
- 二零二五版幼兒園教師勞動(dòng)權(quán)益保護(hù)及勞動(dòng)合同解除程序協(xié)議3篇
- 二零二五版房產(chǎn)托管居間服務(wù)合同協(xié)議3篇
- 二零二五年房地產(chǎn)物業(yè)管理合作開發(fā)合同3篇
- 二零二五年度重點(diǎn)單位保安勤務(wù)合同5篇
- 二零二五版微電影導(dǎo)演定制化拍攝合同3篇
- 二零二五版KTV員工心理健康關(guān)愛計(jì)劃合同2篇
- 二零二五年度高端酒店場(chǎng)地租賃合同范本2篇
- 中央空調(diào)售后服務(wù)普及培訓(xùn)螺桿機(jī)篇
- 脫水篩 說明書
- 小學(xué)生體育鍛煉習(xí)慣的培養(yǎng)
- 建筑公司年度工作總結(jié)及計(jì)劃(6篇)
- 2023年昆明貴金屬研究所招聘筆試模擬試題及答案解析
- 硫酸裝置試生產(chǎn)方案
- 國家重點(diǎn)??婆R床護(hù)理專業(yè)評(píng)選標(biāo)準(zhǔn)
- DB11T 1944-2021 市政基礎(chǔ)設(shè)施工程暗挖施工安全技術(shù)規(guī)程
- 中國農(nóng)業(yè)核心期刊要目概覽
- 好聽簡單的鋼琴譜
- 技術(shù)咨詢合同書(浙江省科學(xué)技術(shù)廳監(jiān)制)
評(píng)論
0/150
提交評(píng)論