我对 Windows 上的 Kerberos 有几个问题。
我想找出使用 ktpass 将用户映射到服务的目的是什么。
例如我在 Windows 上像这样运行 ktpass:
ktpass -out <keytab location> -princ <host/domain.com> -mapUser [email protected] -mapOp add .........
当我们将用户映射到时,-princ
是否意味着只有“用户A”可以验证服务?我们如何使用-add
和-set
选项?有什么区别?
我的问题是这样的:
我有:
- 许多用户想要使用我拥有的服务,并通过 kerberos 进行身份验证(JASS Krb5LoginModule)
但:
- 我不想在 jaas.config 文件中指定许多用户主体名称。
因此,我考虑改用 SPN,并映射到用户 A,这样用户 A 就只能使用该服务。但我不确定这种映射是否也起到授权的作用。
对于 sun java 的 Krb5LoginModule,有一个选项 useTicketCache。
如果我将其设置为 true,是否意味着如果某个用户登录,Krb5loginmodule 将使用存储在其计算机内存中的 kerberoes 凭据?
我之所以问这个问题,是因为在 Krb5loginmodule 的其他一些实现中,
例如:IBM 的实现中,没有 useTicketCache,但有 useCcache,但 useCcache 需要指定票证位置;我不想指定这个位置。
在 IBM 的 krb5loginmodule 版本中如何做到这一点?
我可以这样做吗:
通常,密钥表文件用于服务主体,但我可以使用此密钥表来存储用户凭据吗?
例如:不执行或?ktab -k mykeytab.keytab -a [email protected] ?
setspn
ktpass
答案1
在 AD 中,Kerberos 服务主体作为 servicePrincipalName LDAP 属性与 AD 用户或计算机对象相关联,因此您必须指定应将主体添加到的帐户。这并不能确定哪些用户可以进行身份验证到服务(正如您所猜测的),而是服务本身应该在哪个 AD 帐户下运行(如果它在 Windows 上运行)。这是因为服务需要该主体的密钥来验证用户将发送给它的 Kerberos 票证,并且如果它在主体所附加的帐户下运行,它将有权访问密钥。这在 Windows 上会自动发生;在 Unix 上,它通常由管理员手动安排,创建包含密钥的 keytab 文件,并配置服务以使用它。
对于 sun java 的 Krb5LoginModule,有一个选项 useTicketCache。如果我将其设置为 true,是否意味着如果某个用户登录,Krb5loginmodule 将使用存储在其计算机内存中的 kerberoes 凭据?
这就是我们的想法,尽管它的效果并不好,因为 Java 选择在 JDK 中嵌入完整的 Kerberos 实现,而不是使用主机提供的实现(后者有一个选项,但仅限于 Unix,大多数人不知道或使用它)。在 Unix 上,Java Kerberos 包可以读取 MIT 样式的 ccache,但不能写入它。在 Windows 上,它可以读取 SSPI ccache(用户的登录凭据),但您需要设置一个注册表项:
HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\Lsa\Kerberos\Parameters\allowtgtsessionkey = DWORD 1
... 以便 Java 能够获取 TGT 的会话密钥以便使用它。默认情况下,这是受限制的,并且通常不需要,因为 Windows 程序通常会要求 SSPI 执行需要会话密钥的操作,而不是自己执行这些操作。
通常,密钥表文件用于服务主体,但我可以使用此密钥表来存储用户凭证吗?
密钥表存储一组 (主体、密钥) 对;主体是用户还是服务并不重要。您可以将与密码相对应的密钥存储在密钥表中(例如使用 MIT“ktutil”程序),然后使用密钥表进行身份验证,而不是输入密码(例如使用“kinit -k -t”)。但是,请记住,这本质上与将密码放入文件中相同,所有这些都涉及安全性。