不同服务之间的 Kerberos 委托
Posted
技术标签:
【中文标题】不同服务之间的 Kerberos 委托【英文标题】:Kerberos delegation between different services 【发布时间】:2015-11-29 02:49:11 【问题描述】:我们对 httpd 网络服务器进行了如下设置,如下所示:
以下场景: 服务器 A 从浏览器获取请求并执行一些操作并创建一个新请求并将其发送到 服务器 B。 用户 X 在 服务器 B 上进行了身份验证,但 用户 Y 没有(而且不应该这样做)。由于 A 正在创建一个新请求,B 认为 Y 已经发送了请求,因此拒绝了它。删除服务器 A 不是一种选择。我该如何解决这个问题。你能帮忙吗?
【问题讨论】:
【参考方案1】:这可以通过委托来解决:服务器 A 应该在向服务器 B 发出请求时将自己验证为用户 X。
代表团:
服务器 A 收到来自浏览器的请求,包含 TGS 票证。 服务器 A 具有正确的用户名/密码组合(存储在用户代表服务的 Kerberos 数据库中),因此它可以打开票证并验证此用户 服务器 A 向 KDC 请求委托票证,并附上从用户处收到的票证。 KDC(例如 AD)检查是否可以委派(在 Active Directory 中,代表服务器 A 的用户必须被授予委派权限。在 ADC 上使用命令 ktpass 生成 keytab 文件后,此选项卡变为可见。 AD 还会检查用户帐户是否允许委托其票证 - 默认情况下启用,可以为某些特殊、敏感的用户禁用) KDC 给服务器 A 一个委托的 Kerberos 票证。服务器 A 使用它来登录服务器 B。 服务器 B 收到来自服务器 A 的带有委托票证的请求,表明是用户 X 登录。Kerberos 委托有时被称为“双跳”:http://blogs.technet.com/b/askds/archive/2008/06/13/understanding-kerberos-double-hop.aspx
Active Directory 管理员可能不喜欢让服务 A 有权委托票证(即以用户 X 身份登录域中的任何其他服务)的想法。这就是为什么几年前引入了“约束委派”的原因。它使 AD 管理员可以让服务 A 仅以用户 X 的身份登录到服务器 B。他们可以在代表服务 A 的 activeDirectory 帐户上进行设置。
http://windowsitpro.com/security/how-windows-server-2012-eases-pain-kerberos-constrained-delegation-part-1
【讨论】:
以上是关于不同服务之间的 Kerberos 委托的主要内容,如果未能解决你的问题,请参考以下文章
Java 连接 HBase ( kerberized 集群 )
AWS EMR kerberizing 集群 hadoop.security.AccessControlException