Windows的MIT Kerberos下的多个领域和多个TGT


10

我的本地计算机使用Windows 7 Pro,属于领域LR,由AD服务器管理。连接到该领域的网络后,我登录到计算机。我可以使用MIT Kerberos for Windows ver查看TGT。4.0.1。

我想访问外国领域FR中的资源。LR和FR之间没有Kerberos信任,但是它们允许彼此之间的TCP通信。我要求使用其KDC(Red Hat IdM / FreeIPA)的FR TGT,并在遇到挑战时成功输入密码。同样,我可以使用MIT Kerberos for Windows ver查看TGT。4.0.1。我现在可以通过SSH访问FR中的资源,而无需输入密码,尽管它源自LR。

问题是当我获得FR的TGT时,LR主体的TGT消失了。在MIT Kerberos中仅可见FR TGT。如果我锁定计算机,然后使用密码解锁,则FR TGT消失了,取而代之的是新的LR TGT。

看来用于Windows的MIT Kerberos一次只能存储一个TGT。每个TGT都可以为所有意图和目的完全发挥作用。如何配置MIT Kerberos,让我一次拥有两个TGT,每个领域一个?是否可以对多个客户端实例进行“隔离”,每个实例都指向不同的KRB5_CONFIG和本地密钥表?如果无法这样做,即使没有域间信任,也存在Windows客户端Kerberos 5的替代实现吗?

PS-我不要信任。无法获得信任。

更新:我早些时候省略了一些细节,因为我认为这可能会使问题困惑。但是根据布拉德的回答,这可能是有根据的。我希望大多数本地软件都将使用Kerberos的内置Windows实现,并始终使用LR keytab。

但是,像我这样的高级用户会在Cygwin下使用heimdal SSH进入FR。我希望通过Cygwin DLL的任何东西都使用heimdal,并且永远不会看到LR TGT(它不会,至少默认情况下不会)。我明确地初始化并继续。

棘手的部分出现在非超级用户身上,我必须支持那些不使用Cygwin但使用PuTTY的用户。PuTTY确实允许您指定要使用GSSAPI实现的库路径和DLL。例如,我将SSH会话配置为使用MIT Kerberos DLL而不是内置Windows DLL。我希望那里有一个从未尝试找到LR TGT(例如heimdal)的DLL,或者允许来自多个领域的多个TGT。它不必像MIT Kerberos一样具有GUI窗口,但它可以提供帮助。


有趣的问题。
mfinni 2014年

Answers:


4

好吧,我不会说Windows无法做到这一点,但我会说限制是基于会话的。 然后的问题是,对于每个会话,Windows都会缓存一张票证。当您锁定计算机然后将其解锁时,将启动另一个会话,并从KDC请求新密钥。当您注销然后再次登录到计算机时,会发生同样的事情。这种方法实际上也是确定服务器会话的用户权限的方式,这意味着可以缓存密钥/票证,以便您启动的每个服务器资源或会话都不需要询问您的密码,但是我从未听说过/读取/研究它可以缓存多个。

现在,您可能已经知道,在问题中已经显示出您的知识,因此,基于Windows存储您在发出TGT时获得的密钥并且基于会话的事实,我不会说认为仅Windows就有可能。Windows的MIT Kerberos可能具有一种在一个用户下启动两个会话的方法,但是即使如此,我仍不确定所访问的资源如何知道要使用哪个票证/密钥对。那有意义吗?

请参阅此内容,以获取Windows如何存储TGT /密钥对的描述。

很好的问题。


我更新了原始问题,希望可以解释资源如何知道要使用的票证/钥匙对。
Toddius Zho 2014年

同样,这是一个很好的问题,但是不幸的是,我只能回答(就像我已经知道的那样)关于原始Windows方面的事情,就像您在原始问题中所问的那样。除了第三方插件/软件之外,我不知道有没有GUI的本地方法。希望我能提供更多帮助。
布拉德·布查德

4

好的,我想出了一个需要进一步完善的可行解决方案,因此可能无法在所有环境中都可以使用。

这适用于:

  1. 具有Windows支持工具(KSETUP.EXE,KTPASS.EXE)的Windows 4.0.1的MIT Kerberos
  2. 腻子 0.63
  3. Windows 7 SP1

我一直在寻找MIT Kerberos源,并且遇到了WindowsREADME。特别令人感兴趣的是凭据缓存的不同值。它支持API:的默认值,但是令人惊讶的是我使用MSLSA:找到了我的注册表。

我打得四处的不同值ccnameHKEY_CURRENT_USER\Software\MIT\Kerberos5。我尝试了MEMORY:首先,这导致了一些有趣的行为。当打开PuTTY会话时,我的MIT Kerberos Ticket Manager窗口将还原并进入前台,要求我输入凭据。哇!那以前从未发生过,但是可惜,腻子会拒绝它。对我有用的是FILE:C:\Some\Full\File\Path。我不确定如何保护对指定文件的访问,因此我将其留给读者练习。我有一个从窗口到前景的行为,只有PuTTY这次喜欢它。票务管理器窗口最终还显示了LR和FR票证。票证被证明是可转发的,并且可以在多个Windows锁定/解锁中幸免。注意:确保在注册表编辑之间完全退出并重新启动票务管理器。我还没有尝试过了ccnameAPI:尚。

我不知道这是否有所作为,但在开始工作之前我也曾尝试KSETUP。首先,无参数的KSETUP只会向我显示有关LR的信息。我在本地工作站上添加了有关FR的一些信息。

ksetup /AddKdc FOREIGN.REALM KDC.FOREIGN.REALM
ksetup /AddRealmFlags FOREIGN.REALM TcpSupported Delegate NcSupported

2

对我来说,看起来有点像Windows的Kerberos中的错误。

我发现以下内容:

如果我在KfW 4.0.1窗口中使用“获取票证”选项,则它可以正常工作;我可以点击“获取门票”按钮,并获取登录时获得的原始门票的其他门票。

如果我在KfW窗口中单击“设为默认”选项,则从此后每次单击“获取工单”,新工单将替换默认工单,而不是在已知工单列表中添加另一个条目。此时检查注册表将显示ccname已添加条目(如Toddius的回答)。令人惊讶的是,删除该条目将恢复以前允许多个票证的行为。


我可以确认这种行为。我想知道您是否将它作为MIT的错误提出?
Paul Hedderly,2015年

2

在听完Toddius的回答后,我遇到了一个处于类似情况的同事(Windows 7 Enterprise 64位,加入了AD域,还运行MIT Kerberos for Windows 4.0.1):他的Kerberos Ticket Manager副本将只允许他拥有一名校长/一名TGT。只要他使用“获取工单”按钮获取其他主体的TGT,以前的主体就会消失。

我查看了自述文件,并且大多数注册表项都按预期设置,除了 path上的ccnameHKEY_CURRENT_USER\Software\MIT\Kerberos5。该键设置为值MSLSA:。我们的解决方法是将其更改为API:。更具体地说,这些步骤是:

  1. 退出Kerberos Ticket Manager以及所有其他应用程序(因为您将重新启动)。
  2. 在“注册表路径”处HKEY_CURRENT_USER\Software\MIT\Kerberos5,将ccname项更改为API:(API,然后是冒号)。
  3. 退出regedit,然后重新启动。
  4. 重新登录后,运行Kerberos票证管理器,然后使用“获取票证”按钮获取非AD主体的TGT。

通过上述步骤,一切正常,我的同事现在可以一次查看多个主体/ TGT。

顺便说一句,用于Windows的MIT Kerberos引入了自己的命令行程序集(如klist),并且这些程序支持多个凭据缓存。在我的64位系统上,当我"C:\Program Files\MIT\Kerberos\bin\klist.exe" -A"在获取多个TGT之后运行时,我在MSLSA缓存中看到了Active Directory主体,然后为每个其他主体有一个API缓存。

PS:这是我在该网站上的第一次条目,所以我无法将其添加为Toddius答案的评论。道歉!

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.