LDAP简介

先说下ldap,轻量目录访问协议。LDAP就是设计用来访问目录数据库的一个协议。也就是为了能访问目录数据库,ldap是其中一种协议

LDAP的基本模型

  1. 目录树:在一个目录服务系统中,整个目录信息集可以表示为一个目录信息树,树中的每个节点是一个条目。
  2. 条目:每个条目就是一条记录,每个条目有自己的唯一可区别的名称(DN)。
  3. DN,RDN:拿第一条举例,他的唯一可区分的名称DN:uid=jack,ou=people,dc=muxue,dc=com,RDN就是uid=jack
  4. 属性:描述条目具体信息。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:

  1. 连接DC的389/636端口(636端口是LDAPS);这是知道信息的情况下
  2. 连接域控的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

  1. Configuration NC
  2. Schema NC
  3. 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 包含所有站点拓扑和复制对象。这包括sitesubnetsiteLinkservernTDSConnection对象,仅举几例。
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上

  1. Naming Context是微软预定义的,用户不可以定义;用户如果想要定义一个分区,可以使用Application Partitions,微软默认预置了两个Application Partitions

  2. 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 ContextApplication 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 中的类和继承

  1. 域内每个条目都是类的实例。而类是一组属性的集合。

Example:CN=WIN7,CN=Computers,DC=muxue,DC=com在AD中是一个条目,它里面有非常多的属性



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

  1. 类是可以继承的

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

  1. 类的分类
  • 结构类(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=comorganizationalUnit的一条实例



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



    所以对于Organizational-Unit类的实例,他的前缀是OU,OU=Domain Controllers

  • objectClassCategory属性标签他是一个什么类

    1 -> 结构类
    2 -> 抽象类
    3 -> 辅助类
  • systemPossSuperior属性表明,约束了他的实例只能创建在这些类之下

  • 实例是怎么获取到基本属性的

    1. 这个类没有systemMustContainMustContain属性,为强制属性
    2. 这个类有systemMayContainMayContain属性,为可选的属性
    3. 类是可继承的。因此一个类的属性集合里面除了前面的四个属性里面的值,还可能来自父类以及辅助类。
    4. 父类可以通过subClassOf查看,这里是computer类的父类是user类。然后网上递归,user类查看那四个属性,以及他的辅助类,父类。直到top类。

Search Active Directory

查询目录需要指定两个要素

  1. Base DN
  2. 过滤规则

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的更多相关文章

  1. Windows协议 LDAP篇 - 组&OU

    LDAP搜索 LDAP查找 位操作 以userAccountControl为例,CN=User-Account-Control,CN=Schema,CN=Configuration,DC=muxue, ...

  2. Windows协议 LDAP篇 - 域用户和计算机用户

    域用户 查询域用户 通过SAMR协议查询(net user就是通过这种协议查询的),samr也不是一种专门的协议,是一个RPC接口 在impacket里有个脚本samrdump.py,就是专门调用这个 ...

  3. Windows协议 LDAP篇 - 域权限

    windows 访问控制模型 也就是大名鼎鼎的ACM,access control mode 由两部分组成的. 访问令牌(access tokens) 其中包含有关登录用户的信息(User SID,G ...

  4. Windows协议 NTLM篇

    NTLM 基础 介绍 LM Hash & NTLM Hash Windows本身是不会存储明文密码的,只保存密码的hash 其中本机用户的密码hash是放在本地的SAM文件里面,域内用户的密码 ...

  5. Windows协议 Kerberos篇

    认证流程 角色 功能 Domain Controller 也就是域控 Key Distribution Center 秘钥分发中心,简称KDC,默认安装在域控里,包括AS.AD和TGS. Accoun ...

  6. Windows下LDAP服务器配置

    LDAP即轻量级目录访问协议(Lightweight Directory Access Protocol),基础知识不再赘述,本文主要记录我的配置与安装过程. LDAP for windows下载 o ...

  7. Windows 7 封装篇(一)【母盘定制】[手动制作]定制合适的系统母盘

    Windows 7 封装篇(一)[母盘定制][手动制作]定制合适的系统母盘 http://www.win10u.com/article/html/10.html Windows 7 封装篇(一)[母盘 ...

  8. 启动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 ...

  9. Android Studio2.0 教程从入门到精通Windows版 - 入门篇

    http://www.open-open.com/lib/view/open1468121363300.html 本文转自:深度开源(open-open.com)原文标题:Android Studio ...

随机推荐

  1. excel函数提取身份证出生日期,分离日期时间的日期和时间

    1.提取身份证出生日期 =1*TEXT(MID(H13,7,8),"0-00-00")用MID函数提取表示日期的位数,再用text函数转换为格式1998-6-21格式的文本,再通过 ...

  2. zbxtable的使用

    实验环境: zabbix server 172.16.1.121 mysql 172.16.1.121 访问端 172.16.1.122 54.1 zbxtable 1 说明 ZbxTable使用Go ...

  3. 24、配置Oracle下sqlplus历史命令的回调功能

    24.1.前言: 1.在oracle服务器上使用默认的sqlplus写sql命令时,如果写错了一个字母需要修改时,是无法通过 退格键消除错误的字母的,只能另起一行,重新写sql语句,而且也不能通过键盘 ...

  4. AcWing 1134. 最短路计数

    给出一个n个顶m 条边的无向无权图,顶点编号为 1 到 n.N. 问从顶点 1开始,到其他每个点的最短路有几条. #include<bits/stdc++.h> #define N 100 ...

  5. 从零玩转人脸识别之RGB人脸活体检测

    从零玩转RGB人脸活体检测 前言 本期教程人脸识别第三方平台为虹软科技,本文章讲解的是人脸识别RGB活体追踪技术,免费的功能很多可以自行搭配,希望在你看完本章课程有所收获. ArcFace 离线SDK ...

  6. Spring缓存的注解关键词解释

    Spring缓存的注解关键词解释 @Cacheable支持缓存 @Cacheable可以标记在一个方法上,也可以标记在一个类上. 1.当标记在一个方法上时表示该方法是支持缓存的,当标记在一个类上时则表 ...

  7. mysql中的条件语句case when/if函数

    主要知识点为case函数,if函数,ifnull函数,elt函数几部分,主要用于mysql语句中的逻辑判断 待操作的表如下: p.p1 { margin: 0; font: 16px Menlo; c ...

  8. linux 中获取进程和kill进程的几种方法

    ps: ps命令是最基本同时也是非常强大的进程查看命令,使用该命令可以确定有哪些进程正在运行和运行的状态.进程是否结束.进程有没有僵尸.哪些进程占用了过多的资源等等. 注意:ps是显示瞬间进程的状态, ...

  9. 小程序textarea设置maxlength后不是你想的那样简单

    可能很多小伙伴们.看见这个标题后; 觉得作者是一个标题党. textarea设置maxlength后, 限制用户输入的字符呗! 还能怎么样呢? 恭喜你,说对了一半. 之前我也一直是这样想的. 知道今天 ...

  10. Mysql学生课程表SQL面试集合

    现有如下2个表,根据要求写出SQL语句. student表:编号(sid),姓名(sname),性别(sex) course表:编号(sid),科目(subject),成绩(score)  问题1:查 ...