我正在尝试使用kerberos保护我的Hadoop集群。我能够使用 kinit 命令生成 TGT。但除此之外,我被困住了。
1(我想知道现实中的"服务票"是什么意思。(不作为描述(;我们可以使用哪个命令/代码来使用服务票证?
2( ".keyTab"文件和".keyStore"文件有什么用?
Hadoop-Kerberos的故事
-
用户使用 kinit 命令向 KDC 发送身份验证请求。
-
KDC 发回加密票证。
-
用户通过提供其密码来解密票证。
4. 现在已通过身份验证,用户发送服务票证请求。
5. KDC 验证工单并发回服务工单。
-
用户向 hdfs@KERBEROS.com 出示服务票证。
-
hdfs@KERBEROS.com 解密票证,验证用户的身份
在第4步,"请求服务票";它实际上是什么意思?为了获得 TGT,我们使用 'kinit' 命令。同样,获取服务票证的程序/方法是什么?
我的流程详情:
- LDAP : 活动目录
- Kerberos : 安装在 Ubuntu 中
- Hadoop集群:在Ubuntu机器中配置一个主站和一个从站 。
- Ubuntu用户名:实验室用户
Ubuntu 中的境界 : KERBEROS.COM
该计划是为Kerberos和Active Directory提供Hadoop安全性。
- 在 Kerberos Server 机器中为 ActiveDirectory 中的用户生成 TGT(使用 kinit 命令(
接下来将 Kerberos 与 Ubuntu Hadoop集群集成,做了以下工作,
1( 创建主体的命令:addprinc -randkey namenode/labuser@KERBEROS.COM
2( 创建密钥表的命令:xst -norandkey -k namenode.service.keytab namenode/labuser@KERBEROS.COM (or(ktadd -k namenode.service.keytab namenode/labuser@KERBEROS.COM
3(在Hadoop配置文件中添加了属性,并附有,到Kerberos。
-
盯着Hadoop集群,我们知道登录对所有服务(Namenode,Datanode,资源管理器和节点管理器(都成功。
- 日志信息:INFO org.apache.hadoop.security.UserGroupInformation: 使用keytab文件登录用户dn/labuser@KERBEROS.COM 成功 */home/labuser/hadoopC/etc/hadoop/dn.service.keytab
-
然而,Hadoop集群没有启动,失败在,
-
DataNode(java.lang.RuntimeException:没有特权资源就无法启动安全集群(
-
NameNode(java.io.FileNotFoundException:/home/labuser/.keystore (No such文件或目录((
-
请建议上述 Kerberos 流程是否需要任何更改?如果是,请说明理由
如果服务的协议启用了 kerberos,则 kerberos API 将自动获取服务票证。
服务器需要与密钥表文件中 hdfs@KERBEROS.com 对应的密钥,它可以读取该文件来解密任何传入连接。通常,您可以使用 kadmin 命令创建它,然后使用相应的实用程序在密钥表文件中安装密钥(对于不同版本的 Kerberos 源代码,密钥是不同的。
通常,一旦您拥有kinit'd作为客户端,您将永远不需要运行另一个显式kerberos。命令以获取服务票证,前提是所有服务器和客户端配置正确。这就是 kerberos 的全部意义所在。
如果确实想获取服务票证进行测试,可以使用 kvno 命令。
http://web.mit.edu/kerberos/krb5-1.13/doc/user/user_commands/kvno.html
我找到了以下解决方案:
NameNode(java.io.FileNotFoundException:/SOME/PATH/.keystore (No such文件或目录((
尝试在 hdfs-site.xml 中配置HTTP_ONLY选项:
<property>
<name>dfs.http.policy</name>
<value>HTTP_ONLY</value>
</property>
如果需要 https,则需要另外生成证书并配置密钥库。