我正在尝试使用kerberos保护我的hadoop群集。我可以使用kinit命令生成TGT。但除此之外,我被困了。
1)我想知道'serviceTicket'在现实中的含义。 (不作描述);使用哪个命令/代码我们可以使用服务票证?
2)'。keyTab'文件和'.keyStore'文件的用途是什么?
Hadoop-Kerberos故事
用户使用 kinit 命令向KDC发送身份验证请求。
KDC发回加密的票证。
用户通过提供密码来解密故障单。
4。现在通过身份验证,用户发送服务票证请求。
5。 KDC验证票证并发回服务票证。
用户将服务票证提供给hdfs@KERBEROS.com。
hdfs@KERBEROS.com解密门票,验证用户身份
第四步,“申请服务票”;它到底意味着什么?要获得TGT,我们使用'kinit'命令。同样,获取服务票证的程序/方法是什么?
我的流程详情:
Ubuntu的领域:KERBEROS.COM
计划是使用Kerberos和Active Directory提供hadoop安全性
接下来将Kerberos与Ubuntu hadoop集群集成,执行以下操作,
1)创建校长的命令:addprinc -randkey namenode/labuser@KERBEROS.COM
2)创建密钥表的命令: xst -norandkey -k namenode.service.keytab namenode/labuser@KERBEROS.COM (或) ktadd -k namenode.service.keytab namenode/labuser@KERBEROS.COM
3)在hadoop配置文件中添加resp。属性到Kerberos。
凝视hadoop群集,我们知道所有服务(Namenode,Datanode,资源管理器和节点管理器)的登录成功。
然而 Hadoop群集未启动,失败,
DataNode(java.lang.RuntimeException:无法在没有特权资源的情况下启动安全集群)
NameNode(java.io.FileNotFoundException:/home/labuser/.keystore(没有这样的文件或目录))
请建议上述Kerberos流程是否需要更改?如果是,请证明
答案 0 :(得分:2)
如果服务协议启用了kerberos,则kerberos API将自动获取服务票证。
服务器需要密钥表文件中与hdfs@KERBEROS.com对应的密钥,它可以读取以解密任何传入连接。通常,您使用kadmin命令创建它 使用适当的实用程序在密钥表文件中安装密钥(对于不同版本的kerberos源代码,它是不同的。)
一般来说,一旦你作为客户端使用kinit,你将永远不需要再运行另一个kerberos 命令获取服务票证,正确配置所有服务器和客户端。这就是kerberos的重点。
如果您确实想要获取测试服务票证,可以使用kvno命令。
http://web.mit.edu/kerberos/krb5-1.13/doc/user/user_commands/kvno.html
答案 1 :(得分:1)
我找到了一个解决方案:
NameNode(java.io.FileNotFoundException:/SOME/PATH/.keystore(No such file or directory))
尝试在hdfs-site.xml中配置HTTP_ONLY选项:
<property>
<name>dfs.http.policy</name>
<value>HTTP_ONLY</value>
</property>
如果您需要https,则需要另外生成证书并配置密钥库。