web-dev-qa-db-ja.com

Kerberos資格情報キャッシュタイプMEMORYのユースケース?

MIT Kerberosが提供する資格情報キャッシュタイプの1つはMEMORYです。 ドキュメント によると、kadminによって使用されます。

MEMORYキャッシュは、現在のプロセス以外で使用可能にする必要のない資格情報を保存するためのものです。たとえば、メモリccacheは、管理サーバーへの接続に使用される管理チケットを格納するためにkadminによって使用されます。

default_ccache_name = MEMORY:/etc/krb5.confを設定してみました。その後、kinitコマンドの発行中にパケットキャプチャを実行しました。このキャプチャから、TGTがKDCから正常に取得されたことがわかります。このチケットは、kinitプロセスが終了するとすぐに(明らかに)失われました。さらに、永続メモリベースのチケットが必要な場合は、KEYRINGccacheタイプを使用できるようです。

MEMORY資格情報キャッシュタイプの他のユースケースは何ですか?

たとえば、これはbashスクリプトでは役に立たないと思います。スクリプトがkinitを呼び出すと、スクリプトはフォークされ、完了すると、取得したチケットに親がアクセスできなくなります。

取得したチケットを他のロジックと同じアドレス空間に保持するためにインクルードできるKerberosヘッダーファイルはおそらくありますか?

3
rlf

この質問への答えは、まさにコメントで仮定されたものです。コードから、_krb5.h_ヘッダーを含めることができます。これにより、Kerberosコードベースを構成する関数にアクセスできるようになります。

以下は、 ドキュメント から採用されたおもちゃの例です。

_#include <string.h>
#include <krb5.h>

int main(void)
{
    krb5_error_code ret;
    krb5_creds creds;
    krb5_principal client_princ = NULL;

    krb5_context context;
    const char* princname = "user@REALM";
    const char* password = "secret";

    krb5_init_context(&context);

    memset(&creds, 0, sizeof(creds));
    ret = krb5_parse_name(context, princname, &client_princ);
    if (ret)
        goto cleanup;
    ret = krb5_get_init_creds_password(context, &creds, client_princ,
                                       password, NULL, NULL, 0, NULL, NULL);
    if (ret)
        goto cleanup;
    ret = krb5_verify_init_creds(context, &creds, NULL, NULL, NULL, NULL);

    /* do things with the ticket (&creds) here */

    cleanup:
    krb5_free_principal(context, client_princ);
    krb5_free_cred_contents(context, &creds);

    return 0;
}
_

関数krb5_init_context()は、構成ファイルを読み取り、_MEMORY:_ ccacheタイプを尊重します。取得したチケットは、このプロセスのメモリスペースに保存されます。

このコードは確かにTGTを取得します。これは、実行中にパケットキャプチャを取得することで確認できます。このプロセスのメモリをダンプして、TGTがそれに含まれていることを確認することもできます。

1
rlf

マニュアルでは、kadminの例について説明しています。 KEYRINGまたはFILEsに通常のチケットがあるCLIとして呼び出すことができます。もう1つの可能性は、Kerberos「シェル」でコマンドをインタラクティブに実行することです。その場合、チケットは「より安全」なプロセスのメモリに保存され、プロセスが終了すると自動的にクリーンアップされます。

すでに述べた「ヘッダー」ファイルを使用して、他のアプリケーションからKerberosチケットと操作にアクセスできるのと同じ方法で、通常はいわゆるGSSAPI(gssapi.h)。あなたの質問に完全に答えるわけではありませんが、これは、OpenSSHでkeberosプリミティブにアクセスして、ローカルkerberosチケットにアクセスし、リモートサーバーに対して認証する方法です(この場合、MEMORYタイプは役に立ちません)。

0
Jakuje