0552-5.15.0-同一OS用户下不同Kerberos用户执行脚本Principal串掉问题分析

1 文档编写目的

在集群启用Kerberos后,使用同一个OS用户在客户端并发调度Python代码获取Hive数据(代码中使用不同的kerberos用户kinit),会出现两个作业的认证混乱获取到的票据串掉。本文Fayson主要分析Kerberos环境同一OS用户下并发执行不同身份认证的Python代码会导致Principal串掉问题解决。

  • 测试环境

1.CDH5.15.0

2.Redhat7.3

3.集群已启用Kerberos

2 问题描述

Fayson通过一段简单的示例代码说明问题,在代码中执行kinit命令初始化Kerberos信息,通过impyla包访问Hive,具体代码如下:

from impala.dbapi import connect
import os
os.system('kinit -k -t /data/disk1/pythonkb/hbase.keytab hbase/cdh04.fayson.net')
os.system('klist')

conn = connect(host='cdh02.fayson.net',port=10000,database='default',auth_mechanism='GSSAPI',kerberos_service_name='hive')
print(conn)

cursor = conn.cursor()
cursor.execute('show databases')
print (cursor.description)  # prints the result set's schema
results = cursor.fetchall()
print(results)

在同一个用户的OS下创建test_hbase.py和test_yarn.py的两个Python脚本,分别使用hbase和yarn用户初始化Kerberos信息。

在crontab中添加两个定时任务,使两个任务同时并发

在生成的testhbase.log和testyarn.log中可以看到两个脚本会获取到对方的Principal信息

3 问题分析

1.首先在客户端进行Kinit操作后,默认的Ticket Cache是存储在tmp/krb5cc_0临时文件中(Ticket cache文件是根据当前用户的uid在/tmp目录下生成一个以krb5cc_开头的临时文件)。

2.由于上述的两个脚本是在同一个OS用户下,所以两个不同的Kerberos用户在进行Kinit操作后都会覆盖/tmp/krb5cc_{uid}文件

根据上述两点基本可以定位问题的原因,因为Ticket cache文件被覆盖导致Kerberos的票据信息串掉。

4 问题解决

由于两个Python脚本使用了同一份Ticket cache文件导致Kerberos的票据信息串掉,那通过在代码中指定Ticket cache文件,而不使用默认的文件。Fayson对上述代码做了如下改动,在代码中增加了OS环境变量KRB5CCNAME的设置,具体代码如下:

from impala.dbapi import connect
import os
os.environ['KRB5CCNAME']='/tmp/krb5_ccname_hbase'
os.system('kinit -k -t /data/disk1/pythonkb/hbase.keytab hbase/cdh04.fayson.net')
os.system('klist')

conn = connect(host='cdh02.fayson.net',port=10000,database='default',auth_mechanism='GSSAPI',kerberos_service_name='hive')
print(conn)

cursor = conn.cursor()
cursor.execute('show databases')
print (cursor.description)  # prints the result set's schema
results = cursor.fetchall()
print(results)

通过修改上述两个脚本,在两个脚本中都指定KRB5CCNAME环境变量为不同的文件,再次进行测试未发现两个应用的票据信息串掉的问题。

5 总结

1.默认Ticket cache文件的生成是根据用户的uid在/tmp目录下生成一个以krb5cc_开头的缓存文件。

2.如果在同一个OS用户下使用不同的Kerberos用户进行kinit会覆盖/tmp/krb5cc_{uid}文件,从而导致应用中的票据信息串掉。

3.可以通过在应用中为不同的Kerberos用户指定一个独立的Ticket cache文件,以防止票据信息串掉。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值