如何在 WSL 和/或 Docker 中使用 Windows Kerberos 票证

如何在 WSL 和/或 Docker 中使用 Windows Kerberos 票证

我对 Kerberos 身份验证了解不多,只是对配置和使用有一些基本经验。最近我注意到 Windows 有一个已配置的内置 Kerberos 实现。因此,当我在 PowerShell 中运行 klist 时,我会得到一个可用的票证列表。对于各种 Dev-Ops 主题,我们在团队中使用 Linux,使用 WSL 和 Docker 作为构建代理和本地开发环境。我们的 docker 映像已针对 Kerberos 进行了很好的配置,我可以使用 kinit 来获取票证。但是,在这种情况下,用户必须再次输入其凭据。

我最近看到了以下答案(关联):

一旦您登录 Windows,LSA 就会在内存中保留您的主体和密码,并在必要时立即重新获得一张新的票。

问题:有没有方法可以从 Windows 检索 Kerberos 票证并将其复制到在同一系统上运行的 Docker 容器或 WSL 环境?(显然,问题更多的是关于“如何做”而不是“有解决方案吗”......)

在两种情况下,我们在 Linux 和 Windows 之间共享卷。

Reddit 上也有一篇关于类似主题的帖子:关联

以下帖子还建议我们确实将这些票存储在本地:关联

注意:在我的案例中,我们拥有带域控制器的企业网络环境。在配置的 Linux 节点(Linux 桌面、Docker 容器)上,kinit 运行良好。

其他参考资料:

Kerberos 票证存储在凭据缓存中。Windows 支持多种凭据缓存:

  • FILE 缓存:简单且最易移植。使用简单的平面文件格式来存储一个又一个凭证。这是 Linux 和 OSX 上的默认设置。
  • API 缓存:仅在 Windows 上实现,它与将凭据保存在内存中的服务器进程进行通信。这似乎是 Windows 上的默认设置。

注意:有人建议我将此问题从 stack overflow 移到这里。

答案1

使用 MIT 客户端时,凭证缓存文件是正确的方法,但你需要在容器镜像中添加更多内容。例如在 ubuntu 容器中-

  • 安装了Kerberos 客户端 egkrb5-user
  • Kerberos 配置/etc/krb5.conf

%KRB5CCNAME%在主机上配置指向文件的变量。例如c:\temp\krb5.cache

当你实例化容器时,将其挂载c:\temp\krb5.cache/tmp/krb5.cache路径并将$KRB5CCNAME容器内的变量导出到文件路径(或配置[libdefaults] default_ccache_name = FILE:...

更好的方法可能是使用密钥表并将密钥表安装到容器内,然后从该密钥文件中进行 kinit。

相关内容