Python authGSSServerInit从keytab中查找错误条目

Python authGSSServerInit从keytab中查找错误条目,python,kerberos,Python,Kerberos,我正在尝试使用python kerberos(1.0.90-3.el6)初始化GSSAPI服务器端身份验证的上下文我的问题是myserver.localdomain被转换为myserver-我给定主体的一部分在某处被截断。为什么会发生这种情况? 失败示例: >>> import kerberos >>> kerberos.authGSSServerInit("HTTP@myserver.localdomain") Traceback (most recent

我正在尝试使用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))
>>>
我无法为普通HTTP生成密钥表/myserver@LOCALDOMAIN因为它还将强制用户使用这样的地址访问服务器。我需要让函数使用正确的FQDN名称。据我所知,authGSSServerInit应该在不破坏FQDN的情况下使用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无法正常工作。

一些文档具有误导性:

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的其余部分很乐意使用短名称,但只有正确设置了dnsdomainname,解析器才会生成FQDN

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

  • 这是可选的->KRB5_TRACE=/path to log/file.log
  • 通常这个路径->KRB5_CONFIG=/etc/KRB5.conf
  • 通常是这个路径->KTNAME=/etc/security/keytab/foo.keytab
  • 例如:

    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运行中:

    import kerberos
    kerberos.authGSSServerInit("user")
    
    考虑事项:

  • 在密钥表中,主体必须是用户/host@REALM
  • 两个“用户”必须相同
  • 完整主体将由kerberos客户端配置组成
  • 如果返回代码为0,则完成!恭喜你


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

    您知道如何禁用此功能吗?我正在尝试连接到服务器的CNAME,而此“功能”不断改变我的服务原则。我解决了我的问题,并在此处进行了记录:
    import kerberos
    kerberos.authGSSServerInit("user")