




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
OpenLDAP:用ACL控制訪問權(quán)限說明:這段時間我在學(xué)習(xí)Openldap的知識,關(guān)于訪問控制權(quán)限這一塊遇上較大的麻煩。我在網(wǎng)上看到了一些人的帖子,有些寫的不錯,有些寫的不全,還有些完全是照抄別人的,還不注明出處。因此我把我搜集到的東西整理出一個文檔,獻給各位正在學(xué)習(xí)openldap的朋友,我的初衷是回饋社會,支持免費和開源,水平有限,諸多包涵。我所引用到的東西,我都將注明出處,感謝提供我信息的人,我想說,youarethegreatest。第一部分語法綜述1?用ACL控制授權(quán)我們在LDAP中創(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也可以寫在一個單獨的文件中,如access.conf,然后在全局配置文件slapd.conf中調(diào)用,在配置文件中引入這個文件即可,如下: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個to語句,多個by語句。這個指令的大體意思是,通過accessto約束我們訪問的范圍(resources),通過by設(shè)定哪個用戶(who)獲取對這個約束范圍有什么權(quán)限(typeofaccessgranted),并控制(control)這個by語句完成后是否繼續(xù)執(zhí)行下一個by語句或者下一個ACL指令。Accessto[resources]resources可以有多種形式,如DN,attrs,F(xiàn)ilters.以下即詳細說明。3?1?通過約束DN進行訪問(同層級訪問)如下所示,accesstodn="uid=matt,ou=Users,dc=example,dc=com"by*none這個指令是指訪問uid=matt,ou=Users,dc=example,dc=com這個DN,即把訪問的范圍約束在這個DN中。by*none是指對于任何人的訪問都是拒絕的??傮w的意思就是,任何人都沒有權(quán)限訪問uid=matt,ou=Users,dc=example,dc=com這個DN,當(dāng)然,服務(wù)器管理員是可以訪問的,不然它無法維護這個OpenLDAP中的用戶信息。再來看一個,accesstodn?subtree="ou=Users,dc=example,dc=com"by*none在這個例子中,我們用了dn?subtree。在我們的目錄信息樹中,在ou=Users子樹下可能有多個用戶。舉例來說,DN為uid=matt,ou=Users,dc=example,dc=com就是ou=Users,dc=example,dc=com的子樹,當(dāng)要試圖訪問他時,這個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:約束這個特定DN的訪問。他和dn.exact和dn.baselevel是相同的意思。dn.one:約束這個特定的DN第一級子樹的訪問。dn.onelevel是同義詞。dn.children:這個和dn.subtree類似,都是對其以下的子樹訪問權(quán)的約束。不同點在于,這個的約束是不包含自己本身DN。而subtree包含了本身的DN。#######################################################################對于dn的約束條件還可以利用模糊約束,如下:accesstodn.regex="uid=[A,]+,ou=Users,dc=example,dc=com"by*nonedn.regex是用來做匹配(match)用的。這個指令將約束所有uid=(任何值),ou=Users,dc=example,dc=com的DN,其中的任何值是用[A,]+這個符號組合來表示的,他可以代表任何至少有1個字符,且字符當(dāng)中沒有逗號(,)的值。更明確點說,意思就是在ou=Users,dc=example,dc=com這個DN下的所有以uid為屬性的一級子樹都屬于這個約束的范圍。3.2?通過約束attrs訪問(跨層級訪問)對于DN的約束大多用在對某個層級的約束,而用attrs的話,就可以跨層級(或者說跨越父類樹),通過屬性來約束訪問的范圍。accesstoattrs=homePhoneby*none這個例子意思是,任何人都沒有權(quán)限訪問屬性為homePhone的信息。在attrs后面的值可以多個,如accesstoattrs=homePhone,homePostalAddress如果想約束某個對象類(Objectclass)的所有屬性,我們或許可以有這樣的形式:accesstoattrs=title,registeredAddress,destinationIndicator, 但這個方法太耗時,也難以閱讀,顯得笨重,以下給出一個好的方法:accesstoattrs=@organizationalPersonby*none用@的方法必須謹慎,這段指令不僅僅約束了organizationalPerson里的屬性,也約束了person對象類的屬性。為什么?因為organizationalPerson對象類是person的子類,因此,所有person中的屬性就當(dāng)然也是organizationalPerson的屬性了。如果想做除了organizationalPerson的其他對象類的約束,可以用!來表示:accesstoattrs=!organizationalPerson也可以加入屬性的值,具體約束某個值:accesstoattrs=givenNameval="Matt"這個指令也可以用模糊約束的方法,如下:accesstoattrs=givenNameval.regex="M.*"最后給個一般情況下用到的利用屬性約束的例子:accesstoattrs=memberval.children="ou=Users,dc=example,dc=com"by*none3?3?通過Filters訪問Filters提供一種支持條目記錄匹配的方法,如下:accesstofilter="(objectClass=simpleSecurityObject)"by*none這表示我們可以約束所有記錄中包含對象類為simpleSecurityObject的信息。與編程語言類似,ACL指令也有類似與或的條件判斷,如下:accesstofilter="(|(|(givenName=Matt)(givenName=Barbara))(sn=Kant))"by*none這段代碼過濾出givenName為Matt或者Barbara,或者surname為Kant的信息。第二部分例子說明例子1#ACLconfigure以下內(nèi)容定義訪問控制accesstoattr=userPassword #只能由自已修改usrPassword有效驗證用戶査詢。byselfwritebyanonymousauthaccesstoattr=mailbydn="cn=root,dc=it,dc=com"write #只能由自已修改mail,有效驗證用戶査詢。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屬性的所有者修改項,但僅當(dāng)所有者提供他或她的優(yōu)先密碼時才允許進行修改。在所有其它情況下,只能出于認證目的來訪問該項,而不能查看它。第二個accessto項允許用戶修改自己的電子郵件地址(attr=mail)。第三個項指定除了rootdn夕卜,對于所有人,ou=people,dc=it,dc=com中的任何DN都是只讀的。這可防止用戶更改其用戶名、uid、gid和主目錄等。最后,最后一項是包容前面訪問控制中未涉及的任何東西的安全的“大雜燴”。例如,它允許用戶更改其自己地址簿中的項。第三部分總結(jié)訪問控制列表的最后說明:3.1語法accessto<what>[by<who><access><control>]+其中,accessto指示啟用訪問控制,上句大致可以理解為:accessto<對什么目標(biāo)進行控制>[by<作用于哪些訪問者><授予什么樣的訪問權(quán)限x采取什么樣的匹配控制動作>]+3.2剖析3.2.1控制目標(biāo)<what>這一域主要是實現(xiàn)對ACL應(yīng)用對象的指定,對象可以是記錄和屬性。選擇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第一種方法是使用正則表達式(dn.regex)或精確匹配(dn.style)的方式來匹配符合條件的記錄(這個好像不像想象的那么簡單,實現(xiàn)起來頗為費腦筋),例如:accesstodn="A.*,uid=([A,]+),ou=users,(.*)$"第二種方法通過“區(qū)域”選擇的方法進行目標(biāo)記錄的選取,對以指定的DN開始的目錄樹區(qū)域進行目標(biāo)記錄匹配。匹配區(qū)域的方式共有四種:base只匹配DN本身一條記錄one匹配以給定DN為父目錄的所有記錄subtree匹配以給定DN為根目錄的所有子樹內(nèi)的記錄children匹配給定DN下的所有記錄,但應(yīng)該不包括以DN直接命名的那條記錄(參見例子的解釋)例如:對于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"只會匹配記錄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,因為記錄0、1和2都是以DN直接命名的,故不匹配通過filter匹配記錄通過filter指定過濾規(guī)則進行記錄過慮,語法如下:accesstofilter=<ldapfilter>其中filter指定的為search的過濾規(guī)則,這類同于linux系統(tǒng)中g(shù)rep的匹配方式。如:accesstofilter=(objectClass=sambaSamAccount)也可以結(jié)合使用DN和filter進行記錄的匹配,例如:accesstodn.subtree="ou=users,dc=mydomain,dc=org"filter=(objectClass=posixAccount)通過attrs選取匹配記錄語法:attrs=<attributelist>例如:accesstoattrs=uid,uidNumber,gidNumber也可以結(jié)合使用DN和attrs進行記錄的匹配,例如:accesstodn.subtree="ou=users,dc=mydomain,dc=org"attrs=uid3.2.2被用來授權(quán)的訪問者vwho>的指定指定被授權(quán)的用戶范圍的方法大致有以下幾種:所有的訪問者,包括匿名的用戶anonymous非認證的匿名用戶users認證的用戶self目標(biāo)記錄的用戶自身dn[.vbasic-style>]=vregex>在指定目錄內(nèi)匹配正則表達式的用戶dn.vscope-style>=vDN>指定DN內(nèi)的用戶例如:bydn.subtree="ou=users,dc=domain,dc=org"="Asam
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 建設(shè)工程施工索賠研究
- 2025年廚師工作總結(jié)范文(16篇)
- 2025工程技術(shù)員年度工作總結(jié)(15篇)
- 八年級演講文稿(18篇)
- 清潔培訓(xùn)課件
- 銷售月計劃書(34篇)
- 企業(yè)學(xué)員培訓(xùn)心得體會感悟(18篇)
- 初中物理人教版八年級下冊第十二章 簡單機械綜合與測試教案
- 2025國學(xué)心得體會(15篇)
- 2025大一新生軍訓(xùn)體會(7篇)
- 訂餐協(xié)議合同協(xié)議
- 房屋征拆合同協(xié)議
- 湖北省武漢市2025屆高中畢業(yè)生四月調(diào)研考試數(shù)學(xué)試卷及答案(武漢四調(diào))
- Unit 1 Growing up (Period 1)(教學(xué)設(shè)計)-2024-2025學(xué)年滬教牛津版(深圳用)英語六年級上冊
- 湖南湘潭高新集團有限公司招聘考試真題2024
- 2025春季學(xué)期國開電大本科《政府經(jīng)濟學(xué)》一平臺在線形考(形考任務(wù)1至4)試題及答案
- 2025年中小學(xué)教師資格考試進階試題及答案
- 2025年03月四川成都農(nóng)業(yè)科技中心公開招聘筆試歷年典型考題(歷年真題考點)解題思路附帶答案詳解
- 2024年北京體育大學(xué)招聘考試真題
- 防災(zāi)減災(zāi)應(yīng)急知識培訓(xùn)
- 2025年志愿者服務(wù)日知識競賽考試指導(dǎo)題庫150題(含答案)
評論
0/150
提交評論