据我所知,告诉 Kerberos 主机名或主机名集应通过哪个领域进行身份验证的正常方法是通过 krb5.conf
文件在 [domain_realm]
部分。假设我没有 root 访问权限来修改该文件,并且我想使用 requests_kerberos
在服务器上进行身份验证库与我的主机上当前配置的域不同,我如何指定我自己的 krb5.conf
文件?
这是一台针对 Active Directory 环境进行身份验证的 Linux 计算机。我设置了KRB5_CONFIG
我的 shell 中的环境变量并运行了 kinit
成功地。一个klist
命令显示正确服务上经过身份验证的票证。然后我尝试设置环境变量 KRB5_CONFIG
在Python脚本中:
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]>
有没有办法让我获得更多关于背后发生的事情的信息HTTPKerberosAuth()
称呼?一些 super Debug模式?我想验证 python kerberos 实际上是否正确读取我的 krb5.conf
文件并与正确的人通信kdc
。
最佳答案
如果您使用的是 MIT Kerberos 的最新版本,则可以设置 KRB5_TRACE=/dev/stderr,它将打印大量调试信息,显示您正在查找的内容。但是,您已经收到一条明确的错误消息:“票证已过期。”查看 klist 报告的票证结束时间,并检查客户端、服务器和 KDC(在本例中为域 Controller )上的时间。 Kerberos 需要松散同步的时钟,通常在 5 分钟内。
I've used kinit to verify that my certificate is not expired,
你的意思是klist,而不是kinit? kinit 获取新的 TGT; klist 显示 ccache 的内容。顺便说一句,这些 Kerberos 数据结构称为“票证”,而不是“证书”; “certificate”通常与非对称 key (例如 X.509 证书)一起使用。
which is leading me to thinking that the python script is looking elsewhere for the credential cache? Is there a way to find that out?
KRB5_TRACE 将显示这一点。作为通用调试工具,您还可以随时使用 strace -f -efile
运行程序来查看它访问哪些文件。
关于python - 为没有 root 的 python kerberos 指定另一个域领域,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22026887/