6

我正在编写一个 pGina 插件以在登录时从我们的 KDC 获取 AFS 令牌和 Kerberos TGT,同时我注意到 kinit 的一个“功能”是它不会让你提供任何输入,除非它来自键盘,我的想法是只是重定向标准输入......

有人建议为主体使用 keytab 文件,这似乎超级简单,直到我意识到我只在 linux 上使用了 kutil,并且在使用 ktpass.exe 的 Windows 版本时遇到了困难。我已经反复尝试使用大量参数组合来创建密钥表,但到目前为止绝对没有成功,我发出的当前命令是:

ktpass /out key.tab /mapuser user$@MERP.EDU /princ user.merp.edu@MERP.EDU /crypto RC4-HMAC-NT /ptype KRB5_NT_PRINCIPAL /pass mahpasswordlol /target MERP.EDU

不幸的是,所有这些输出都是

Using legacy password setting method

FAIL: ldap_bind_s failed: 0x31

根据我的研究,这是一个身份验证/加密问题,我已经尝试过使用其他 DES 设置,但这似乎也不起作用......有人对这可能如何工作有任何经验/想法吗?

4

1 回答 1

11

ktpass.exe 确实很糟糕;我不使用它。相反,只需在 Unix 上使用 ktutil 使用密码独立创建匹配的密钥表,例如:

$ ktutil
ktutil:  addent -password -p foo@BAR -k 1 -e aes128-cts-hmac-sha1-96
Password for foo@BAR:
ktutil:  l
slot KVNO Principal
---- ---- ---------------------------------------------------------------------
   1    1                                  foo@BAR
ktutil:  wkt /tmp/zz
$ klist -ek /tmp/zz
Keytab name: WRFILE:/tmp/zz
KVNO Principal
---- --------------------------------------------------------------------------
   1 foo@BAR (aes128-cts-hmac-sha1-96)

LDAP 绑定错误表明 ktpass 无法向域控制器验证您的身份;发生这种情况时,您是否登录了域帐户?它必须是域帐户,而不是本地帐户(并且它必须被授权才能对 AD 进行必要的更改,尽管缺少这会导致权限错误而不是绑定)。

FWIW,我们对此采取了不同的方法:我们在 Unix 和 AD 领域之间使用跨领域信任。用户在登录时获得的 AD TGT 也足以获取 Unix 领域中服务的凭据;例如,我可以使用 PuTTY 通过 SSH 连接到 Unix 主机,使用 Firefox/Chrome/IE 对 Unix Web 服务 (Apache/mod_auth_kerb) 进行身份验证等。

于 2012-08-22T02:45:34.537 回答