域内LDAP学习
Naming Context
微软将Active Directory划分为若干个分区(这个分区我们称为Naming Context,简称NC),每个Naming Context都有其自己的安全边界。
预设定的有三个Naming Context。
Configuration NC(Configuration NC)
Schema NC(Schema NC)
Domain NC(DomainName NC)
Configuration NC
Configuration NC是林配置信息的主要存储库,包含有关站点,服务,分区和Active DirectorySchema 的信息,并被复制到林中的每个域控制器。配置NC的根位于配置容器中,该容器是林根域的子容器。
RDN | 说明 |
---|---|
CN=DisplaySpecifiers | 定义了Active Directory管理单元的各种显示格式 |
CN=Extended-Rights | 扩展权限对象的容器 |
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 信息,该Schema 信息定义Active Directory中使用的类,对象和属性。与域NC和配置 NC 不同,模式 NC 不维护容器或组织单位的层次结构。
Domain NC
每个域都有一个域Naming Context,不同的域内有不同的域Naming Context,其中包含特定于域的数据。
RDN | 说明 |
---|---|
CN=Builtin | 内置本地安全组的容器,包括管理员,域用户和账号操作员等等 |
CN=Computers | 机器用户的容器,包括加入域的所有机器 |
OU=Domain Controllers | 域控制器的容器,包括域内所有域控 |
CN=ForeignSecurityPrincipals | 代表域中来自森林外部域的组中的成员 |
CN=Keys | Server 2016之后才有,关键凭证对象的默认容器 |
CN=Managed Service Accounts | 托管服务帐户的容器。 |
CN=System | 各种预配置对象的容器。包括信任对象,DNS对象和组策略对象 |
CN=TPM Devices | 可信平台模块(TPM)密钥的恢复信息的容器。 |
CN=Users | 用户和组对象的默认容器 |
LDAP类和继承
在域内每个条目都是类的实例。而类是一组属性的集合
右侧是这台机器对应的属性。
查看objectClass属性
看到这个对象中的Values值中,有Computer的值。说明Computer的实例对象。
子类可以继承父类的所有属性,Top类是所有类的父类。
Computer等这些对象都存储在Schema NC中。
Schema NC
域内每个条目都是类的实例。所有的类都存储在Schema NC里面,是Schema NC的一个条目。
如Computer
类有三种类型
-
结构类(Structural)
结构类规定了对象实例的基本属性,每个条目属于且仅属于一个结构型对象类。前面说过域内每个条目都是类的实例,这个类必须是结构类。只有结构类才有实例。比如说前面说过的Computer类。
-
抽象类(Abstract)
抽象类型是结构类或其他抽象类的父类,它将对象属性中公共的部分组织在一起。跟面对对象里面的抽象方法一样,他没有实例,只能充当结构类或者抽象类的父类。比如说top 类。注意抽象类只能从另一个抽象类继承。
-
辅助类(Auxiliary)
辅助类型规定了对象实体的扩展属性。虽然每个条目只属于一个结构型对象类,但可以同时属于多个辅助型对象类。注意辅助类不能从结构类继承
objectCategory与objectClass
objectClass
在对象的objectClass
属性里面,可以看到这个对象是哪个类的实例,以及这个类的所有父类。
比如CN=ali.hama,CN=Users,DC=test,DC=com
使用adfind 查找设置过滤条件为(objectClass=top)
可以找到域内的所有对象。设置为(objectClass=person)
,则可以找到所有域内用户对象。
objectCategory
在Windows Server 2008之前默认不对objectClass 属性进行索引。
对象类的每个实例还具有一个objectCategory属性,该属性是一个单值属性。并且建立了索引。其中包含对象是其实例的类或其父类之一的专有名称.
创建对象时,系统会将其objectCategory属性设置为由其对象类的defaultObjectCategory
属性指定的值。无法更改对象的objectCategory属性。
索引objectCategory
的属性为CN=Person,CN=Schema,CN=Configuration,DC=test,DC=com
过滤条件:
(objectCategory="CN=Person,CN=Schema,CN=Configuration,DC=test,DC=com")
adfind.exe -b "DC=test,DC=com" -s subtree -bit -f "(objectCategory="CN=Person,CN=Schema,CN=Configuration,DC=test,DC=com")"
如果在目录中已经索引了ObjectClass ,或者所有域控制器都在运行Windows Server 2008或更高版本,则可以随意使用 objectClass。
组
安全组是权限的集合。运维需要对公司的网络进行管理,需要一些特殊的管理权限,我们就可以设置个组,对组配置权限。然后将运维拉近组里面,组里面的运维就拥有了该权限。安全组可以根据作用范围划分为
全局组 (Global group)
通用组(Universal group)
域本地组(Domain Local group)
可以用(objectClass=group)
或者(objectCategory=group)
来过滤组。
查询所有组
adfind.exe -b "DC=test,DC=com" -s subtree -bit -f "(objectCategory=group)"
查询所有全局组
adfind.exe -b "DC=test,DC=com" -s subtree -bit -f "(&(objectcategory=group)(grouptype:AND:=2))" -dn
查询域内所有通用组
adfind.exe -b "DC=test,DC=com" -s subtree -bit -f "(&(objectcategory=group)(grouptype:AND:=8))" -dn
查询域内的所有安全组,(包括全局组,通用组,域本地组)
adfind.exe -b "DC=test,DC=com" -s subtree -bit -f "(&(objectcategory=group)(grouptype:AND:=2147483648))" -dn
查询域内的所有通讯组(包括全局组,通用组,域本地组)
adfind.exe -b "DC=test,DC=com" -s subtree -bit -f "(&(objectcategory=group)(!(grouptype:AND:=214748648)))" -dn
查询域内系统创建的群组
adfind.exe -b "DC=test,DC=com" -s subtree -bit -f "(&(objectcategory=group)(grouptype:AND:=1))" -dn
组范围
组类型 | 可以授予权限 | 可包含 | 可包含于 | 成员是否在全局编录复制 |
---|---|---|---|---|
全局组 | 在同一林中或信任域或林中的任何域上。 | 来自同一域的帐户。 来自同一域的其他全局组 | 来自同一林中任何域的通用组。 来自同一域的其他全局组。 来自同一林中任何域或任何信任域的域本地组。 | 无 |
通用组 | 在同一林或信任林中的任何域上。 | 来自同一林中任何域的帐户。 来自同一林中任何域的全局组。 来自同一林中任何域的其他通用组。 | 同一林中的其他通用组。 在同一个林或信任林中域本地组。 | 是 |
域本地组 | 在同一个域中 | 来自任何域或任何受信任域的帐户。 来自任何域或任何受信任域的全局组。 来自同一林中任何域的通用组。 来自同一域的其他域本地组。 | 来自同一域的其他域本地组 | 无 |
- 域本地组(Domain Local group)
顾名思义,就是本域内的本地组。不适用于林,适用于本域。可包含林内的账户,通用组,全局组。其他域内的通用组要在本域拥有权限,一般都是加入这个域的域本地组。比如说一个林里面,只有林根域有Enterprise Admins
这个组,这是个通用组。然后其他子域的域本地组Administrators
会把林根域的Enterprise Admins
加进里面,所以林根域的Enterprise Admins
组用户才在整个林内具备管理员权限。如果想要一个只允许访问同一个域中的资源的组,那么使用域本地组即可。
- 通用组(Universal group)
上面已经简单提过了通用组,典型例子是Enterprise Admins
这个组。在林的场景下比较有用。组内成员会在GC内复制。如果你想要一个可以访问林中任何东西的组,并且可以在林中包含任何账户,请使用通用组。
- 全局组 (Global group)
全局组比较复杂,在单域内用域本地组,在林中使用通用组。全局组应该说是一种比较折中的方案,他可以在林中使用,但是只能包含本域内的账户。全局组的使用范围是本域以及受信任关系的其他域。最为常见的全局组是Domain Admin,也就是我们常说的域管。因为全局组只能包含本域内账户,因此来自一个域的账户不能嵌套在另一个域中的全局组中,这就是为什么来自同一个域的用户不符合在外部域中的域管的成员资格(由于其全局范围的影响)。
常见组
- Administrators
域本地组。具备系统管理员的权限,拥有对整个域最大的控制权,可以执行整个域的管理任务。Administrators包括Domain Admins
和Enterprise Admins
。
- Domain Admins
全局组。我们常说的域管组。默认情况下,域内所有机器会把Domain Admins加入到本地管理员组里面。
- Enterprise Admins
通用组。在林中,只有林根域才有这个组,林中其他域没有这个组,但是其他域默认会把这个组加入到本域的Administrators里面去。
- Domain Users
全局组。包括域中所有用户帐户,在域中创建用户帐户后,该帐户将自动添加到该组中。默认情况下,域内所有机器会把Domain Users加入到本地用户组里面,也就是为什么默认情况底下,啥都不配置。域用户可以登录域内任何一台普通成员机器。
OU 组织单位(Organization Unit)
组织单位(Organization Unit),简称OU,是一个容器对象,将域中的对象组织成逻辑组,帮助网络管理员简化管理组。组织单位包含下列类型的对象:用户,计算机,工作组,打印机,安全策略,其他组织单位等。可以在组织单位基础上部署组策略,统一管理组织单位中的域对象。 在企业域环境里面,我们经常看到按照部分划分的一个个OU。
OU跟组的区别
组织单位跟组是两个完全不同的概念。组是权限的集合。OU是管理对象的集合。举个前面举过的例子,运维需要对公司的网络进行管理,需要一些特殊的管理权限,我们就可以设置个组,对组配置权限。然后将运维拉近组里面,组里面的运维就拥有了该权限。比如我们需要对财务部里面的用户进行统一管理,那我们可以设置个OU,然后把财务部的用户拉近这个OU,这样就可以进行集中管理,比如说下发组策略。说通俗点,组是管理的集合,OU是被管理的集合。
查询OU
查询所有ou
adfind.exe -b "DC=test,DC=com" -s subtree -bit -f "(objectclass=OrganizationalUnit)" -dn
查询ou内容直接指定basedn即可
adfind.exe -b "OU=Admins,DC=test,DC=com" -s subtree -bit -dn
Reference
https://daiker.gitbook.io/windows-protocol/ldap-pian/