作者: daiker@360RedTeam
這篇文章主要介紹AD里面的組和組織單位(OU)。
在LDAP 里面,有些字段是位字段,這里以userAccountControl舉例,關(guān)于這個(gè)字段的詳細意義,后面會(huì )詳細介紹,這里先把他當做一個(gè)普通的位字段,不去考慮他的具體含義,這里先看下他的內容。
他的屬性類(lèi)位于架構分區的CN=User-Account-Control,CN=Schema,CN=Configuration,DC=test,DC=local
attributeSyntax是2.5.5.9,oMSyntax是2。
查表可知是32位的Integer類(lèi)型。
之所以我們說(shuō)他是位字段,是因為他是由一個(gè)個(gè)位構成。
比如說(shuō)一個(gè)賬戶(hù),他的LOCKOUT,以及NOT_DELEGATED,其他的位都沒(méi)有,那這個(gè)用戶(hù)的屬性userAccountControl的值就為0x100000+0x0010。是個(gè)32 位 int 類(lèi)型。
那現在的難題就變成。如果我要搜索域內所有設置了NOT_DELEGATED的所有對象。那在上一篇文章里面我們學(xué)到的LDAP語(yǔ)法就顯得力不從心。因為上一篇文章的語(yǔ)法只能對某個(gè)屬性進(jìn)行過(guò)濾,還不能對屬性里面的某個(gè)具體位進(jìn)行過(guò)濾,這也是我們這一節要講的內容。LDAP的語(yǔ)法支持按位搜索。
執行過(guò)濾器以搜索位字段,必須遵循以下語(yǔ)法:
<屬性名稱(chēng)>:<BitFilterRule-ID> := <十進(jìn)制比較值>其中的<BitFilterRule-ID>,內容如下。
我們最常的是AND ,也就是1.2.840.113556.1.4.803
我們舉幾個(gè)例子。
我們想查詢(xún)哪些對象設置了TRUSTED_FOR_DELEGATION
TRUSTED_FOR_DELEGATION對應的十進(jìn)制比較值位524288
根據語(yǔ)法,我們就可以構造以下過(guò)濾規則
(userAccountControl:1.2.840.113556.1.4.803:=524288)但是這種我們還得去記BitFilterRule,于是adfind提供了一個(gè)更為快捷的方式。
在前面一節里面說(shuō)過(guò),在對象的objectClass 屬性里面,可以看到這個(gè)對象是哪個(gè)類(lèi)的實(shí)例,以及這個(gè)類(lèi)的所有父類(lèi),比如說(shuō)CN=jane,CN=Users,DC=test,DC=local的objectClass是top,person,organizationalPerson,user。那我們通過(guò)過(guò)濾語(yǔ)句(objectClass=user),(objectClass=organizationalPerson)都能找到這個(gè)對象。
所有的類(lèi)都是top類(lèi)的子類(lèi)。因此當我們過(guò)濾(objectClass=top)可以找到域內的所有對象。
在Windows Server 2008之前默認不對objectClass 屬性進(jìn)行索引。最初認為對多值屬性(例如object Class)進(jìn)行索引會(huì )導致性能下降。如此一來(lái),Windows 2000 附帶了未索引的objectClass 屬性和另一個(gè)已建立索引的單值屬性,稱(chēng)為objectCategory。
接下來(lái)介紹下objectCategory這個(gè)屬性。對象類(lèi)的每個(gè)實(shí)例還具有一個(gè)objectCategory屬性,該屬性是一個(gè)單值屬性。并且建立了索引。其中包含對象是其實(shí)例的類(lèi)或其父類(lèi)之一的專(zhuān)有名稱(chēng)。
比如說(shuō)CN=jane,CN=Users,DC=test,DC=local.他的objectCategory是CN=Person,CN=Schema,CN=Configuration,DC=test,DC=local
創(chuàng )建對象時(shí),系統會(huì )將其objectCategory屬性設置為由其對象類(lèi)的defaultObjectCategory屬性指定的值。無(wú)法更改對象的objectCategory屬性。
如果我們想過(guò)濾所有objectCategory的屬性為CN=Person,CN=Schema,CN=Configuration,DC=test,DC=local的對象,這個(gè)很簡(jiǎn)單。
(objectCategory="CN=Person,CN=Schema,CN=Configuration,DC=test,DC=local")但是這樣,又有點(diǎn)不方便,需要記住記住類(lèi)的DN,所以L(fǎng)DAP在實(shí)現上實(shí)現了個(gè)小技巧。對象類(lèi)有個(gè)屬性lDAPDisplayName,指定他的顯示名。事實(shí)上,我們看objectClass屬性里面的類(lèi)以及父類(lèi)(比如top.person),他的名字都是這個(gè)類(lèi)的lDAPDisplayName
CN=Person,CN=Schema,CN=Configuration,DC=test,DC=local的lDAPDisplayName是person.所以L(fǎng)DAP在實(shí)現上,支持用類(lèi)的lDAPDisplayName作為搜索條件。所以如果我們想找所有CN=Person,CN=Schema,CN=Configuration,DC=test,DC=local的實(shí)例,可以我簡(jiǎn)化為以下過(guò)濾規則。
(objectCategory=person)如果想確保查詢(xún)在所有版本的Active Directory上都能正常運行,建議使用 objectClass 和objectCategory結合。如果在目錄中已經(jīng)索引了ObjectClass ,或者所有域控制器都在運行Windows Server 2008或更高版本,則可以隨意使用 objectClass,而不必擔心會(huì )對性能產(chǎn)生影響。
這里我們介紹下objectClass 和objectCategory的集合使用。前面我們分別介紹了objectClass 以及objectCategory,但是沒(méi)講怎么把他們結合在一起使用。
我們這里再來(lái)理一理思路。
CN=jane,CN=Users,DC=test,DC=local這個(gè)對象。
他的objectClass是top,person,organizationalPerson,user。
他的objectCategory是person。
一個(gè)對象的objectClass 是一個(gè)類(lèi)的對象類(lèi),以及這個(gè)對象類(lèi)的所有父類(lèi)。
一個(gè)對象的objectCategory 是一個(gè)類(lèi)的對象類(lèi)或者這個(gè)對象類(lèi)的所有父類(lèi)。
所以說(shuō)一個(gè)對象的objectCategory 必定是objectClass 中的其中一個(gè)。
user,person,organizationalPerson類(lèi)將其defaultObjectCategory設置為person。這允許像(objectCategory= person)這樣的搜索過(guò)濾器通過(guò)單個(gè)查詢(xún)定位所有這些類(lèi)的實(shí)例。
比如說(shuō),我們要定位所有的user 類(lèi)的實(shí)例。(CN=jane,CN=Users,DC=test,DC=local就是user類(lèi)的一個(gè)對象)
user 類(lèi)的繼承關(guān)系如下。
top => person => organizationalPerson => user那person,organizationalPerson,user都將其defaultObjectCategory設置為person。因此我們可以先過(guò)濾。
(objectCategory=person)但是這樣的結果并不精準。我們使用objectClass進(jìn)一步在過(guò)濾后的結果進(jìn)行過(guò)濾
(&(objectCategory=person)(objectClass=user))這樣就能精準匹配到了。其實(shí)說(shuō)通俗點(diǎn)就是,objectCategory建立索引,所以查詢(xún)時(shí)間比較快。我們通過(guò)objectCategory劃分一個(gè)大的范圍,然后通過(guò)objectClass進(jìn)行精準匹配。
當然如果在目錄中已經(jīng)索引了ObjectClass ,或者所有域控制器都在運行Windows Server 2008或更高版本,我們直接使用 objectClass((objectClass=user))也能很精準地匹配并且不用考慮效率問(wèn)題。
在域內,我們無(wú)時(shí)無(wú)刻不在跟組打交道,比如我們熟悉的域管,就是一個(gè)組。按照用途來(lái)分,組分為通訊組和安全組。對于通訊組,我們接觸的比較多的就是郵件組,將若干個(gè)人劃分到一個(gè)通訊組,給這個(gè)通訊組發(fā)件,那組內用戶(hù)都能收到。但是通訊組不能控制對資源的訪(fǎng)問(wèn),我們并不是很在意。這篇文章側重介紹安全組。
安全組是權限的集合。舉個(gè)例子,運維需要對公司的網(wǎng)絡(luò )進(jìn)行管理,需要一些特殊的管理權限,我們就可以設置個(gè)組,對組配置權限。然后將運維拉近組里面,組里面的運維就擁有了該權限。安全組可以根據作用范圍劃分為。
所有的組都是group類(lèi)的實(shí)例,
我們可以用(objectClass=group)或者(objectCategory=group)來(lái)過(guò)濾組。
如果需要考慮效率建議使用,正如前面所說(shuō)objectCategory有建立索引。而objectClass在08之前并沒(méi)有建立索引。
那為啥不需要objectClass 和objectCategory配合使用。
我們之前說(shuō)了,一般配合使用的場(chǎng)景都是通過(guò)objectCategory匹配劃分一個(gè)大的范圍,然后通過(guò)objectClass進(jìn)行精準匹配。這里面通過(guò)objectCategory匹配到的已經(jīng)是很精準了,就不需要再精準匹配了。
組的類(lèi)型由屬性groupType決定,屬性groupType是一個(gè)位字段
現在我們搜索一下







之前說(shuō)過(guò)安全組可以根據作用范圍劃分為。
先看個(gè)表格,比較下三個(gè)組。
| 組類(lèi)型 | 可以授予權限 | 可包含 | 可包含于 | 成員是否在全局編錄復制 |
|---|---|---|---|---|
| 全局組 | 在同一林中或信任域或林中的任何域上。 | 來(lái)自同一域的帳戶(hù)。 來(lái)自同一域的其他全局組 | 來(lái)自同一林中任何域的通用組。 來(lái)自同一域的其他全局組。 來(lái)自同一林中任何域或任何信任域的域本地組。 | 無(wú) |
| 通用組 | 在同一林或信任林中的任何域上。 | 來(lái)自同一林中任何域的帳戶(hù)。 來(lái)自同一林中任何域的全局組。 來(lái)自同一林中任何域的其他通用組。 | 同一林中的其他通用組。 在同一個(gè)林或信任林中域本地組。 | 是 |
| 域本地組 | 在同一個(gè)域中 | 來(lái)自任何域或任何受信任域的帳戶(hù)。 來(lái)自任何域或任何受信任域的全局組。 來(lái)自同一林中任何域的通用組。 來(lái)自同一域的其他域本地組。 | 來(lái)自同一域的其他域本地組。 | 無(wú) |
為了更直觀(guān),畫(huà)了個(gè)圖
接下來(lái)詳細介紹下三個(gè)組
顧名思義,就是本域內的本地組。不適用于林,適用于本域??砂謨鹊馁~戶(hù),通用組,全局組。其他域內的通用組要在本域擁有權限,一般都是加入這個(gè)域的域本地組。比如說(shuō)一個(gè)林里面,只有林根域有Enterprise Admins這個(gè)組,這是個(gè)通用組。然后其他子域 的域本地組Administrators會(huì )把林根域的Enterprise Admins加進(jìn)里面,所以林根域的Enterprise Admins組用戶(hù)才在整個(gè)林內具備管理員權限。如果想要一個(gè)只允許訪(fǎng)問(wèn)同一個(gè)域中的資源的組,那么使用域本地組即可。
上面已經(jīng)簡(jiǎn)單提過(guò)了通用組,典型例子是Enterprise Admins這個(gè)組。在林的場(chǎng)景下比較有用。組內成員會(huì )在GC內復制。如果你想要一個(gè)可以訪(fǎng)問(wèn)林中任何東西的組,并且可以在林中包含任何賬戶(hù),請使用通用組。
全局組比較復雜,前面說(shuō)了。在單域內用域本地組,在林中使用通用組。全局組應該說(shuō)是一種比較折中的方案,他可以在林中使用,但是只能包含本域內的賬戶(hù)。全局組的使用范圍是本域以及受信任關(guān)系的其他域。最為常見(jiàn)的全局組是Domain Admin,也就是我們常說(shuō)的域管。因為全局組只能包含本域內賬戶(hù),因此來(lái)自一個(gè)域的賬戶(hù)不能嵌套在另一個(gè)域中的全局組中,這就是為什么來(lái)自同一個(gè)域的用戶(hù)不符合在外部域中的域管的成員資格(由于其全局范圍的影響)。
域本地組。具備系統管理員的權限,擁有對整個(gè)域最大的控制權,可以執行整個(gè)域的管理任務(wù)。Administrators包括Domain Admins和Enterprise Admins。
全局組。我們常說(shuō)的域管組。默認情況下,域內所有機器會(huì )把Domain Admins加入到本地管理員組里面。
通用組。在林中,只有林根域才有這個(gè)組,林中其他域沒(méi)有這個(gè)組,但是其他域默認會(huì )把這個(gè)組加入到本域的Administrators里面去。
全局組。包括域中所有用戶(hù)帳戶(hù),在域中創(chuàng )建用戶(hù)帳戶(hù)后,該帳戶(hù)將自動(dòng)添加到該組中。默認情況下,域內所有機器會(huì )把Domain Users加入到本地用戶(hù)組里面,也就是為什么默認情況底下,啥都不配置。域用戶(hù)可以登錄域內任何一臺普通成員機器。
更多的常見(jiàn)組,會(huì )在后續要使用到的時(shí)候進(jìn)行介紹,這里不一一介紹了。
安全組是權限的集合,所以在微軟的建議中,并不建議給賦予單個(gè)用戶(hù)權限,而是賦予一個(gè)組權限,然后將成員拉近組。下面介紹下AGDLP策略。這里直接用網(wǎng)上的圖。
有常見(jiàn)的幾種權限劃分方式
如果group4 是group2 組內的成員
那么group2有個(gè)屬性member 標識group4是它的成員。
group4有個(gè)屬性memberOf 標識它是group2的成員
根據這兩個(gè)屬性,我們就可以開(kāi)始過(guò)濾了。
我們舉個(gè)例子。
在我們有四個(gè)組(group1,group2,group3,group4),一個(gè)用戶(hù)(it-1)。
上面箭頭意思是組成員
group1 這個(gè)組里面有一個(gè)成員group2
group2 這個(gè)組里面有兩個(gè)個(gè)成員group4和it-1
group3 這個(gè)組里面有一個(gè)成員it-1
那我們開(kāi)始進(jìn)行搜索。
(1) 查看group2有哪些成員
最簡(jiǎn)單的,查看group2 這個(gè)對象的member屬性
或者過(guò)濾memberOf為group2的所有對象
(2) 查看it-1 屬于哪些組
最簡(jiǎn)單的,查看it-1 這個(gè)對象的memberOf屬性
或者過(guò)濾member為it-1的所有對象
(3) 查看group1有哪些成員,這些成員如果是組,就繼續查下去,知道非組成員為止。
上面兩個(gè)都比較好理解,接下來(lái),我們來(lái)分析一下。
在這里
如果僅僅是查group1有哪些成員,那就只有group2,但是我們現在的需求是遞歸查下去,group2也是一個(gè)組,組內又有哪些成員。從圖中我們可以看出有group2,group4,it-1
這里L(fēng)DAP 給我們提供一個(gè)特性,也是位操作符的一部分。BitFilterRule-ID 為1.2.840.113556.1.4.1941.在adfind 里面可以用INCHAIN簡(jiǎn)化。
現在我們開(kāi)始查group1的所有成員,以及成員的成員,…。
(4) 查看it-1 屬于哪些組,這些組又屬于哪些組,如此往上遞歸查詢(xún),直到這個(gè)組不屬于其他組。
組織單位(Organization Unit),簡(jiǎn)稱(chēng)OU,是一個(gè)容器對象,將域中的對象組織成邏輯組,幫助網(wǎng)絡(luò )管理員簡(jiǎn)化管理組。組織單位包含下列類(lèi)型的對象:用戶(hù),計算機,工作組,打印機,安全策略,其他組織單位等??梢栽诮M織單位基礎上部署組策略,統一管理組織單位中的域對象。 在企業(yè)域環(huán)境里面,我們經(jīng)??吹桨凑詹糠謩澐值囊粋€(gè)個(gè)OU。
組織單位(OU)是專(zhuān)用容器,與常規容器的區別在于管理員可以將組策略應用于OU,然后系統將其下推到OU中的所有計算機。您不能將組策略應用于容器。需要注意的是Domain Computers是一個(gè)普通容器,而Domain Controllers是一個(gè)OU,因此可以可以將組策略應該于Domain Controllers,不可以將組策略應用于Domain Computers。關(guān)于更多組策略的內容,我們后面會(huì )專(zhuān)門(mén)有一篇文章介紹組策略。
PS:上面說(shuō)的Domain Computers和Domain Controllers特指根域的,不是User容器底下的,那個(gè)是組
組織單位跟組是兩個(gè)完全不同的概念。很多人經(jīng)常會(huì )把這兩個(gè)弄混。組是權限的集合。OU是管理對象的集合。舉個(gè)前面舉過(guò)的例子,運維需要對公司的網(wǎng)絡(luò )進(jìn)行管理,需要一些特殊的管理權限,我們就可以設置個(gè)組,對組配置權限。然后將運維拉近組里面,組里面的運維就擁有了該權限。比如我們需要對財務(wù)部里面的用戶(hù)進(jìn)行統一管理,那我們可以設置個(gè)OU,然后把財務(wù)部的用戶(hù)拉近這個(gè)OU,這樣就可以進(jìn)行集中管理,比如說(shuō)下發(fā)組策略。說(shuō)通俗點(diǎn),組是管理的集合,OU是被管理的集合。關(guān)于權限的更多內容,后面會(huì )有一篇文章專(zhuān)門(mén)介紹。
考慮這樣一種需求,如果我們想允許某個(gè)用戶(hù)把其他用戶(hù)拉近OU,而不賦予這個(gè)用戶(hù)域管權限,我們可以在這個(gè)OU給這個(gè)用戶(hù)委派 添加成員的權限。組織單位的委派其實(shí)就是賦予某個(gè)域內用戶(hù)對OU的某些管理權限。這些權限體現在A(yíng)CL里面。
所有的OU都是organizationalUnit類(lèi)的實(shí)例,
我們可以用(objectClass=organizationalUnit)或者(objectCategory=organizationalUnit)來(lái)過(guò)濾OU。
查詢(xún)OU里面的賬戶(hù),可以指定BaseDN為OU就行
聯(lián)系客服