龙空技术网

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

用十倍苦心做突出一个 190

前言:

眼前小伙伴们对“centos认证出错”大体比较关注,同学们都想要学习一些“centos认证出错”的相关知识。那么小编也在网摘上收集了一些有关“centos认证出错””的相关资讯,希望我们能喜欢,朋友们一起来学习一下吧!

启停

#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_datatrans2)kprop -f /var/kerberos/krb5kdc/slave_datatrans masterbak报错如下:Key table entry not found while getting initial ticket3)检查主备的krb5.keytab是否包含两个principal,KDC库中正常应存在host/master@DC1.XX.COM以及host/masterbak@DC1.XX.COM
查看keytab信息(存储的princial信息)
#查看keytab中的principalklist -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

解决方案:

<property>        	<name>dfs.namenode.kerberos.principal.pattern</name>      		<value>*</value>   </property>   <property>        	<name>dfs.datanode.kerberos.principal.pattern</name>      		<value>*</value>   </property>   <property>        	<name>hadoop.http.authentication.kerberos.principal.pattern</name>      		<value>*</value>   </property>  <property>        	<name>yarn.resourcemanager.principal.pattern </name>      		<value>*</value>   </property>   <property>        	<name>yarn.nodemanager.principal.pattern</name>      		<value>*</value>   </property>   <property>        	<name>yarn.web-proxy.principal.pattern</name>      		<value>*</value>   </property>   <property>        	<name>mapreduce.jobhistory.principal.pattern</name>      		<value>*</value>   </property>
KDC日志中报:<unknown client>

问题表现:

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

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

标签: #centos认证出错