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

标签 python kerberos

据我所知,告诉 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/

相关文章:

python - 这个 python 脚本的 Windows 替代方案,用于 linux 从 URL 获取 IP

kerberos - GSS 异常 : No valid credentials provided (Mechanism level: Failed to find any Kerberos tgt) while connecting Polybase with Kerberos

java - Jaspic ServerAuthModule 委托(delegate)给 JAAS Krb5LoginModule

Java - JNDI/Active Directory/Kerberos/WebLogic Server - 密码配置

java - 来自 Java 的 kerberos - 为当前经过身份验证的用户获取主题

java - 在 Java 中将 Windows DOMAIN\user 映射到 user@KERBEROS.REALM

python - 类型错误 : unsupported operand type(s) for/: 'list' and 'long'

python - 如何将 ttk.Notebook 框架配置为平面浮雕?

python - 如何抓取标签之外的网络数据

python - Python 中的函数定义