MIT Kerberos提供的其中一种凭据cachingtypes是MEMORY 。 根据文件,它是由kadmin使用。
MEMORYcaching用于存储不需要在当前进程之外可用的凭证。 例如,kadmin使用内存ccache存储用于联系pipe理服务器的pipe理权证。
我已经尝试在/etc/krb5.conf设置default_ccache_name = MEMORY: 这样做之后,我发出了kinit命令,并进行了数据包捕获。 从这个捕获中我可以看到TGT成功地从KDC获得。 kinit程序结束后,这个票据(显然)就丢失了。 此外,看起来如果需要基于持久性内存的票据,可以使用KEYRING ccachetypes。
MEMORY凭证cachingtypes的其他用例是什么?
我假设这是从一个bash脚本例如没有用。 当脚本调用kinit它将会分叉,并且在完成时,获得的票证将不能被父母访问。
是否有可能包含一个kerberos头文件,以保持与其他逻辑相同的地址空间的门票?
这个问题的答案正是在评论中被假定的。 从你的代码中你可以包含krb5.h头文件。 这将使您可以访问组成Kerberos代码库的function。
下面是一个从文档改编的玩具例子。
#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()是读取您的configuration文件并且krb5_init_context() MEMORY: ccachetypes。 所获得的票据将被存储在这个进程内存空间中。
这段代码确实获得了一个TGT。 我们可以通过在运行时捕获数据包来validation这一点。 我们也可以转储这个过程的内存,并validationTGT是否包含在其中。
该手册讲述了kadmin例子。 可以在KEYRING或FILE以普通票的forms调用它。 另一种可能是在kerberos“shell”中以交互方式运行命令。 在这种情况下,票证被存储在“更安全”的过程内存中,并在过程结束时自动清理。
kerberos门票和操作也可以使用已经提到的“标题”文件从其他应用程序访问,通常使用所谓的GSSAPI( gssapi.h )。 不能完全回答你的问题,但是这就是在OpenSSH中如何访问keberos原语来访问本地kerberos票据并向远程服务器进行身份validation的方式(在这种情况下, MEMORYtypes将不会有用)。