2

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 だけです。

4

2 に答える 2

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」。プリンシパルの残りの部分は、resolver(3) の助けを借りて生成されます。kerberos の残りの部分は短い名前を使用しても問題ありませんが、リゾルバーは FQDN を生成しますが、dnsdomainname が適切に設定されている場合のみです。

于 2012-08-30T17:31:06.680 に答える