我正在编写一个执行用户登录并提供网络内 SMB 共享的单点登录访问的系统。
用户登录通过 Kerberos 5 进行,以验证用户身份并获取 TGT 票证。访问 SMB 共享时,TGT 票证用于获取托管共享的服务器的 TGS 票证,并使用该 TGS 执行会话设置(由此实现 SSO)。
一切正常,直到用户尝试访问 DC 上的 SMB 共享。在这种情况下,DC 将向 Tree Connect 请求返回 STATUS_ACCESS_DENIED,如下面的链接所示。
该用户是域管理员组的成员。因此,应该有权访问 IPC$ 共享
有趣的是,如果我不使用 TGS 执行会话设置,而是使用 NTLMSSP(使用相同用户的凭据)执行会话设置,那么 DC允许连接到共享。
为什么根据执行的身份验证(NTLMSSP 与 Kerberos 5)为 SMB 会话分配不同的权限?
这有点像 GPO/GPP 配置,但我对此的了解非常有限。
使用 Kerberos 5 时,是否需要在针对 DC 的会话设置中执行进一步的步骤?或者,如果服务器返回 STATUS_SUCCESS,是否可以安全地假设我做得正确?
几点说明:
- SMB 客户端在连接到所需共享之前始终尝试连接到 IPC$ 共享以执行一些 IOCTL。
- 我已经验证我的系统的日期和时间与 DC 的日期和时间同步
- 该系统是在 Linux 上开发的。我使用的是 heimdal 的 libkrb5 和专有的 SMB 客户端(我有能力修改这两个库)
更新:即使跳过连接到 IPC$ 共享,而直接连接到所需共享,行为也是一样的。DC 将向 Tree Connect 请求返回 STATUS_ACCESS_DENIED。
答案1
默认为 Windows DC需要SMB 消息签名。这是由 DC 在安全模式部分协商协议响应。
有问题的(专有)SMB 客户端在使用 Kerberos 并执行未签名的树连接请求。这导致服务器(DC)拒绝访问共享。
修改 SMB 客户端并确保其遵守需要签名当使用 Kerberos 凭据时标记,就可以连接到 DC 的 SMB 共享。