2015-06-19 74 views
-1

我已经设置了单节点集群,并且kdc服务器以及客户端在同一台计算机上。我尝试了所有可能的选项,但仍然存在相同的错误。 从我所做的调查中得出的结论如下。 1)在$ JAVA_HOME/jre/lib/security文件夹中安装了JCE jar。 2)我编辑了krb5.conf文件以仅使用aes256-cts加密。Hadoop Kerberos安全

的/etc/krb5.conf看起来像下面,

[logging] 
default = FILE:/var/log/krb5libs.log 
kdc = FILE:/var/log/krb5kdc.log 
admin_server = FILE:/var/log/kadmind.log 

[libdefaults] 
dns_lookup_realm = false 
ticket_lifetime = 24h 
renew_lifetime = 7d 
forwardable = true 
rdns = false 
default_realm = EXAMPLE.COM 
default_ccache_name = KEYRING:persistent:%{uid} 
default_tkt_enctypes = aes256-cts 
default_tgs_enctypes = aes256-cts 
permitted_enctypes = aes256-cts 
[realms] 
EXAMPLE.COM = { 
    kdc = localhost 
    admin_server = localhost 
} 

[domain_realm] 
localhost = EXAMPLE.COM 

/var/kerberos/krb5kdc/kdc.conf看起来像下面

[kdcdefaults] 
kdc_ports = 88 
kdc_tcp_ports = 88 

[realms] 
EXAMPLE.COM = { 
    #master_key_type = aes256-cts 
    acl_file = /var/kerberos/krb5kdc/kadm5.acl 
    dict_file = /usr/share/dict/words 
    admin_keytab = /var/kerberos/krb5kdc/kadm5.keytab 
    supported_enctypes = aes256-cts:normal aes128-cts:normal des3-hmac-sha1:normal arcfour-hmac:normal camellia256-cts:normal camellia128-cts:normal des-hmac-sha1:normal des-cbc-md5:normal des-cbc-crc:normal 
     max_life = 24h 0m 0s 
     max_renewable_life = 7d 0h 0m 0s 
} 

的NameNode和DataNode会启动与在keytab文件中提供的凭证。在namenode和datanode启动后,我创建了一个已经是hadoop组中的unix用户的主体,即使用addprinc命令的'hdfs'。然后我用kinit命令(kinit hadoop),这是成功的。 klist -e命令结果显示,按预期方式,enc类型为aes-256。但是,当我尝试一个hadoop fs -ls /命令我得到下面的错误。

Java的配置名称:空
本地配置名称:/etc/krb5.conf中
从本地配置
KinitOptions加载的高速缓存名称为/ tmp/krb5cc_1001 15/06/26十三点20分18秒WARN IPC .Client:连接到服务器时遇到异常:javax.security.sasl.SaslException:GSS启动失败[由GSSException引起:未提供有效凭据(机制级别:未能找到任何Kerberos tgt)]
ls:本地失败异常:java.io.IOException:javax.security.sasl.SaslException:GSS启动失败[由GSSException引起:没有提供有效的凭据(机制级别:未能找到任何Kerberos tgt)];主机详细信息:本地主机是:“/”;目的地主机是:“”:9000;

请帮忙。

+0

它似乎的Hadoop是指车票从java的默认缓存位置开始,但您可能使用kinit在其他位置创建了票证。 – Kumar

+0

非常感谢。更改票证缓存位置工作。 :) –

+0

我会更新这个答案。很高兴你解决了你的问题。 – Kumar

回答

0

看起来hadoop从java的默认缓存位置引用票证,但您可能会在其他位置使用它创建票证。 kinit命令。

不指定任何缓存位置,然后使用kinit命令获取票据,然后尝试。

+0

Kumar接下来我有一个问题。现在我已经安装了kerberos并能够启动namenode,当我启动datanode时,它说:“无需配置特权资源或SASL RPC数据传输保护和SSL用于HTTP就无法启动安全DataNode”。我做了一些研究,得到了我有两个选择安装JSVC或设置SASL。我对这两个选项都有问题。 JSVC无法在SASL中正确安装,它只是更改xml文件,或者它也涉及创建密钥库,trustore,如网络enc的cloudera教程中所建议的。 –

+0

我读了你曾经发布的关于Datanode启动的问题。你是如何将SASL用于安全的datanode的?您是否必须创建密钥库和信任库? –

+0

是的。我们必须为此创建密钥库和信任库。 – Kumar

0

错误的原因已在消息中:您的配置列表default_ccache_name = KEYRING:persistent:%{uid}将证书存储在linux上的安全内核缓冲区中。 Java不能读取这个缓冲区,因此你会得到一个错误。

您需要将其设置为类似:

default_ccache_name =的/ tmp/krb5cc _%{UID}

或KRB5CCNAME覆盖它