我正在研究 Active Directory 目录服务 (AD) 和所有相关事物(LDAP、kerberos 等)。我不完全了解 LDAP 对象和 AD 之间如何交互。所以您能否评论一下我对它们交互的理解(如下所示):
有一些对象可以在域中进行身份验证 - 其中最重要的是用户和计算机。有关此对象的信息(域中的名称、权限、一些个人信息等)存储在称为全局目录 (GC) 的东西中,但身份验证信息(密码哈希)存储在域控制器 (DC) 上的 SAM 中。例如,让我们假设 AD 域中的身份验证基于 Kerberos。因此,当用户(或其他对象)进行身份验证时,他使用 Kerberos 协议并开始与 DC 交互,并且在身份验证阶段没有 LDAP。但是当通过身份验证阶段时,DC 需要授权此用户,因此对于授权,DC 使用 LDAP 存储(可以是 DC 上的本地存储或远程存储),然后,如果用户有权在域中进行身份验证,则授予 Kerberos 票证(我省略了获取 Kerberos 票证的困难过程,我们只考虑它的最后阶段)。因此,当用户想要进行某些操作(例如读取特定文件或目录)时,用户的主机将向 DC 发出操作请求,DC 将检查 LDAP 存储中的权限。如果可以的话,那么 DC 就会授予用户票证以执行特定操作(再次,我省略了获取文件/目录访问权限的票证的困难过程)。
我对吗?
答案1
所有数据都存储在 LDAP 目录中,该目录本身就是一个具有特定对象类型架构的数据库。正如您所提到的,某些对象类型(即计算机继承自的用户)可以通过 Kerberos 等协议向 Active Directory 进行身份验证。
SAM 仅存在于非域控制器的计算机上,用于存储本地用户信息或缓存的凭据身份验证器(大多不相关)。所有域控制器(有一些例外)都包含所有用户详细信息,可以对域内的任何用户进行身份验证,实际上不需要 SAM(一些较旧的组件将 AD 本身称为 SAM,但现在它们只是 LDAP 中的对象)。
Kerberos 使用的所有密钥都存在于给定的用户对象或特殊系统对象(如)上krbtgt
。当用户通过身份验证时,KDC(Kerberos 服务器部分)会向 LDAP 查询用户、krbtgt
和资源(计算机、服务等)。然后,KDC 使用这些查询对象上的密钥来满足协议要求。
基本过程是这样的。
- 用户将其 PC 加入域。
- 域创建一个名为的新计算机对象
violetapple-pc$
,并在该对象上设置密码。 - 用户登录计算机。Kerberos 启动:
- 计算机找到域控制器并向 DC 上的 KDC 发送身份验证请求 (AS-REQ)。此请求包含用户名和身份验证数据。(有关详细信息,请参阅 Kerberos RFC 4120)
- KDC 收到请求,在 LDAP 目录中查找用户并验证身份验证数据。然后,它找到帐户
krbtgt
并生成包含受机密保护的用户身份的票据授予票据krbtgt
。TGT 返回给计算机。 - 现在计算机有了 TGT,但无法读取它(计算机没有密钥)。计算机向 KDC 发送请求,获取包含
violetapple-pc$
TGT 的服务票证(TGS-REQ)。 - KDC 接收请求、验证 TGT、查找计算机对象并生成受步骤 1 中创建的计算机机密保护的票证。该票证返回给计算机。
- 计算机收到票证并拥有步骤 1 中的秘密,因此它可以解密票证。票证中包含有关用户的所有信息(组成员身份、密码过期时间等)。
DC 和 KDC 处理的所有事情都发生在同一台机器上,实际上是在同一个进程中。