Windows协议 LDAP篇 - Actite Directory
LDAP简介
先说下ldap,轻量目录访问协议。LDAP就是设计用来访问目录数据库的一个协议。也就是为了能访问目录数据库,ldap是其中一种协议
LDAP的基本模型
- 目录树:在一个目录服务系统中,整个目录信息集可以表示为一个目录信息树,树中的每个节点是一个条目。
- 条目:每个条目就是一条记录,每个条目有自己的唯一可区别的名称(DN)。
- DN,RDN:拿第一条举例,他的唯一可区分的名称
DN:uid=jack,ou=people,dc=muxue,dc=com,RDN就是uid=jack - 属性:描述条目具体信息。
DN:uid=jack,ou=people,dc=muxue,dc=com的name属性就是hack,age属性是18,sex就是male

| 关键字 | 英文全称 | 含义 |
|---|---|---|
| dc | Domain Component | 域名的部分,其格式是将完整的域名分成几部分,如域名为example.com变成dc=example,dc=com(一条记录的所属位置) |
| uid | User Id | 用户ID songtao.xu(一条记录的ID) |
| ou | Organization Unit | 组织单位,组织单位可以包含其他各种对象(包括其他组织单元),如“oa组”(一条记录的所属组织) |
| cn | Common Name | 公共名称,如“Thomas Johansson”(一条记录的名称) |
| sn | Surname | 姓,如“许” |
| dn | Distinguished Name | “uid=songtao.xu,ou=oa组,dc=example,dc=com”,一条记录的位置(唯一) |
| rdn | Relative dn | 相对辨别名,类似于文件系统中的相对路径,它是与目录树结构无关的部分,如“uid=tom”或“cn= Thomas Johansson” |
Actite Directory简介
不同厂商对目录服务数据库的不一样,我们这里说的Active Directory,是微软的对目录服务数据库的实现;Active Directory存储着整个域内所有的计算机,用户等的所有信息。
连接域内的AD:
- 连接DC的389/636端口(636端口是LDAPS);这是知道信息的情况下
- 连接域控的3268/3269端口;全局编录服务器(GC)中除了保存本域中所有对象的所有属性外,还保存林中其它域所有对象的部分属性,这样就允许用户通过全局编录信息搜索林中所有域中对象的信息。
Naming Context和Application Partitions
在这里会介绍AD中会有啥东西
Naming Context
https://www.oreilly.com/library/view/active-directory-5th/9781449361211/ch04.html
微软将Active Directory划分为若干个分区(Naming Context,简称NC),每个Naming Context都有其自己的安全边界。
AD预定义了3个NC
- Configuration NC
- Schema NC
- Domain NC

Configuration NC
配置NC,林配置信息的主要存储库,包含有关站点,服务,分区和Active DirectorySchema 的信息,并被复制到林中的每个域控制器。配置NC的根位于配置容器中,该容器是林根域的子容器。例如,muxue.com林将为CN=Configuration,DC=muxue,DC=com
| RDN | 说明 |
|---|---|
| cn=DisplaySpecifiers | 包含显示说明符对象的容器,这些对象定义了 Active Directory MMC 管理单元的各种显示格式。 |
| cn=Extended-Rights | 扩展权限 ( controlAccessRight) 对象的容器。 |
| cn=ForestUpdates | 包含用于表示林状态和域功能级别更改的对象。 |
| cn=LostAndFoundConfig | 孤立对象的容器。 |
| cn=NTDS Quotas | 用于存储配额对象的容器,用于限制安全主体可以在分区或容器中创建的对象数量。 |
| cn=Partitions | 包含每个命名上下文、应用程序分区和外部 LDAP 目录引用的对象。 |
| cn=Physical Locations | 包含位置对象 ( physicalLocation),可以与其他对象关联以表示对象的位置。 |
| cn=Services | 存储有关服务(例如文件复制服务、Exchange 和 Active Directory 本身)的配置信息。 |
| cn=Sites | 包含所有站点拓扑和复制对象。这包括site、subnet、siteLink、server和nTDSConnection对象,仅举几例。 |
| cn=WellKnown Security Principals | 保存代表常用的外部安全主体的对象,例如Everyone、Interactive 和Authenticated Users。 |
Schema NC
Schema NC 包含表示 Active Directory 支持的类和属性的对象。架构是在林范围的基础上定义的,因此架构 NC 被复制到林中的每个域控制器。这个会详细 因为设计到类继承
Domain NC
每个 Active Directory 域都有一个域命名上下文,其中包含特定于域的数据。此 NC 的根由域的专有名称 (DN) 表示,通常称为 NC 头。比如muxue.com域的DN将为dc=muxue,dc=com
| RDN | 说明 |
|---|---|
| cn=Builtin | 预定义的内置本地安全组的容器。示例包括管理员、域用户和帐户操作员。 |
| cn=Computers | 代表成员服务器和工作站的计算机对象的默认容器。您可以使用redircmp.exe实用程序更改默认容器。 |
| ou=Domain Controllers | 代表域控制器的计算机对象的默认组织单位。 |
| cn=ForeignSecurityPrincipals | 占位符对象的容器,代表域中来自林外部域的组成员。 |
| cn=LostAndFound | 孤立对象的容器。孤立对象是在同一复制期内从另一个域控制器中删除的容器中创建的对象。 |
| cn=Managed ServiceAccounts | 托管服务帐户的容器。托管服务帐户是一种特殊类型的安全主体,可以轮换自己的密码。有关托管服务帐户的更多信息,请参阅第 10 章。 |
| cn=NTDS Quotas | 用于存储配额对象的容器,用于限制安全主体可以在分区或容器中创建的对象数量。 |
| cn=Program Data | 应用程序存储数据的容器,而不是使用自定义的顶级容器。 |
| cn=System | 各种域配置对象的容器。示例包括信任对象、DNS 对象和组策略对象。 |
| cn=TPM Devices | 可信平台模块 (TPM) 密钥恢复信息的容器。 |
| cn=Users | 用户和组对象的默认容器。您可以使用redirusr.exe 实用程序更改默认容器 。 |
Application Partitions
从 Windows Server 2003 开始,微软允许用户自定义分区来扩展Naming Context的概念。Application Partitions其实就是Naming Context的一个扩展,它本质上还是属于Naming Context。管理员可以创建分区(这个分区我们称为区域),以将数据存储在他们选择的特定DC上
Naming Context是微软预定义的,用户不可以定义;用户如果想要定义一个分区,可以使用Application Partitions,微软默认预置了两个Application Partitions

Application Partitions可以存储动态对象。动态对象是具有生存时间(TTL) 值的对象,该值确定它们在被AD自动删除之前将存在多长时间。也就说Application Partitions可以给数据设置个TTL,到点了AD就把这条给删了
通过ntdsutil创建Application Partitions
ntdsutil
partition management
create nc "dc=test,dc=muxue,dc=com" dc.muxue.com

我们可以通过ldp查看域内的所有Naming Context和Application Partitions

删除分区
ntdsutil
ntdsutil: LDAP Policies
ldap policy: Connections
server connections: connect to server dc
绑定到 dc ...
用本登录的用户的凭证连接 dc。
server connections: quit
ldap policy: quit
ntdsutil: partition management
partition management: delete nc "dc=test,dc=muxue,dc=com"
此操作已经成功。分区已经标记为从企业中删除。一段时间内它将在后台删除。
注意: 请不要用同名创建另一分区,直到服务拥有此分区的服务有足够的时间删除它。这将在此分区删除在整个林内复制时完成,而且拥
有此分区的服务已经删除该分区内的所有对象。可以通过查阅每个服务器上的目录事件日志来验证分区删除是否完成。
然后就成功删除了
Schema NC
LDAP 中的类和继承
- 域内每个条目都是类的实例。而类是一组属性的集合。
Example:CN=WIN7,CN=Computers,DC=muxue,DC=com在AD中是一个条目,它里面有非常多的属性

而条目有哪些属性是由他的类决定的,在objectClass属性可以看到属于哪个类

- 类是可以继承的
子类继承父类的所有属性,Top类是所有类的父类。在之前我们看objectClass的时候,可以看到条目是CN=WIN7,CN=Computers,DC=muxue,DC=com是类Computer的实例。objectClass里的值除了有Computer之外还有:top,person,organizationalPerson,user,这是因为objectClass保存了类继承关系,user继承了organizationalPerson,organizationalPerson继承了person,person继承了top。

- 类的分类
- 结构类(Structural):结构类规定了对象实例的基本属性,每个条目属于且仅属于一个结构型对象类。前面说过域内每个条目都是类的实例,这个类必须是结构类。只有结构类才有实例。比如说前面说过的Computer类。
- 抽象类(Abstract):抽象类型是结构类或其他抽象类的父类,它将对象属性中公共的部分组织在一起。跟面对对象里面的抽象方法一样,他没有实例,只能充当结构类或者抽象类的父类。比如说top 类。注意抽象类只能从另一个抽象类继承。
- 辅助类(Auxiliary):辅助类型规定了对象实体的扩展属性。虽然每个条目只属于一个结构型对象类,但可以同时属于多个辅助型对象类。注意辅助类不能从结构类继承
这我就是完全抄的daiker师傅的了
Schema NC中的类
直接用Active Directory Schena查看比较方便

拿上面一个例子说明:CN=WIN7,CN=Computers,DC=muxue,DC=com是类Computer的实例,类Computer就存储在Schema NC里面,是Schema NC的一个条目(其实我上面有一个图可以看出来),CN=Computer,CN=Schema,CN=Configuration,DC=muxue,DC=com
每个条目都是类的实例,而类是是Schema NC的一个条目。因此类条目也是一个类的实例,这个类是classSchema(Schema NC的一个条目)。所有的类条目都是classSchema类的实例。

名称是Computer(通过adminDescription,adminDisplayName,cn,name属性)
属性subClassOf 表明他的父类是user类
defaultSecurityDescriptor属性表明,如果在创建Computer这个类的实例的时候,如果没指定ACL,就用这个属性的值作为实例的ACL。在实例的nTSecurityDescriptor里面。注意跟nTSecurityDescriptor区分开来,而defaultSecurityDescriptor是实例默认的ACL,nTSecurityDescriptor是这个条目的ACL。
Example:
CN=Computer,CN=Schema,CN=Configuration,DC=muxue,DC=com 有两个属性nTSecurityDescriptor,defaultSecurityDescriptor。
nTSecurityDescriptor是这条条目的ACL。
那Computer的实例化对象CN=WIN7,CN=Computers,DC=muxue,DC=com,如果在创建的时候,没有指定ACL,那么CN=WIN7,CN=Computers,DC=muxue,DC=com的nTSecurityDescriptor的值就是CN=Computer,CN=Schema,CN=Configuration,DC=muxue,DC=com 的属性defaultSecurityDescriptor的值。
rDNAttID属性表明通过LDAP连接到类的实例的时候,使用的两个字母的前缀用过是cn。所以他的实例CN=WIN7,CN=Computers,DC=muxue,DC=com,使用的前缀是cn。
Example:
条目OU=Domain Controllers,DC=muxue,DC=com是organizationalUnit的一条实例

然后我们查看CN=Organizational-Unit,CN=Schema,CN=Configuration,DC=muxue,DC=com的rDNAttID属性是

所以对于Organizational-Unit类的实例,他的前缀是OU,OU=Domain ControllersobjectClassCategory属性标签他是一个什么类1 -> 结构类
2 -> 抽象类
3 -> 辅助类
systemPossSuperior属性表明,约束了他的实例只能创建在这些类之下实例是怎么获取到基本属性的
- 这个类没有
systemMustContain和MustContain属性,为强制属性 - 这个类有
systemMayContain和MayContain属性,为可选的属性 - 类是可继承的。因此一个类的属性集合里面除了前面的四个属性里面的值,还可能来自父类以及辅助类。
- 父类可以通过subClassOf查看,这里是computer类的父类是user类。然后网上递归,user类查看那四个属性,以及他的辅助类,父类。直到top类。
- 这个类没有
Search Active Directory
查询目录需要指定两个要素
- Base DN
- 过滤规则
Base DN
比如指定BaseDN为DC=muxue,DC=com,就会以此为根向下搜索

过滤规则
- 用与号 (&) 表示的 AND 运算符。
- 用竖线 (|) 表示的 OR 运算符。
- 用感叹号 (!) 表示的 NOT 运算符。
- 用名称和值表达式的等号 (=) 表示的相等比较。
- 用名称和值表达式中值的开头或结尾处的星号 (*) 表示的通配符。
参考
https://docs.microsoft.com/zh-cn/windows/win32/ad/active-directory-domain-services
https://daiker.gitbook.io/windows-protocol/ldap-pian/8
Windows协议 LDAP篇 - Actite Directory的更多相关文章
- Windows协议 LDAP篇 - 组&OU
LDAP搜索 LDAP查找 位操作 以userAccountControl为例,CN=User-Account-Control,CN=Schema,CN=Configuration,DC=muxue, ...
- Windows协议 LDAP篇 - 域用户和计算机用户
域用户 查询域用户 通过SAMR协议查询(net user就是通过这种协议查询的),samr也不是一种专门的协议,是一个RPC接口 在impacket里有个脚本samrdump.py,就是专门调用这个 ...
- Windows协议 LDAP篇 - 域权限
windows 访问控制模型 也就是大名鼎鼎的ACM,access control mode 由两部分组成的. 访问令牌(access tokens) 其中包含有关登录用户的信息(User SID,G ...
- Windows协议 NTLM篇
NTLM 基础 介绍 LM Hash & NTLM Hash Windows本身是不会存储明文密码的,只保存密码的hash 其中本机用户的密码hash是放在本地的SAM文件里面,域内用户的密码 ...
- Windows协议 Kerberos篇
认证流程 角色 功能 Domain Controller 也就是域控 Key Distribution Center 秘钥分发中心,简称KDC,默认安装在域控里,包括AS.AD和TGS. Accoun ...
- Windows下LDAP服务器配置
LDAP即轻量级目录访问协议(Lightweight Directory Access Protocol),基础知识不再赘述,本文主要记录我的配置与安装过程. LDAP for windows下载 o ...
- Windows 7 封装篇(一)【母盘定制】[手动制作]定制合适的系统母盘
Windows 7 封装篇(一)[母盘定制][手动制作]定制合适的系统母盘 http://www.win10u.com/article/html/10.html Windows 7 封装篇(一)[母盘 ...
- 启动weblogic的错误:Could not obtain an exclusive lock to the embedded LDAP data files directory
http://hi.baidu.com/kaisep/item/0e4bf6ee5da001d1ea34c986 源地址 启动weblogic的错误:Could not obtain an exclu ...
- Android Studio2.0 教程从入门到精通Windows版 - 入门篇
http://www.open-open.com/lib/view/open1468121363300.html 本文转自:深度开源(open-open.com)原文标题:Android Studio ...
随机推荐
- Kubernetes自动伸缩pod-HPA
在运维中,虽然能预先知道负载何时会飙升,或者如果负载的变化是较长时间内逐渐发生的,手动扩容也是可以接受的,但指望靠人工干预来处理突发而不可预测的流量增长,仍然不够理想. 幸运的是,Kubernetes ...
- keycloak~自定义redirect_uri的方法
在使用keycloak集成springboot的过程中,对于需要授权访问的接口,它会跳到keycloak里进行登录,之前有个redirect_uri,登录成功后会跳回本客户端,而这个地址默认没有修改的 ...
- CRM系统对企业管理的作用有多大?
随着市场经济的发展,对任何行业的企业来说,客户都是非常重要的一个部分.CRM系统帮助企业做到以客户为中心,它可以根据客户的具体要求进行跟进和反馈,在很大程度上提高公司的客户服务水平和客户满意度,进而提 ...
- 企业如何通过CRM系统使销售周期缩短
企业为什么要缩短销售周期?因为这意味着可以节约更多开支,从而达到企业利润最大化.但是有不少企业尤其是B2B行业,销售周期都在三个月以上.通过调查发现,很多企业在客户信息和销售管道上缺乏管理和策略.Zo ...
- 230th Weekly Leetcode Contest
题目二 题目描述 5690. 最接近目标价格的甜点成本 难度:中等-中等 题解 解法一:三进制状态压缩 考虑到baseCosts.toppingCosts的长度最多都为10,每一种辅料都有加0.1. ...
- centos 安装es
第一步:必须要有jre支持 elasticsearch是用Java实现的,跑elasticsearch必须要有jre支持,所以必须先安装jre 第二步:下载elasticsearch 进入官方下载 h ...
- Redis 高级面试题
Redis 持久化机制 Redis 是一个支持持久化的内存数据库,通过持久化机制把内存中的数据同步到硬盘文件来 保证数据持久化.当 Redis 重启后通过把硬盘文件重新加载到内存,就能达到恢复数据的目 ...
- 2021/2/5 关于new的一个教训
千万不要在类构造函数的初始化里new任何东西,这会导致析构函数delete一个野指针!构造函数一定要把所有的指针初始化为nullptr! 以下代码会报错(堆内存崩溃): Integer::Intege ...
- 修改gitlab默认的nginx
目录 1. 修改gitlab的配置文件 2. nginx配置 3. 重载 前言: 本文将介绍,如何禁用gitlab自带的nginx,用已经安装的nginx提供web服务. 1. 修改gitlab的配置 ...
- Adaptive AUTOSAR 学习笔记 5 - 架构 - 物理视图
本系列学习笔记基于 AUTOSAR Adaptive Platform 官方文档 R20-11 版本 AUTOSAR_EXP_PlatformDesign.pdf 缩写 AP:AUTOSAR Adap ...