两周来一直试图解决一个问题,但没有成功。所以我会把它分解成更小的问题,希望能理解这个过程并找到解决方案。
我们有一个 Windows AD 域,其中一些 Linux (Debian) 客户端通过 sssd 加入。加入域的 Linux 客户端向 DC 服务器发送安全事件(事件 ID:4624、4768、4769、4770、4634、4661、4623)。所有事件都在 AD 上填充。所以设备正在通信。我们的问题在于这些事件中的一些值(字段)(例如,TargetUserName 显示主机名而不是用户名 - 我们需要它来显示用户名,以便我们的 SSO 代理可以读取用户状态)。
问题 1:Linux 客户端上的事件是如何/在哪里生成的?我想知道哪个文件生成了上述安全事件,以便我可以仔细查看并在需要时进行修改。
问题 2:Linux 客户端通过哪种方法告诉 KDC (AD) 域用户已登录/退出/处于活动状态/已更改组等?它是使用主机的 keytab (/etc/krb5.keytab) 进行通信还是使用 /tmp/krb5cc_**** _下生成的用户令牌文件?
如果需要,我可以在此处提供 sssd、smbclient、krb5 任何配置文件。
AD 客户端不会显式发送任何安全事件。(允许他们生成任意事件将是……不安全的。)在 DC 上记录为事件的任何内容都由 DC 本身记录,并且是客户端对 DC 执行的某些其他操作的结果。
例如,DC 仅在处理实际的 Kerberos AS-REQ 消息(以发出初始 Kerberos 票证)时记录事件 4768;如果客户端使用旧的 Netlogon 协议而不是 Kerberos 进行身份验证,则 DC 不会记录 4768。
登录该事件的用户 ID 不是由客户端任意选择的,而是其凭据刚刚由 DC 验证的确切用户 ID。因此,如果用户 ID 是“computer$”,则字面意思是 DC 为机器帐户“computer$”而不是为任何个人帐户签发了一张票。
AD 不进行中央会话记帐,因此没有发送实际的“登录”事件——最接近的是“通过 Kerberos 进行身份验证”或“通过 Netlogon 协议进行身份验证”事件,表明凭据已经过验证,但它没有确实表明会话已建立。同样,根本没有“活动”或“注销”事件,只要用户拥有有效的 Kerberos TGT,他们就会登录。
如果您看到来自 Windows 客户端的登录/注销事件,它们很可能对应于在 DC上创建的会话,而不是在客户端上;更具体地说,我怀疑它们对应于连接到
Sysvol
DC 上托管的文件共享以下载用户 GPO 文件的 Windows 客户端。运行 Winbind 的 Linux 客户端根本不会查看 GPO。尽管运行 SSSD 的客户端可能会。没有“组更改”事件——DC 通知客户端用户属于哪些组,而不是相反。(本地组成员身份不会报告给 DC,并且不会影响本地计算机之外的任何安全决策 - 例如,当通过 SMB 访问文件服务器时,仅使用 Kerberos 票证的 PAC 中列出的 DC 提供的组。)
两个都。AD 客户端使用其机器凭据(krb5.keytab 或 LSA“机器密码”)来检索用户信息(例如将用户名映射到 UID 并返回)并下载机器级组策略,而用户调用的程序将依赖于用户自己的 Kerberos 凭据($KRB5CCNAME 或每个用户的 LSA 凭据)来访问文件服务器、执行 Web SSO 等。
一个主要区别是,在大多数 Linux AD 客户端中,与 LDAP 目录的标准通信由单个服务(SSSD 或 Winbind)处理,然后该服务始终使用机器凭据来检索信息,例如,如果您运行
ls -la
以列出文件、它们的所有者 UID/ GID 由 SSSD/Winbind 使用机器凭据进行转换——而在 Windows 中,相同的通信由需要数据的进程直接完成,例如,如果您通过“安全”选项卡将用户添加到文件 ACL,则它是资源管理器.exe 执行实际的 LDAP 搜索并使用用户的凭据执行此操作。