Варианты использования типа кэша учетных данных Kerberos MEMORY?

Одним из типов кэша учетных данных, предлагаемых MIT Kerberos, является MEMORY . Согласно документации он используется kadmin.

Кеши ПАМЯТИ предназначены для хранения учетных данных, которые не должны быть доступны вне текущего процесса. Например, ccache памяти используется kadmin для хранения административного билета, используемого для связи с сервером администратора.

Я пробовал установить default_ccache_name = MEMORY: в /etc/krb5.conf . После этого я сделал захват пакета при выполнении команды kinit . Из этого захвата я вижу, что TGT был успешно получен от KDC. Этот билет (очевидно) был утерян сразу после завершения процесса кинита. Более того, кажется, что если требуются билеты на основе постоянной памяти, можно использовать тип ccache KEYRING .

Каковы другие варианты использования типа кэша учетных данных MEMORY?

Я полагаю, что это бесполезно из bash, например. Когда сценарий вызывает kinit , он разветвляется, и по завершении полученный билет не будет доступен для родительского объекта.

Может быть, есть файл заголовка Kerberos, который можно включить, чтобы сохранить полученные билеты в том же адресном пространстве, что и остальная часть вашей логики?

3
задан 17 June 2017 в 16:05
2 ответа

Ответ на этот вопрос - именно то, что было постулировано в комментариях. Из своего кода вы можете включить заголовок 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
ответ дан 3 December 2019 в 07:23

В руководстве приведен пример kadmin. Его можно вызвать как CLI с обычными билетами в KEYRING или в FILEs. Другая возможность - интерактивный запуск команд в керберо-"оболочке". В этом случае тикет хранится в памяти процесса, где он "более безопасен" и автоматически очищается по окончании процесса.

Точно так же тикеты и операции kerberos могут быть доступны из других приложений, используя уже упомянутые "заголовочные" файлы, обычно используя так называемый GSSAPI (gssapi.h). Не совсем ответ на ваш вопрос, но это способ доступа к примитивам keberos в OpenSSH для доступа к локальному тикету kerberos и аутентификации на удаленном сервере (в этом случае тип MEMORY не будет полезен).

.
0
ответ дан 3 December 2019 в 07:23

Теги

Похожие вопросы