首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >authGSSServerInit从密钥表中查找错误的条目

authGSSServerInit从密钥表中查找错误的条目
EN

Stack Overflow用户
提问于 2012-08-31 00:59:31
回答 2查看 4.9K关注 0票数 2

我正在尝试使用python-kerberos (1.0.90-3.el6)初始化GSSAPI服务器端身份验证的上下文。我的问题是myserver.localdomain会被转换成myserver --我给定的主体的一部分会在某个地方被砍掉。为什么会发生这种情况?

失败示例:

代码语言:javascript
复制
>>> import kerberos
>>> kerberos.authGSSServerInit("HTTP@myserver.localdomain")
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
kerberos.GSSError: (('Unspecified GSS failure.  Minor code may provide more information', 851968), ('Unknown error', 0))
>>>

在KRB5_TRACE的帮助下,我得到了原因:

代码语言:javascript
复制
[1257] 1346344556.406343: Retrieving HTTP/myserver@LOCALDOMAIN from WRFILE:/etc/krb5.keytab (vno 0, enctype 0) with result: -1765328203/No key table entry found for HTTP/myserver@LOCALDOMAIN

我不能为普通的HTTP/myserver@LOCALDOMAIN生成密钥表,因为它还会强制用户使用这样的地址访问服务器。我需要让函数与正确的FQDN名称一起工作。据我所知,authGSSServerInit应该在不破坏完全限定域名的情况下使用它。

我认为python-kerberos方法调用以下krb5-libs (1.9-33.el6)提供的函数,问题也可能出在这些函数中:

代码语言:javascript
复制
maj_stat = gss_import_name(&min_stat, &name_token, GSS_C_NT_HOSTBASED_SERVICE, &state->server_name);
maj_stat = gss_acquire_cred(&min_stat, state->server_name,GSS_C_INDEFINITE,GSS_C_NO_OID_SET, GSS_C_ACCEPT, &state->server_creds, NULL, NULL);

kerberos已在此主机上正确配置,并确认工作正常。例如,我可以作为用户激活,并对票证执行身份验证。只是authGSSServerInit不能正常工作。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-08-31 01:31:07

其中一些文档具有误导性:

代码语言:javascript
复制
def authGSSServerInit(service):
    """
    Initializes a context for GSSAPI server-side authentication with the given service principal.
    authGSSServerClean must be called after this function returns an OK result to dispose of
    the context once all GSSAPI operations are complete.

    @param service: a string containing the service principal in the form 'type@fqdn'
        (e.g. 'imap@mail.apple.com').
    @return: a tuple of (result, context) where result is the result code (see above) and
        context is an opaque value that will need to be passed to subsequent functions.
    """

事实上,API只需要类型。例如"HTTP“。主体的其余部分在resolver(3)的帮助下生成。尽管kerberos的其余部分很乐意使用短名称,但只有在正确设置dnsdomainname的情况下,解析器才会生成FQDN。

票数 3
EN

Stack Overflow用户

发布于 2018-06-05 03:54:50

有关完整性的更多信息,请在python命令中包含以下变量:

这是可选的KRB5_TRACE=/path-to-log/file.log

  • Usually this path /etc/krb5.conf

  • Usually KTNAME=/etc/security/keytabs/foo.keytab

  1. -> -> KRB5_CONFIG= -> path

例如:

代码语言:javascript
复制
KRB5_TRACE=/path-to-log/file.log KRB5_CONFIG='/etc/krb5.conf' KTNAME=/etc/security/keytabs/foo.keytab /opt/anaconda3.5/bin/python3.6

在python run中:

代码语言:javascript
复制
import kerberos
kerberos.authGSSServerInit("user")

注意事项:

在密钥表中,主体必须是用户“”必须是完整主体将由您的kerberos客户端配置组成

如果返回码是0,那么就完成了!恭喜你!

如果没有,请转到日志文件并享受调试:P

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12201900

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档