Naming Context分区

目录

分区Naming Context

Domain NC(DomainName NC) 

Configuration NC(Configuration NC)

Schema NC(Schema NC)

LDAP 中的类和继承

Schema NC中的类

Schema NC中的属性

Application Partitions


分区Naming Context

首先有一点得明确,Active Directory具有分布式特性,一个林中有若干个域,每个域内有若干台域控,每台域控有一个独立的Active Directory。这个时候就有必要将数据隔离到多个分区中,如果不隔离的话,则每个域控制器都必须复制林中的所有数据。若隔离为若干个分区之后,就可以有选择性的复制某几个分区。微软将Active Directory划分为若干个分区(Naming Context,简称NC),每个Naming Context都有其自己的安全边界。

Active Directory预定义了四个Naming Context:

  • 域目录分区(Domain Directory Partition):每一个域各有一个域目录分区,它存储着与该域有关的对象。每一个域控各自拥有一份域目录分区,它只会被复制到该域内的所有域控中,但并不会复制到其他域的域控中。如下图中的 DC=xie,DC=com 就是域目录分区
  • 配置目录分区(Configuration Directory Partition):它存储着整个活动目录结构,例如有哪些域、哪些域控等信息。整个林共享一份相同的配置目录分区,它会被复制到林中所有域的所有域控上。如下图中的 CN=Configuration,DC=xie,DC=com 就是配置目录分区
  • 架构目录分区(Schema Directory Partition):它存储着整个林中所有对象与属性的定义数据,也存储着如何建立新对象与属性的规则。整个林内所有域共享一份相同的架构目录分区,它会被复制到林中所有域的所有域控制器中。如下图中的 DC=Schema,CN=Configuration,DC=xie,DC=com 就是架构目录分区
  • 应用程序目录分区(Application Directory Partition):一般来说,应用程序目录分区是由应用程序所建立的,其内存储着与该应用程序有关的数据。应用程序目录分区会被复制到林中特定的域控中,而不是所有的域控中。如下图中的 DC=DomainDnsZones,DC=xie,DC=com 和 DC=ForestDnsZones,DC=xie,DC=com 就是应用程序目录分区

我们使用ADExplorer连接进来就可以看到分区,用红色框住的分别是域目录分区、配置目录分区和架构目录分区。而后面两个则是应用程序目录分区。

Domain NC(DomainName NC) 

每个域都有一个域Naming Context,不同的域内有不同的域Naming Context,其中包含特定域的数据。这个域Naming Context的根由域的专有名称(DN)表示,比如xie.com域的DN将为DC=xie,DC=com。之前我们说过,域内的所有计算机、所有用户的具体信息都存在Active Directory下。具体来说,就是在Active Directory的这个域Naming Context里面。我们使用 ADSI编辑器 和 Active Directory用户和计算机 查看的默认Naming Context选的也是这个Naming Context。后面对域内很多东西的查看都在这个域Naming Context里面。下面我们来看看这个Naming Context的顶级容器有哪些。

Active Directory用户和计算机 查看

AD Explorer查看的,会比 Active Directory用户和计算机 查看的要多

RDN说明
CN=Builtin

该容器内置了本地域组的安全组,传送门:https://xie1997.blog.csdn.net/article/details/112471464

CN=Computers

机器用户的容器,包括加入域的所有机器
OU=Domain Controllers域控制器的容器,包括域内所有域控

CN=ForeignSecurityPrincipals

代表域中来自森林外部域的组中的成员
CN=Managed Service Accounts托管服务帐户的容器
CN=System各种预配置对象的容器。包括信任对象,DNS对象和组策略对象
CN=Users用户和组对象的默认容器

Configuration NC(Configuration NC)

配置NC(Configuration NC),林配置信息的主要存储库,包含有关站点,服务,分区和Active DirectorySchema 的信息,并被复制到林中的每个域控制器上。配置NC的根位于配置容器中,该容器是林根域的子容器。例如,xie.com 林的 Configuration NC 为 CN=Configuration,DC=xie,DC=com

下面我们来看看这个Naming Context的顶级容器有哪些。

RDN说明
CN=DisplaySpecifiers定义了Active Directory管理单元的各种显示格式
CN=Extended-Rights扩展权限对象的容器,我们将在域内ACL那篇文章里面详解
CN=ForestUpdates包含用于表示森林状态和与域功能级别更改的对象
CN=Partitions包含每个Naming Context,Application Partitions以及外部LDAP目录引用的对象
CN=Physical Locations包含位置对象,可以将其与其他对象关联 以表示该对象的位置。
CN=Services存储有关服务的配置信息,比如文件复制服务
CN=Sites包含所有站点拓扑和复制对象
CN=WellKnown Security Principals包含常用的外部安全性主题的对象,比如Anonymous,Authenticated Users,Everyone等等

Schema NC(Schema NC)

    Schema NC中包含Schema条目信息,该Schema信息定义Active Directory中使用的类和属性。与域NC和配置 NC 不同,Schema NC 不维护容器或组织单位的层次结构。相反,它是具有 classSchema ,attributeSchema 和 subSchema 对象的单个容器。

Schema NC里面包含Schema信息,定义了Active Directory中使用的类和属性。所以在详细讲Schema NC之前我们先来讲一下LDAP里面的类和继承。LDAP里面的类和继承,跟开发里面的面向对象一样,相信有过面向对象开发经验的,理解起来并不困难。

  • 所有类是classSchema的实例
  • 所有属性是attributeSchema的实例
  • objectClass 属性说明了该实例继承自哪些类,多个
  • objectCategory 属性为其对象类的defaultObjectCategory属性指定的值,单一
  • defaultSecurityDescriptor 这个属性表明,如果在创建Computer这个类实例的时候,如果没指定ACL,就用这个属性的值作为实例的默认ACL。
  • nTSecurityDescriptor属性的值是这个条目的ACL,而defaultSecurityDescriptor是实例默认的ACL。
  • rDNAttID属性表明通过LDAP连接到类的实例的时候,使用的两个字母的前缀是cn。
  • objectClassCategory 属性的count为1说明他是一个结构类,为2是抽象类,为3是辅助类
  • subClassOf 属性是值是他的父类
  • systemPossSuperior属性约束了他的实例只能创建在该属性值的实例底下

LDAP 中的类和继承

类和实例:域内每个条目都是类的实例,而类是属性的集合。

举个例子:

域内机器CN=WIN7,CN=Computers,DC=xie,DC=com 在 Active Directory 里面是一个条目,里面有众多属性描述条目具体信息。

​而这个条目有哪些属性是由他的类决定的。比如说这里的条目是 CN=WIN7,CN=Computers,DC=xie,DC=com 是类Computer的实例,在objectClass属性中可以看到。类是可继承的。子类继承父类的所有属性,top类是所有类的父类。所以我们看到的objectClass里面的值除了Computer之外,还top,person,organizationPerson,user。这是因为objectClass保存了类继承关系。computer是user的子类,userorganizationPerson的子类,organizationPersonperson的子类,persontop的子类。

类的分类

类有三种类型

  • 结构类(Structural):结构类规定了对象实例的基本属性,每个条目属于且仅属于一个结构型对象类。前面说过域内每个条目都是类的实例,这个类必须是结构类。只有结构类才有实例。比如说前面说过的Computer类。

  • 抽象类(Abstract):抽象类是结构类或其他抽象类的父类,它将对象属性中公共的部分组织在一起。跟面对对象里面的抽象方法一样,他没有实例,只能充当结构类或者抽象类的父类。比如说top类。注意抽象类只能从另一个抽象类继承。

  • 辅助类(Auxiliary):辅助类规定了对象实体的扩展属性。虽然每个条目只属于一个结构型对象类,但可以同时属于多个辅助型对象类,注意辅助类不能从结构类继承。

接下来让我们结合Schema NC中的类来具体理解下LDAP 中的类和继承

Schema NC中的类

如果我们要查看Schema NC的内容,除了使用传统LDAP编辑器如:ADExplorer

还可以使用微软自带的 Active Directory Schema

默认没有注册,运行regsvr32 schmmgmt.dll注册该dll

然后 cmd 窗口输入mmc打开控制台,文件——> 添加/删除管理单元(M)——>Active Directory架构——>添加——>确定

域内每个条目都是类的实例。所有的类都存储在Schema NC里面,是Schema NC的一个条目。

Schema NC中的属性

Schema NC除了定义了Active Directory中使用的类,还定义了Active Directory中使用的属性。

每个属性都是一个条目,是类 Attribute-Schema 的实例

在域内的所有属性必须在这里定义,而这里的条目,最主要的是限定了属性的语法定义。其实就是数据类型,比如:Directory String类型、DN、Boolean类型、OID、Enumeration等。

属性值的类型由属性的attributeSyntax和oMSyntax决定。

以属性Object-Sid (CN=Object-Sid,CN=Schema,CN=Configuration,DC=xie,DC=com)为例。

他的attributeSyntax2.5.5.17

oMSyntax是4

通过查表可以得知描述是其值是 一个安全辨识符(SID)

关于各种语法定义在这里不再这里一个个介绍,过于抽象。

我们下面来具体分析下这个条目的一些通用属性,希望大家对类条目有个大概的认识。

  • Attribute代表属性
  • Sytnta代表属性的值的格式
  • Count代表属性的值的个数
  • Value(s)是属性具体的值

objectClass属性的值代表该实例继承的类有哪些

我们以一个实例来说明。前面说过条目CN=WIN7,CN=Computers,DC=xie,DC=com是类Computer的实例。那么类Computer就存储在Schema NC里面,是Schema NC的一个条目CN=Computer,CN=Schema,CN=Configuration,DC=xie,DC=com。

前面说过每个条目都是类的实例,而类又是Schema NC的一个条目。因此类也是另一个类的实例,这个另一个类就是:

classSchema(CN=Class-Schema,CN=Schema,CN=Configuration,DC=xie,DC=com)

所有的类条目都是classSchema类的实例,我们可以在objectClass属性里面看到。

win7是computer的实例,computer是classSchema的实例,classSchema是自己的实例。

defaultSecurityDescriptor 这个属性表明,如果在创建Computer这个类实例的时候,如果没指定ACL,就用这个属性的值作为实例的默认ACL。

nTSecurityDescriptor属性的值是这个条目的ACL,而defaultSecurityDescriptor是实例默认的ACL。

举个例子。

CN=Computer,CN=Schema,CN=Configuration,DC=xie,DC=com 有两个属性nTSecurityDescriptor,defaultSecurityDescriptor。

nTSecurityDescriptor是这条条目的ACL,那Computer的实例化对象CN=WIN7,CN=Computers,DC=xie,DC=com 如果在创建的时候,没有指定ACL,那么他的nTSecurityDescriptor的值就是CN=Computer,CN=Schema,CN=Configuration,DC=xie,DC=com 的属性defaultSecurityDescriptor的值。

rDNAttID属性表明通过LDAP连接到类的实例的时候,使用的两个字母的前缀是cn。

所以他的实例CN=WIN7,CN=Computers,DC=xie,DC=com,使用的前缀是cn。

这个我们再举个例子

比如条目OU=Domain Controllers,DC=xie,DC=com 是一个ou,它是类organizationalUnit的实例

我们查看类organizationalUnit对应的条目CN=Organizational-Unit,CN=Schema,CN=Configuration,DC=xie,DC=com,就可以看到,其rDNAttID的值为ou,所以对于他的一个实例,他的前缀是OU,OU=Domain Controllers

objectClassCategory属性的count为1说明他是一个结构类

  • 1 代表是个结构类
  • 2 代表是个抽象类
  • 3代表是个辅助类

subClassOf 属性表明他的父类是user类

systemPossSuperior属性约束了他的实例只能创建在这三个类container、organizationalUnit、domainDNS的实例底下。

比如computer类的一个实例,CN=WIN7,CN=Computers,DC=xie,DC=com,它位于容器CN=Computers,DC=xie,DC=com底下,而CN=Computers,DC=xie,DC=comcontainer的实例,containersystemPossSuperior的属性值里,这不违反这个约束。

最后一点也是最核心的,我们来讲下他的实例是怎么获取到基本属性的。

  • systemMustContain 和 MustContain 属性里的值是必选的属性
  • systemMayContain 和  MayContain 属性里的值是可选的属性

比如我们就以computer类来看。该类继承于 user——>organizationalPerson——>person——>top。

那我们一个一个来看看,top类的必选属性是:

  • objectClass
  • objectCategory
  • nTSecurityDescriptor
  • instanceType

person类的必选属性是: cn

organizationalPerson类没有必选属性

User类没有必选属性

因此通过继承,computer类的必选属性有如下: 

  • objectClass
  • objectCategory
  • nTSecurityDescriptor
  • instanceType
  • cn

我们通过Active DirectorySchema 查看,就会看到强制类型属性和可选类型属性,以及源类是哪个类。

Application Partitions

从 Windows Server 2003 开始,微软允许用户自定义分区来扩展Naming Context的概念。Application Partitions其实就是Naming Context的一个扩展,它本质上还是属于Naming Context。管理员可以创建分区(这个分区我们称为区域),以将数据存储在他们选择的特定域控制器上,Application Partitions主要有以下特点:

  1. Naming Context是微软预定义的,用户不可以定义自己的Naming Context。而如果用户想要定义一个分区,可以通过Application Partitions。虽然微软也预置了两个Application Partitions,但是Application Partitions的设计更多是为了让用户可以自定义自己的数据。设计Application Partitions最大的用途就是,让用户自己来定义分区。

  2. Application Partitions可以存储动态对象。动态对象是具有生存时间(TTL) 值的对象,该值确定它们在被Active Directory自动删除之前将存在多长时间。也就说Application Partitions可以给数据设置个TTL,时间一到,Active Directory就删除该数据。

下面演示通过ntdsutil创建Application Partitions:

创建成功

我们可以通过rootDSE查看域内的所有Naming Context以及Application Partitions,在属性namingContexts里面。

 

原文:https://daiker.gitbook.io/windows-protocol/ldap-pian/8

官方文档:https://docs.microsoft.com/en-us/windows/win32/ad/active-directory-domain-services

已标记关键词 清除标记
©️2020 CSDN 皮肤主题: Age of Ai 设计师:meimeiellie 返回首页
实付 19.90元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值