首页 文章

Hadoop Kerberos安全性

提问于
浏览
-1

我已经设置了单节点集群,kdc服务器以及客户端都在同一台机器上 . 我尝试了所有可能的选项,但仍然存在相同的错误 . 从研究中我已经根据答案提出了以下变化 . 1)在$ JAVA_HOME / jre / lib / security文件夹中安装JCE jar . 2)我编辑了krb5.conf文件,只使用aes256-cts加密 .

/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用户,即'hdfs',带有addprinc命令 . 然后我使用了kinit命令(kinit hadoop),这是成功的 . klist -e命令结果显示enc类型是aes-256,如预期的那样 . 但是,当我尝试一个hadoop fs -ls /命令时,我得到以下错误 .

Java配置名称:null
本机配置名称:/etc/krb5.conf
从本机配置加载
KinitOptions缓存名称为/ tmp / krb5cc_1001 15/06/26 13: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;

需要帮助 .

2 回答

  • 1

    错误的原因已在消息中:您的配置列表default_ccache_name = KEYRING:persistent:%,它将凭据存储在Linux上的安全内核缓冲区中 . Java无法读取此缓冲区,因此您将收到错误 .

    您需要将其设置为:

    default_ccache_name = / tmp / krb5cc _%

    或用KRB5CCNAME覆盖它

  • 0

    似乎hadoop从java的默认缓存位置引用票证,但您可能使用它在其他位置创建票证 . kinit命令 .

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

相关问题