![Linux ksu(kerberized 超级用户)命令无法使用缓存的服务(主机)票证](https://linux22.com/image/713198/Linux%20ksu%EF%BC%88kerberized%20%E8%B6%85%E7%BA%A7%E7%94%A8%E6%88%B7%EF%BC%89%E5%91%BD%E4%BB%A4%E6%97%A0%E6%B3%95%E4%BD%BF%E7%94%A8%E7%BC%93%E5%AD%98%E7%9A%84%E6%9C%8D%E5%8A%A1%EF%BC%88%E4%B8%BB%E6%9C%BA%EF%BC%89%E7%A5%A8%E8%AF%81.png)
最后的问题
关于我的环境
我已在两种不同的环境中尝试过:(i)在 Active Directory(Microsoft)域中注册的 Linux Ubuntu 16.04LTS 服务器和(ii)在 FreeIPA Realm 中注册的 Linux Ubuntu 16.04LTS 服务器。
Krb5 二进制版本:
$ strings libkrb5.so | grep BRAND
KRB5_BRAND: krb5-1.13.2-final 1.13.2 2015050
我喜欢做什么
我正在尝试使用堪萨斯州立大学命令登录当前主机(auhdemo4.addemo.it) 作为另一个用户:服务。具体来说,我正在尝试(i)为用户获取服务票服务对于东道主auhdemo4.addemo.it(二)将票据保存在 MIT 缓存文件中/媒体/公共/krb_kservice(三)将此票提供给堪萨斯州立大学命令以便登录服务。
这应该是可能的
这堪萨斯州立大学MIT 文档指出可以使用缓存文件中的服务票证,我们来引用一下:
否则,ksu 会在源缓存中查找合适的 Kerberos 票证。票证可以是终端服务器的票证,也可以是目标主体领域的票证授予票证 (TGT)。如果终端服务器的票证已经在缓存中,则对其进行解密和验证。如果缓存中没有终端服务器的票证,但 TGT 在,则使用 TGT 获取终端服务器的票证。然后验证终端服务器票证。
我的实验和结果
当使用 TGT Kerberos 票证时,它的效果非常好:
$ kinit -c /media/public/krb_kservice kservice
Password for [email protected]:
$ ksu kservice -n [email protected] -c FILE:/media/public/krb_kservice
Authenticated [email protected]
Account kservice: authorization for [email protected] successful
Changing uid to kservice (50006)
groups: cannot find name for group ID 50024
kservice@authdemo4:/home/userlab$
这是缓存内容,只有TGT:
$ klist -c /media/public/krb_kservice
Ticket cache: FILE:/media/public/krb_kservice
Default principal: [email protected]
Valid starting Expires Service principal
11/08/2017 11:44:07 11/08/2017 21:44:07 krbtgt/[email protected]
renew until 11/09/2017 11:44:03
尝试使用终端服务器 Kerberos 票证(服务票证)时失败,堪萨斯州立大学忽略缓存的票证并要求输入用户密码:
$ kinit -S HOST/[email protected] -c /media/public/krb_kservice kservice
Password for [email protected]:
$ ksu kservice -n [email protected] -c FILE:/media/public/krb_kservice
WARNING: Your password may be exposed if you enter it here and are logged in remotely using an unsecure (non-encrypted) channel.
Kerberos password for [email protected]: :
请注意,我已经尝试了所有这些服务主体:主持人/[电子邮件保护],主持人/[电子邮件保护],主持人/[电子邮件保护],主持人/[电子邮件保护]
这是缓存内容,只有服务票:
$ klist -f -c /media/public/krb_kservice
Ticket cache: FILE:/media/public/krb_kservice
Default principal: [email protected]
Valid starting Expires Service principal
11/08/2017 13:51:05 11/08/2017 23:51:05 HOST/[email protected]
renew until 11/09/2017 13:51:02, Flags: FPRIA
它是可代理、可转发、可续订、初始预认证票证。
简单来说:我尝试使用终端服务器服务票,但没有成功。
我用Wireshark检查了堪萨斯州立大学Kerberos 请求到 DC,以便查找与我请求的服务票证的不同之处。服务名称相同”主机/auhdemo4“,堪萨斯州立大学添加可尊奉为圣典标记到票上,它要求票到TGS,而基尼特将请求发送给 AS:-(
更新,使用 kvno 命令(失败)
我使用 Wireshark 深入检查了堪萨斯州立大学我发现正确的服务是:主持人/[电子邮件保护]
我曾尝试过克诺将服务票证插入缓存:
插入 TGT:
$ kinit kservice -c ./prova.cc
Password for [email protected]:
插入服务单:
$ kvno host/[email protected] -c ./prova.cc
host/[email protected]: kvno = 17
检查缓存内容:
$ klist -c ./prova.cc
Ticket cache: FILE:./prova.cc
Default principal: [email protected]
Valid starting Expires Service principal
11/09/2017 15:18:53 11/10/2017 01:18:53 krbtgt/[email protected]
renew until 11/10/2017 15:18:48
11/09/2017 15:19:07 11/10/2017 01:18:53 host/[email protected]
renew until 11/10/2017 15:18:48
调用 ksu:
$ ksu kservice -n [email protected] -c FILE:./prova.cc
Authenticated [email protected]
Account kservice: authorization for [email protected] successful
Changing uid to kservice (50006)
groups: cannot find name for group ID 50024
它似乎有效,但它总是忽略服务单,并且再次表演从头开始TGS 请求对于 host/authdemo4。我还使用 Wireshark 检查了以下响应之间的差异:堪萨斯州立大学和克诺请求,->I<-没有注意到任何区别(见附图):
我也尝试过使用堪萨斯州立大学多次执行而不清除缓存,并且每次都再次执行 TGS 请求。
简而言之:使用终端服务器服务票证的尝试不起作用(服务票证总是被重新请求)。
问题
它们有一点重叠:-)
- 有没有办法用兼容的服务票证填充 Kerberos 缓存文件堪萨斯州立大学?
- 有没有其他选择克诺命令以便向 TGS 执行服务票证请求?
- 我做错了什么吗?有什么建议吗?
- 您认为这是一个 ksu 错误吗?:-)
问候
答案1
答案
有没有办法用与 ksu 兼容的服务票证填充 Kerberos 缓存文件?
不,因为 1.13 版 ksu 不利用缓存服务票证
有没有可以替代 kvno 命令来向 TGS 执行服务票证请求的方法?
我的搜索还没有找到替代方案但之前的回答让我觉得这对我来说不那么重要
我做错了什么吗?有什么建议吗?
不看来我的工作是正确的,问题在于改变的(未记录的)ksu行为
您认为这是一个 ksu 错误吗?:-)
关于 YES,这是 ksu 错误或文档错误,开发人员改变了行为,但忘记与文档同步
我提交了一份错误报告并得到了反馈(感谢 ksu 维护者 Greg Hudson 的及时支持)。他们表示,之前的一次错误修复改变了 ksu 1.13 版的行为,但他们没有注意到/没有更新文档。
提交的bug报告: http://krbdev.mit.edu/rt/Ticket/Display.html?id=8619
当前 ksu 行为不符合文档(关于缓存中的服务票证)。
ksu 版本 >= 1.13这未从缓存文件中读取/验证终端服务器服务票证但仅验证缓存的 TGT. 当调用 ksu 时,会向 TGS 发出服务票证请求,以验证缓存的 TGT。
目前,他们仍在考虑该怎么做。我建议恢复记录的行为,我将在将来根据他们的最终决定更新此问题。
更新:他们回复了错误请求并决定恢复记录的行为,但ksu
在 Krb5 项目中这并不是高优先级,他们无法保证工作的时间表。