为不带根的python kerberos指定另一个域域

为不带根的python kerberos指定另一个域域,python,kerberos,Python,Kerberos,据我所知,告诉Kerberos主机名或主机名集应使用哪个域进行身份验证的正常方法是通过[domain\u realm]部分中的krb5.conf文件。假设我没有修改该文件的root访问权限,并且我想在服务器上使用requests\u kerberos库在与主机上当前配置的域不同的域上进行身份验证,如何指定自己的krb5.conf文件 这是一台针对Active Directory环境进行身份验证的Linux计算机。我在shell中设置了KRB5\u CONFIG环境变量,并成功运行了kinit。k

据我所知,告诉Kerberos主机名或主机名集应使用哪个域进行身份验证的正常方法是通过
[domain\u realm]
部分中的
krb5.conf
文件。假设我没有修改该文件的root访问权限,并且我想在服务器上使用
requests\u kerberos
库在与主机上当前配置的域不同的域上进行身份验证,如何指定自己的
krb5.conf
文件

这是一台针对Active Directory环境进行身份验证的Linux计算机。我在shell中设置了
KRB5\u CONFIG
环境变量,并成功运行了
kinit
klist
命令显示正确服务上经过身份验证的票据。然后,我尝试在python脚本中设置环境变量
KRB5\u 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]>
DEBUG:requests\u kerberos.kerberos\u:handle\u 401():handle:401
错误:请求\u kerberos。kerberos:生成\u请求\u头():authGSSClientStep()失败:
错误:请求\u kerberos.kerberos:('Unspecified GSS failure.次要代码可能提供更多信息',851968),('Ticket expired',-1765328352))
回溯(最近一次呼叫最后一次):
文件“/users/apps/dsm/username/.virtualenvs/toolkit/lib/python2.7/site packages/requests\u kerberos/kerberos.py”,第112行,在生成请求头中
_协商_值(响应))
GSSError:(“未指定的GSS故障。次要代码可能提供更多信息”,851968),(“票证过期”,1765328352))
DEBUG:requests\u kerberos.kerberos\u:handle\u 401():返回
DEBUG:requests\u kerberos.kerberos\u:handle\u response():返回

有没有办法让我获得更多关于
HTTPKerberosAuth()
调用背后发生的事情的信息?一些超级调试模式?我想验证python kerberos是否确实正确地读取了我的
krb5.conf
文件,并与正确的
kdc
通信

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

我用kinit来验证我的证书没有过期

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

这让我想到python脚本正在别处寻找凭证缓存?有办法找到答案吗


KRB5_轨迹将显示这一点。您也可以始终使用
strace-f-efile
运行程序,查看它访问哪些文件,作为一种通用调试工具。

感谢您的响应。我不完全确定我们使用的是什么版本的Kerberos(这是一个非常旧的RHEL 5.9),但我会尝试一下KRB5_跟踪。我使用kinit来验证我的证书是否未过期,这让我认为python脚本正在别处寻找凭证缓存?有办法找到答案吗?谢谢你的持续帮助,是的,我当然是指klist。klist命令正在显示有效票证。我的Kerberos版本似乎太旧了,而且KRB5_TRACE环境变量不起作用,它将尝试删除它。