如何通过将krb5.conf传递给kinit命令从Python初始化kerberos客户端?

时间:2019-12-27 11:08:49

标签: python hdfs kerberos

我能够从我的python脚本中kinit进行以下操作:

import subprocess    
subprocess.Popen(["cp", config_file_path, "/etc/"]).wait(timeout=10)
subprocess.Popen(["kinit", "-kt", keytab_file_path, principal]).wait(timeout=10)
is_kinit_done = (subprocess.Popen(["klist"]).wait(timeout=10) == 0)
print("is_kinit_done: ", is_kinit_done)

并从HDFS中读取文件:

kerberos_client = KerberosClient(url=url, session=session, mutual_auth='OPTIONAL', principal=principal)
with ds_client.read('/tmp/export.csv', encoding='utf-8') as reader:
    df = pd.read_csv(reader, index_col=0)
print(df.head(10))

但是这种方法存在以下问题:

  • 我无权将krb5.conf文件复制到/etc/目录。
  • 我无法设置KRB5_CONFIG环境变量来覆盖默认的Kerberos配置文件路径。
  • 我有多个用户KEYTABKRB5.CONF文件要管理。

有没有一种方法可以传递krb5.conf文件,例如init命令中的keytab文件

kinit -kt /path/to/darshan.keytab -conf /path/to/krb5.conf user@PRINCIPAL.NET

在JAVA中,我们可以像下面这样设置配置: https://community.cloudera.com/t5/Community-Articles/A-Secure-HDFS-Client-Example/ta-p/247424

com.sun.security.jgss.krb5.initiate {
    com.sun.security.auth.module.Krb5LoginModule required
    doNotPrompt=true
    principal="hdfs-user@MYCORP.NET"
    useKeyTab=true
    keyTab="/home/hdfs-user/hdfs-user.keytab"
    storeKey=true;
};

但是我没有在Python中找到任何类似的东西。我应该如何在Python中实现?

0 个答案:

没有答案