Linux
kerberos 憑證記憶體類型 MEMORY 的案例?
MIT Kerberos 提供的憑證記憶體類型之一是
MEMORY
. 根據文件,它由 kadmin 使用。MEMORY 記憶體用於儲存不需要在目前程序之外提供的憑據。例如,kadmin 使用記憶體 ccache 來儲存用於聯繫管理伺服器的管理票證。
我試過設置
default_ccache_name = MEMORY:
在/etc/krb5.conf
. 這樣做之後,我在發出kinit
命令時進行了數據包擷取。從這個擷取中,我可以看到從 KDC 成功獲得了 TGT。一旦 kinit 過程完成,這張票就(顯然)失去了。此外,如果需要基於持久記憶體的票證,似乎可以使用KEYRING
ccache 類型。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 是否包含在其中。