【发布时间】:2019-11-04 21:04:39
【问题描述】:
我已经设置了一个 python docker 映像,并包含了一个 krb5.conf 文件、keytab 文件和 python 库。我正在运行一个对 kerborized hadoop 集群进行身份验证的 python 脚本。我遇到了错误:Stderr: kinit: Client 'root@MY.DOMAIN.LOCAL' not found in Kerberos database while getting initial credentials. 当我设置svc_account 时,我不知道为什么它在客户端root 上失败了。我是否需要在这个 krb5.conf 文件中添加一些东西或类似的东西?
以下是我的python代码:
import ssl
from impala.dbapi import connect
import os
os.system("kinit")
conn = connect(host='impala/server2primary.my.domain.local@MY.DOMAIN.LOCAL', port=21050, use_ssl=True, user='svc_account@MY.DOMAIN.LOCAL', auth_mechanism = 'GSSAPI')
cur = conn.cursor()
cur.execute('SHOW DATABASES;')
result=cur.fetchall()
for data in result:
print (data)
我已经设置了krb5.keytab 文件:
addent -password -p svc_account@MY.DOMAIN.LOCAL -k 1 -e rc4-hmac
addent -password -p svc_account@MY.DOMAIN.LOCAL -k 1 -e aes256-cts
addent -password -p svc_account@MY.DOMAIN.LOCAL -k 1 -e aes128-cts
wkt /etc/krb5.keytab
以下是我的krb5.conf文件:
[libdefaults]
default_realm = MY.DOMAIN.LOCAL
dns_lookup_kdc = false
dns_lookup_realm = false
ticket_lifetime = 86400
renew_lifetime = 604800
forwardable = true
default_tgs_enctypes = aes256-cts aes128-cts rc4-hmac
default_tkt_enctypes = aes256-cts aes128-cts rc4-hmac
permitted_enctypes = aes256-cts aes128-cts rc4-hmac
udp_preference_limit = 1
kdc_timeout = 3000
[realms]
MY.DOMAIN.LOCAL = {
kdc = server1primary.my.domain.local
admin_server = server1primary.my.domain.local
default_domain = MY.DOMAIN.LOCAL
}
[domain_realm]
MY.DOMAIN.LOCAL = MY.DOMAIN.LOCAL
【问题讨论】:
-
您是否阅读了 kinit 的
man页面?!?!? -
是的,所以你认为我应该试试 os.system(“kinit -t krb5.keytab”) 我关闭了吗? @Samson Scharfrichter
-
kinit -kt /blah/blah/my-app.keytab my-app-account@MY.DOMAIN.LOCAL -
[typoedited] 并且不要将您的应用程序特定的凭据转储到
/etc/krb5.keytab,它被 SSSD 等安全服务用来“绑定”到外部身份验证/授权系统...并且应该只有 root 可以访问 -
我不熟悉 python 语法,但一般来说,当给定的用户主体(服务帐户 ID)和/或密码不正确时会出现此问题。潜在错误是“标识符与预期值不匹配 (906)” - 表示 KDC 无法在 AD 中找到给定的主体。按照 Samson 的建议,使用 keytab 尝试 kinit。如果 keytab 中的任何信息都是正确的,那么您应该会收到票。否则尝试生成新的 keytab。
标签: python docker kerberos impala