限制Kerberos TGT的使用范围

问题描述 投票:0回答:1

我是Kerberos的新手。我正在使用Kerberos测试“单点登录”功能。环境:Windows客户端(具有Active Directory身份验证)连接到Linux计算机上运行的Apache服务器。被调用的cgi脚本(在Perl中)使用转发的用户TGT连接到DB服务器。一切正常(我有主体,密钥表文件,配置文件以及来自数据库服务器的结果:))。因此,如果在Windows端以win_usr_a身份启动我的CGI请求,则CGI脚本将连接到远程数据库并查询select user from dual,然后它又返回[email protected]

我只有一个要解决的问题。当前,凭证缓存存储为FILE:....。在中间Apache服务器上,运行Apache服务器的用户会获取所有已认证用户的转发的TGT(因为它可以看到所有凭证缓存),而TGT的生存期不会过期它可以为那些用户请求任何服务主体。

我知道主机在定义上被认为是Kerberos信任的主机,但是如果我可以限制转发的TGT的可用性,我会很高兴。例如,我可以设置Active Directory来限制转发的TGT仅在请求给定服务主体时有效吗?和/或有一种方法可以定义转发的TGT,使其只能使用一次,即在请求任何服务主体后变为无效。还是cgi脚本有办法检测转发的TGT是否被其他人使用(也许检查使用计数器?)。

现在我只有一个解决方案。我可以将转发的TGT的生存时间定义为2秒,并在建立数据库连接后在CGI脚本中启动kdestroy(我将CGI脚本设置为可由apache-user执行,但它不能修改代码)。我还能做些吗?

凭据缓存应以某种方式隐藏。我认为将凭据缓存定义为API:会很好,但这仅适用于Windows。在Linux上,也许KEYRING:process:name或MEMORY:可能是更好的解决方案,因为它对于当前进程而言是本地的,并在退出该进程时销毁。据我所知apache为新的连接创建一个新的过程,所以这可能工作。也许KEYRING:thread:name是解决方案?但是-根据thread-keyring(7)手册页-它不是克隆所继承的,而是由execve sys调用清除的。因此,例如execve调用Perl,它将不获取凭据缓存。也许使用mod_perl + KEYRING:thread:name?

任何想法将不胜感激!预先感谢!

active-directory kerberos
1个回答
0
投票

简短的答案是,如果客户端在给定的时间点碰巧拥有所有必需的位,则Kerberos本身不提供任何机制来限制谁可以使用它。一旦有了可用的TGT,就可以使用可用的TGT,并且可以随心所欲地对其进行操作。就安全问题而言,这是一个有缺陷的设计。

Windows将此称为无约束委派,特别是通过一个称为[MS-SFU]的Kerberos扩展解决了此问题,该扩展更广泛地称为“约束委派”。

该协议的要点是,您将常规服务票证(不附带TGT)发送到服务器(Apache),并且服务器已经足够明了,可以知道它可以将服务票证本身交换为代表委托的服务票证。 Active Directory中的服务器(DB)。然后,服务器使用新的服务票证向DB进行身份验证,尽管Apache发送了该命令,但DB仍将其视为win_usr_a的服务票。

当然,诀窍就是启发。如果不了解有关CGI中身份验证如何进行的详细信息,就无法说出您所做的工作是否支持[MS-SFU]

© www.soinside.com 2019 - 2024. All rights reserved.