UserGroupInformation类有一个loginUserFromKeytab方法,该方法采用用户主体和keytab文件的名称。您没有指定服务主体。我认为Kerberos需要服务主体。有人能填补我遗漏的空白吗?
AFAIK"登录"方法仅负责客户端上的初始用户身份验证
- 连接到KDC
- 断言它是"主体",接受质询,使用加密密码进行响应(这是keytab文件中的内容)
- 检索显示为
krbtgt/REALM@REALM
的票证授予票证(TGT)
然后每个Hadoop API都管理自己的授权,但在服务器端
客户:
- 在连接时出示TGT,作为身份验证的证明
服务:
- 检查该主体是否未列入黑名单
- 连接到KDC以检查TGT是否确实有效,然后生成适当的服务票证(以便进一步的客户端服务流量可以跳过到KDC的往返)
- 根据可插入授权库检查主体属于哪些"组"(例如,请参阅"权限>组映射"下的HDFS文档)
- 所有权限检查都基于主体名称和组名称
在Kerberised集群中有两种类型的帐户-简单用户和用户服务。从技术角度来看,它们是相同的,由三部分组成——初级/instance@REALM.但是,简单用户通过提供主要名称和密码进行身份验证。它可以配置为使用集群KDC,也可以访问受信任关系中的Active Directory KDC。对于用户服务,使用kaytabs方法。这意味着管理员创建keytab文件,其中包含对其有效的原则列表
klist -kt path_to_keytab
使用loginUserFromKeytab,您说要使用keytab文件将Kerberos票证发送给您的当前用户。作为参数,您应该提供keytab的路径和keytab中服务原则的名称。如果成功,您的当前用户或执行上下文所有者将获得具有访问服务的所有必要权限的票证