Linux

kerberos 憑證記憶體類型 MEMORY 的案例?

  • June 24, 2017

MIT Kerberos 提供的憑證記憶體類型之一是MEMORY. 根據文件,它由 kadmin 使用。

MEMORY 記憶體用於儲存不需要在目前程序之外提供的憑據。例如,kadmin 使用記憶體 ccache 來儲存用於聯繫管理伺服器的管理票證。

我試過設置default_ccache_name = MEMORY:/etc/krb5.conf. 這樣做之後,我在發出kinit命令時進行了數據包擷取。從這個擷取中,我可以看到從 KDC 成功獲得了 TGT。一旦 kinit 過程完成,這張票就(顯然)失去了。此外,如果需要基於持久記憶體的票證,似乎可以使用KEYRINGccache 類型。

MEMORY 憑證記憶體類型的其他案例是什麼?

例如,我認為這對 bash 腳本沒有用處。當腳本呼叫kinit時,它將分叉,完成後,父級將無法訪問獲得的票證。

是否可能包含一個 kerberos 標頭檔,以便將獲得的票證與您的其他邏輯保持在相同的地址空間中?

這個問題的答案正是評論中假設的。從您的程式碼中,您可以包含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 是否包含在其中。

引用自:https://serverfault.com/questions/856300