Kerberos 凭证缓存类型 MEMORY 的用例?

Kerberos 凭证缓存类型 MEMORY 的用例?

MIT Kerberos 提供的凭证缓存类型之一是MEMORY。根据文档它由 kadmin 使用。

MEMORY 缓存用于存储不需要在当前进程之外使用的凭据。例如,kadmin 使用内存 ccache 来存储用于联系管理服务器的管理票据。

我尝试过设置default_ccache_name = MEMORY:/etc/krb5.conf设置完成后,我在发出命令时进行了数据包捕获kinit。从捕获的数据包中,我可以看到已成功从 KDC 获取 TGT。然后,此票证(显然)在 kinit 进程完成后立即丢失。此外,如果需要基于持久内存的票证,似乎可以使用KEYRINGccache 类型。

MEMORY 凭证缓存类型还有哪些其他用例?

我认为这在 bash 脚本中没有用处。当脚本调用时,kinit它会分叉,完成后父级将无法访问获得的票证。

是否有可以包含的 kerberos 头文件,以便将获取的票证保存在与其余逻辑相同的地址空间中?

答案1

这个问题的答案正是评论中假设的。您可以从代码中包含标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 是否包含在其中。

答案2

手册中提到了kadmin示例。它可以作为 CLI 使用普通票证KEYRINGFILEs 调用。另一种可能性是在 kerberos“shell”中以交互方式运行命令。在这种情况下,票证存储在进程的内存中,在那里它“更安全”,并在进程结束时自动清除。

同样,可以使用前面提到的“头”文件从其他应用程序访问 kerberos 票证和操作,通常使用所谓的 GSSAPI ( gssapi.h)。虽然不能完全回答您的问题,但这是在 OpenSSH 中访问 keberos 原语以访问本地 kerberos 票证并向远程服务器进行身份验证的方式(在这种情况下,类型MEMORY没有用)。

相关内容