Windows Docker容器使用Kerberos进行身份验证

时间:2020-03-31 23:09:38

标签: windows docker containers kerberos

我的目标是运行一个Windows Docker容器,该容器可以通过Kerberos进行身份验证以访问Windows资源。为此,我镜像了一个适用于Linux容器的安装程序。我基于installs the most recent Kerberos MSI for Windows的winamd64 / python创建了一个Docker映像。它为我的用户*在密钥选项卡上运行kinit,并在我指定的缓存文件中成功生成票证。下面的代码段:

RUN cmd /c "type nul > /path/to/krbcache"
RUN cmd /c "setx KRB5_CONFIG C:\path\to\krb5.conf"
RUN cmd /c "setx KRB5CCNAME C:\path\to\krbcache"

WORKDIR /path/to/
RUN cmd /c "kinit -k -t myuser_keytab myuser@REALM"

当我执行到该容器时,我在krbcache文件中看到一张票,一切似乎都很棒。但是,当我运行klist时,看到以下错误:

A specified logon session does not exist. It may already have been terminated.

此外,当我执行一个正在运行的容器并运行kinit时,此操作成功。但是,如果我打开第二个shell并在同一个正在运行的容器中执行exec,klist报告一个不同的LogonId,并且不了解会话。

Exec1@ContainerA>klist

Current LogonId is 0:0x21fdb825

Cached Tickets: (0)
Exec2@ContainerA>klist

Current LogonId is 0:0x2210bba0
...

A specified logon session does not exist. It may already have been terminated.

几个问题:

  • 为什么同一容器中每个exec cmd.exe的LogonId都不一样?

  • 为什么密钥表成功地用于在工单缓存中生成工单,而klist从不显示缓存的工单? This post在标准的Windows非容器世界中指示了相同的问题,但是不同之处在于仍对该用户正确验证了票证,在这种情况下,我的票证似乎根本没有使用。

*从长远来看,目的不是将密钥表放在我的Docker Image中。我只是出于在我的开发箱上进行测试的目的。

0 个答案:

没有答案
相关问题