为没有root的python kerberos指定另一个域域

时间:2014-02-25 21:42:45

标签: python kerberos

据我所知,通过krb5.conf部分中的[domain_realm]文件告诉Kerberos主机名或主机名集应通过哪个域进行身份验证的正常方法。假设我没有root权限来修改该文件,我想在服务器上使用requests_kerberos库在不同于我主机上当前配置的域上进行身份验证,如何指定我自己的{ {1}}档案?

这是一台针对Active Directory环境进行身份验证的Linux计算机。我在我的shell中设置了krb5.conf环境变量并成功运行了KRB5_CONFIGkinit命令显示正确服务上的经过身份验证的票证。然后我尝试在python脚本中设置环境变量klist

KRB5_CONFIG

但这不起作用:

import os
import logging

os.environ['KRB5_CONFIG'] = '/path/to/my/krb5.conf'

logging.basicConfig()
logging.getLogger('requests_kerberos').setLevel(logging.DEBUG)
r = requests.get("https://myhost.mydomain.net:9090/api/call",   auth=HTTPKerberosAuth(), verify=False)

有没有办法让我获得有关DEBUG:requests_kerberos.kerberos_:handle_401(): Handling: 401 ERROR:requests_kerberos.kerberos_:generate_request_header(): authGSSClientStep() failed: ERROR:requests_kerberos.kerberos_:(('Unspecified GSS failure. Minor code may provide more information', 851968), ('Ticket expired', -1765328352)) Traceback (most recent call last): File "/users/apps/dsm/username/.virtualenvs/toolkit/lib/python2.7/site-packages/requests_kerberos/kerberos_.py", line 112, in generate_request_header _negotiate_value(response)) GSSError: (('Unspecified GSS failure. Minor code may provide more information', 851968), ('Ticket expired', -1765328352)) DEBUG:requests_kerberos.kerberos_:handle_401(): returning <Response [401]> DEBUG:requests_kerberos.kerberos_:handle_response(): returning <Response [401]> 电话背后发生的事情的更多信息?一些超级调试模式?我想验证python kerberos实际上正在正确阅读我的HTTPKerberosAuth()文件并与正确的krb5.conf进行通信。

1 个答案:

答案 0 :(得分:2)

如果你使用的是最新版本的MIT Kerberos,你可以设置KRB5_TRACE = / dev / stderr,它会打印大量的调试信息,显示你正在寻找的内容。但是,您已经有一条明确的错误消息:“票证已过期”。查看klist报告的故障单结束时间,并检查客户端,服务器和KDC上的时间(在本例中为域控制器)。 Kerberos需要松散同步的时钟,通常在5分钟内完成。

  

我已经使用kinit验证我的证书未过期,

你的意思是klist,而不是kinit? kinit获得了新的TGT; klist显示了ccache的内容。顺便说一句,这些Kerberos数据结构称为“票证”,而不是“证书”; “证书”通常与非对称密钥一起使用(例如X.509证书)。

  

这让我以为python脚本正在寻找凭证缓存的其他地方?有没有办法找到它?

KRB5_TRACE将证明这一点。您也可以使用strace -f -efile运行程序,以查看它访问的文件,作为常规调试工具。