我正在尝试使用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应该在不破坏完全限定域名的情况下使用它。
我认为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已在此主机上正确配置,并确认工作正常。例如,我可以作为用户激活,并对票证执行身份验证。只是authGSSServerInit不能正常工作。
发布于 2012-08-31 01:31:07
其中一些文档具有误导性:
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。
发布于 2018-06-05 03:54:50
有关完整性的更多信息,请在python命令中包含以下变量:
这是可选的KRB5_TRACE=/path-to-log/file.log
例如:
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中:
import kerberos
kerberos.authGSSServerInit("user")
注意事项:
在密钥表中,主体必须是用户“”必须是完整主体将由您的kerberos客户端配置组成
如果返回码是0,那么就完成了!恭喜你!
如果没有,请转到日志文件并享受调试:P
https://stackoverflow.com/questions/12201900
复制相似问题