优秀的编程知识分享平台

网站首页 > 技术文章 正文

Hadoop安全认证-Kerberos相关问题故障排除

nanyue 2025-03-23 21:55:01 技术文章 8 ℃
  • 启停
#kadmin进程状态、启动、停止
systemctl kadmin status/stop/start
#krb5kdc进程状态、启动、停止
systemctl krb5kdc status/stop/start
  • KDC日志
/var/log/krb5kdc.log

注:可以通过查看日志,发现认证信息相关错误。例如当前的认证pincipal在服务器中是否存在,认证为啥失败等信息。

  • KDC周期备份脚本
/var/kerberos/krbtools/sync_kdc.sh
  • 手动执行KDC备份命令
1)kdb5_util dump /var/kerberos/krb5kdc/slave_datatrans
2)kprop -f /var/kerberos/krb5kdc/slave_datatrans masterbak
报错如下:
Key table entry not found while getting initial ticket
3)检查主备的krb5.keytab是否包含两个principal,KDC库中正常应存在host/master@DC1.XX.COM以及host/masterbak@DC1.XX.COM
  • 查看keytab信息(存储的princial信息)
#查看keytab中的principal
klist -kt /etc/hadoop/hdfs/hdfs.keytab
  • 查看principal信息
#进入KDC的服务器,执行如下命令
kadmin.local
#查看principal信息
getprinc hdfs/hm001@DC1.XX.COM
  • 认证票据更新
#Hadoop代码更新票据
UserGroupInformation.getLoginUser().checkTGTAndReloginFromKeytab();
#shell更新
kinit -kt /etc/hadoop/hdfs/hdfs.keytab hdfs/hm001@DC1.XX.COM

注:可以根据klist先查看当前keytab中存储的principal信息,然后进行认证。

  • Windows环境下使用keytab文件进行认证登录,报错 kinit: Bad encryption type while getting initial credentials

原因分析:当前使用的Kerberos服务为Centos 7u4操作系统上默认的kerberos版本1.15.1-8.el7,该版本kerberos服务默认支持的加密类型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,比6ux系统新增了camellia256-cts:normal camellia128-cts:normal两种加密类型,当前我们Windows版本使用的MIT Kerberos客户端自带kinit工具不支持这两种加密方式,导致kinit执行报错。

解决方法:客户端创建用于windows环境认证登录的keytab文件时,添加-e选项指定加密方式

ktadd -e "aes256-cts:normal aes128-cts:normal des3-hmac-sha1:normal arcfour-hmac:normal des-hmac-sha1:normal des-cbc-md5:normal des-cbc-crc:normal" -kt /tmp/hello.keytab hello@DC1.XX.COM

  • kvno不一致问题

问题现象:出问题的节点的keytab中存储的principal的kvno和KDC服务端不一致。

查看问题节点的kvno:klist -kt
/etc/hadoop/HTTP/HTTP.keytab

查看主节点的kvno:getprinc HTTP/hb17111@DC1.XX.COM

两者的kvno不一致。

使问题节点的keytab和KDC服务端保持一致(重新生成新的keytab,发放问题节点):kadd -k
/etc/hadoop/HTTP/HTTP.keytab HTTP/hb17111@DC1.XX.COM

  • kdb5_util:Improper format of Kerberos configuration file while initializing

解决方案:仔细排查
/var/kerberos/krb5kdc/kdc.conf文件是否有问题(格式)。

  • Windows下kinit不起作用,或出现too many parametes

where kinit检查下是否用的是java的kinit、检查kinit 命令(注意-k -t隔开)。

  • Kerberos打开DEBUG日志

Kerberos打开debug日志:配置文件
/opt/software/hadoop/hdfs/libexec/hadoop-config.sh中加入如下内容:HADOOP_OPTS="$HADOOP_OPTS -Dsun.security.krb5.debug=true"

  • kinit: Client not found in Kerberos database while getting initial credentials

解决方案:

1) 命令输错:kinit –kt nbhd.keytab nbhd@DC1.XX.COM

2) KDC服务器,kadmin.local进去之后数据库查看下有没有对应princal

  • Klist:Included profile directory

问题表现:

解决方案:屏蔽该行。

  • principal走通配符(Hadoop配置文件通配符)

问题表现:IllegalArgumentException:Server has invalid Kerberos principal

解决方案:


        	dfs.namenode.kerberos.principal.pattern
      		*
   
   
        	dfs.datanode.kerberos.principal.pattern
      		*
   
   
        	hadoop.http.authentication.kerberos.principal.pattern
      		*
   
  
        	yarn.resourcemanager.principal.pattern 
      		*
   
   
        	yarn.nodemanager.principal.pattern
      		*
   
   
        	yarn.web-proxy.principal.pattern
      		*
   
   
        	mapreduce.jobhistory.principal.pattern
      		*
   
  • KDC日志中报:

问题表现:

解决方案:检查Kerberos所在服务器 /etc/hosts配置信息

小结:Kerberos问题相比之下,比较难解决,需要打破常规,跳出思维定式。

最近发表
标签列表