1.LDAP的认识
LDAP(Light Directory Access Portocol),它是基于X.500标准的轻量级目录访问协议。
目录是一个为查询、浏览和搜索而优化的数据库,它成树状结构组织数据,类似文件目录一样。
目录数据库和关系数据库不同,它有优异的读性能,但写性能差,并且没有事务处理、回滚等复杂功能,不适于存储修改频繁的数据。所以目录天生是用来查询的,就好象它的名字一样。
LDAP目录与普通数据库的主要不同之处在于数据的组织方式,它是一种有层次的、树形结构。所有条目的属性的定义是对象类object class的组成部分,并组成在一起构成schema;
LDAP目录服务是由目录数据库和一套访问协议组成的系统。
1.1LDAP的用途
LDAP 的常见用途是为身份验证提供中心位置 —— 意味着它存储用户名和密码(通常应用在内部网络中)。然后用户可以在多个不同的应用或者服务中使用相同的密码(LDAP通过插件验证用户)。
例如,LDAP 可用于 Docker
,Jenkins
,Kubernetes
,Open VPN
和 Linux Samba
服务器验证用户名和密码。系统管理员还可以使用 LDAP 单一登录来控制对 LDAP 数据库的访问。
1.2从ldap服务器获取域结构信息
Active Directory(AD)是基于LDAP(轻量级目录访问协议)的目录服务,它扩展了LDAP协议并提供了更多功能和特性。因此,可以说AD是LDAP的一个实现。
1.2.1通过adfind获取域结构信息
AdFind是一款功能强大的用于查询Active Directory(AD)的命令行工具,它可以用于执行各种AD查询并获取域结构信息。
AdFind 可以在域中的任何计算机上使用,但在大部分情况下,在域控制器上使用可能更为方便和有效。因为在域控制器上使用 AdFind 可能会更快,因为域控制器存储了整个域的目录数据,并且直接在本地执行查询,而不需要通过网络来获取数据。而且在域控制器上执行查询时,通常拥有更高级的权限,可以更全面地访问和查询 AD 数据。
可以在 AdFind 中用于查询和检索 AD 中的信息:
-
sAMAccountName:用户或计算机的登录名。
-
cn:通用名称,即对象的常规名称。
-
displayName:对象的显示名称。
-
distinguishedName:对象的区别名称,即对象在 AD 中的唯一标识路径。
-
objectClass:对象的类别,描述了对象的类型。
-
objectCategory:对象的类别,提供了更详细的分类信息。
-
userPrincipalName:用户的主体名称,通常用于用户登录和身份认证。
-
description:对象的描述信息。
-
memberOf:用户所属的组。
-
member:组中包含的成员。
-
dNSHostName:计算机的 DNS 主机名。
-
operatingSystem:操作系统名称。
-
operatingSystemVersion:操作系统版本。
-
servicePrincipalName:服务主体名称,用于 Kerberos 身份验证。
-
lastLogon:用户最后一次登录的时间。
获取所有子域
命令:adfind -gc -b "dc=tree,dc=local" sc dclist
域结构如图:
查看域用户
1.2.2 csvde
CSVDE是Windows操作系统中的一个命令行工具,用于导出和导入Active Directory对象到和从一个以逗号分隔值(CSV)格式的文件。CSVDE允许管理员通过文本文件的方式批量管理Active Directory中的对象,例如用户、组、计算机等。通过CSVDE,管理员可以方便地执行批量操作,如创建新对象、更新现有对象属性、删除对象等。
注意事项:
在Windows Server中确实自带了CSVDE(CSV Directory Exchange)工具,而在桌面版的Windows操作系统中通常不会自带。
域成员可以使用CSVDE导出其所在域的活动目录。
子域控制器默认导出的活动目录表是主域控制器的。
要导出子域控制器的活动目录,可以使用"-s"参数指定连接到特定的子域控制器。
主域控制器导出的账户只包括主域内的账户。
域成员可能有权限导出任意域的活动目录信息。
要导出子域控制器的活动目录,可以通过指定子域控制器的IP地址来实现。
以下是CSVDE常用的命令和选项:
导出操作:
- 导出整个目录:csvde -f export.csv
- 按过滤器导出:csvde -f export.csv -r "(objectClass=user)"
- 指定属性导出:csvde -f export.csv -r "(objectClass=user)" -l "cn,sAMAccountName,mail"
导入操作:
- 从CSV文件导入:csvde -i -f import.csv
- 忽略错误:csvde -i -f import.csv -c
其他常用选项:
-s server
:指定要连接的域控制器。-d "DC=domain,DC=com"
:指定要操作的目录。-j path
:指定日志文件的路径。-m
:将所有空值转换为空字符串。-k
:跳过错误并继续进行操作。-j filename
:指定日志文件的文件名。
演示:
在父域导出
在父域导出子域的活动目录
2.域权限和组,特殊账号的认识
2.1组的认识
三种组作用域的比较
组类型 | 作用范围 | 可包含的成员 | 成员是否在全局编录复制 |
---|---|---|---|
域本地组 | 在同一个域内,本域内。 | 来自任何域或任何受信任域的帐户。 来自任何域或任何受信任域的全局组。 来自同一林中任何域的通用组。 来自同一域的其他域本地组。 | 否 |
通用组 | 所有域。 | 来自同一林中任何域的帐户。 来自同一林中任何域的全局组。 来自同一林中任何域的其他通用组。 | 是 |
全局组 | 所有域。 | 来自同一域的帐户。 来自同一域的其他全局组。 | 否 |
全局组:跨域资源管理:全局组通常用于组织和管理跨域资源的访问权限。通过将用户和计算机添加到全局组中,可以轻松地授予他们对特定资源的访问权限。简化权限管理:通过将权限分配给全局组而不是直接分配给个别用户,可以简化权限管理过程。当用户从全局组中添加或移除时,他们的权限也会相应地调整。
域本地组:本地资源管理:域本地组通常用于组织和管理本地资源(如文件夹、打印机等)的访问权限。通过将权限分配给域本地组,可以控制用户对这些资源的访问。灵活的权限控制:域本地组可以包含来自任何域或受信任域的用户、全局组和通用组,使其非常灵活。这使得它们可以用于实现复杂的权限控制方案。
通用组:全局权限管理:通用组在整个林中可见,因此通常用于实现全局的权限管理。通过将权限分配给通用组,可以确保跨域和跨林的用户都能够获得相同的权限。跨域资源访问:通用组可以包含来自同一林中任何域的用户、全局组和其他通用组,因此它们特别适用于实现跨域资源的访问控制。
2.2krbtgt用户
krbtgt用户是 Active Directory 中的一个系统账户,它的主要作用是用于 Kerberos 预身份验证。这个账户由系统自动生成,并且对于每个域来说都是唯一的。
krbtgt用户的主要作用:
-
用于加密服务票据(Service Tickets):Kerberos 认证过程中,krbtgt账户用于加密服务票据。当用户成功进行 Kerberos 认证后,KDC(Key Distribution Center)将使用 krbtgt的密钥来加密服务票据,以便用户能够访问网络资源。
-
生成用户票据(Ticket Granting Tickets):当用户进行身份验证时,KDC 会使用krbtgt的凭据生成用户票据(TGT)。这些用户票据被用于后续的服务访问请求,以验证用户的身份。
-
账户密码的重要性:由于krbtgt是用于加密和解密 Kerberos 票据的关键账户,因此它的密码非常重要。如果krbtgt账户的密码泄露,攻击者可能会利用它来生成伪造的票据,从而进行网络攻击。
补充:Kerberos 预身份验证(Kerberos Pre-Authentication)是一种 Kerberos 认证过程的一部分,用于确保请求访问网络资源的用户是合法的。在正式进行身份验证之前,客户端需要通过预身份验证向 Key Distribution Center(KDC)证明其身份。这是通过向 KDC 发送加密的时间戳或其他凭据来完成的。
预身份验证的主要目的是防止暴力破解攻击,因为它要求客户端在发送身份验证请求之前对密码进行加密处理。如果客户端未能通过预身份验证,KDC 将拒绝身份验证请求,从而防止恶意用户进行不受限制的密码破解尝试。
2.3其他账户
Administrator(管理员):这是默认的域管理员账户,在域控制器上具有完全的权限。这个账户用于管理域内的所有对象和服务。
Guest(访客):这个账户通常用于提供临时访问权限,对于大多数情况下不需要身份验证的服务,如共享文件夹。
DC Account(域控制器账户):每个域控制器都有一个对应的计算机账户,用于在安装域控制器时创建的计算机对象。
SYSTEM:这是Windows操作系统中的系统账户,用于执行系统级别的操作和服务。
Enterprise Admins(企业管理员):这是全局域管理员组,它具有在整个林中执行管理任务的权限。
Domain Admins(域管理员):这是每个域中的管理员组,具有在域级别执行管理任务的权限。