我对 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 运行良好。
其他参考资料:
- MIT Kerberos 文档 - 凭证缓存
- Kerberos - 凭证缓存
- Windows CCAPI
- Kerberos 版本 5 身份验证协议的工作原理
- 像素
- 操作系统
- 神经系统
- 添加对 Kerberos/Active Directory/“windows”身份验证的支持
- 使用 Firefo 在 Windows 上进行 Kerberos 和 Spnego 身份验证:
Kerberos 票证存储在凭据缓存中。Windows 支持多种凭据缓存:
- FILE 缓存:简单且最易移植。使用简单的平面文件格式来存储一个又一个凭证。这是 Linux 和 OSX 上的默认设置。
- API 缓存:仅在 Windows 上实现,它与将凭据保存在内存中的服务器进程进行通信。这似乎是 Windows 上的默认设置。
注意:有人建议我将此问题从 stack overflow 移到这里。
答案1
使用 MIT 客户端时,凭证缓存文件是正确的方法,但你需要在容器镜像中添加更多内容。例如在 ubuntu 容器中-
- 安装了Kerberos 客户端 eg
krb5-user
包 - Kerberos 配置
/etc/krb5.conf
%KRB5CCNAME%
在主机上配置指向文件的变量。例如c:\temp\krb5.cache
当你实例化容器时,将其挂载c:\temp\krb5.cache
到/tmp/krb5.cache
路径并将$KRB5CCNAME
容器内的变量导出到文件路径(或配置[libdefaults] default_ccache_name = FILE:...
)
更好的方法可能是使用密钥表并将密钥表安装到容器内,然后从该密钥文件中进行 kinit。