authGSSServerInit从keytab中查找错误的条目

时间:2012-08-30 16:59:31

标签: python kerberos

我正在尝试使用python-kerberos(1.0.90-3.el6)初始化GSSAPI服务器端身份验证的上下文。 我的问题是myserver.localdomain被转换为myserver - 我给定的主体的一部分被切掉了。为什么会这样?

示例失败:

>>> 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的帮助下,我明白了:

[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应该可以使用FQDN而不会破坏它。

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

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,并确认其可以正常工作。我可以作为用户使用kinit,并对票证进行身份验证。只是authGSSServerInit无法正常运行。

2 个答案:

答案 0 :(得分:3)

部分文档具有误导性:

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”。在解析器(3)的帮助下生成其余的主体。虽然其余的kerberos东西很高兴使用短名称解析器生成FQDN,但只有正确设置了dnsdomainname。

答案 1 :(得分:0)

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

  1. 这是可选的 - &gt; KRB5_TRACE = /路径到日志/ file.log
  2. 通常这条路径 - &gt; KRB5_CONFIG = /etc/krb5.conf
  3. 通常这条路径 - &gt; KTNAME =的/ etc /安全/ keytabs / foo.keytab
  4. 例如:

    reduce

    在python中运行:

    KRB5_TRACE=/path-to-log/file.log KRB5_CONFIG='/etc/krb5.conf' KTNAME=/etc/security/keytabs/foo.keytab /opt/anaconda3.5/bin/python3.6
    

    考虑:

    1. 在您的keytab中,主体必须是user / host @ REALM
    2. 用户&#34;用户&#34;必须相同
    3. 完整校长将由您的kerberos客户端配置
    4. 组成

      如果返回代码为0,您就完成了! Congratz!

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