【问题标题】:How does Kerberos handle multiple TGT request in the same node for the same service and for the same client?Kerberos 如何在同一节点中为同一服务和同一客户端处理多个 TGT 请求?
【发布时间】:2018-05-17 09:06:34
【问题描述】:

根据我对 Kerberos 架构的理解,客户端需要从身份验证服务器获取特定的 Ticket-Granting-Ticket (TGT) 才能与服务交互。这些 TGT 包含:

  • 客户 ID
  • 客户端网络地址
  • 机票有效期
  • 客户端/TGS 会话密钥。

我从here得到这个

假设我有一个主工作流,其中包含:pig、hive 和 spark 文件,我需要三个不同的 TGT,每个服务一个,才能成功使用它们。

TGT 中的元素之一是票的有效期。让我们假设这设置为 8 小时。

据我了解,如果主工作流需要,比如说,10小时完成,8小时后可能会失败,因为票证的有效期将结束。

因此,据我了解,有必要每 8 小时刷新一次此 TGT 才能与服务通信而不会出现问题。

现在我正在考虑一种可能的方法,让后台进程每 8 小时刷新一次此 TGT,因此客户端对于任何必要的服务始终拥有一个有效的 TGS 会话密钥。

这种方法的一个可能问题是,刷新之间可能存在间隙,甚至是 30 秒的间隙或 1 分钟的任何延迟间隙,这可能会导致客户端使用无效的 TGS 会话密钥。

我的问题:是否可以每 6 小时刷新一次此 TGS 会话密钥,这意味着使用之前的 TGT 获取新的 TGT 仍然有效?如果您在有效请求仍然存在时发出此 TGT 请求会发生什么?旧的是否被替换/删除,都存储在客户端中还是只是忽略了这个新请求?

我对此完全陌生,所以如果有其他方法可以处理此问题,请告诉我。

【问题讨论】:

  • 这里有些混乱。 TGT = 身份证明。您需要一个来获得多个服务票
  • 郑重声明,Kerberos 的 Java 实现将票证缓存用于 TGT,但不用于服务票证;这些始终是 JVM 私有的。而 C 实现对两者都使用缓存(例如 Python 可以重用由 curl 创建的服务票证)。此外,Java 实现不会创建可更新的票证,也不能更新缓存中的现有票证。
  • 最后,Hadoop 在 Java 之上有自己的实现——参见。 S. Loughran (HortonWorks) 的 GitBook “Hadoop 和 Kerberos,超越大门的疯狂”
  • 非常感谢@samson。在答案中添加这个 cmets,这样我就可以投票了。毕竟它是问题的有价值的补充信息
  • 顺便说一句,您可能还对我对stackoverflow.com/questions/33211134/… 的回答和 Chris Nauroth(前 HortonWorks)对stackoverflow.com/questions/34616676/… 的回答感兴趣

标签: hadoop kerberos


【解决方案1】:

是的,您可以更新您的程序以使用此密钥表,而不是依赖已存在于缓存中的 TGT。这是通过使用 Hadoop 安全包中的 UserGroupInformation 类来完成的。

val configuration = new Configuration
configuration.addResource("/etc/hadoop/conf/hdfs-site.xml")
UserGroupInformation.setConfiguration(configuration)

UserGroupInformation.getCurrentUser.setAuthenticationMethod(AuthenticationMethod.KERBEROS)
UserGroupInformation.loginUserFromKeytabAndReturnUGI(
  "hadoop.kerberos.principal", " path of hadoop.kerberos.keytab file")
  .doAs(new PrivilegedExceptionAction[Unit]() {
    @Override
    def run(): Unit = {

      // logic

    }
  })

在上面我们指定了我们的服务主体的名称和我们生成的 keytab 文件的路径。只要该 keytab 有效,我们的程序就会对所有操作使用所需的服务主体,而不管运行程序的用户是否已经通过身份验证并收到了 TGT。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-11-17
    • 1970-01-01
    • 2018-07-28
    • 2011-11-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多