【发布时间】:2017-11-09 12:53:51
【问题描述】:
我正在尝试让 Windows 客户端在加入域的场景中通过 Linux 服务器进行身份验证,我已根据 PBIS/gssapps 和 MSDN GSS/SSPI interop documentation 中提供的文档创建了一个服务主体。更新了 /etc/krb5.keytab 中的相关 keytab 条目。
确保 DNS 区域设置正确且机器已加入域
static int server_acquire_creds(
char *service_name,
gss_cred_id_t *server_creds
)
{
int ret = 0;
gss_buffer_desc name_buf = GSS_C_EMPTY_BUFFER;
gss_name_t server_name = GSS_C_NO_NAME;
OM_uint32 maj_stat = 0, min_stat = 0;
name_buf.value = service_name;
name_buf.length = strlen((char *)name_buf.value) + 1;
maj_stat = gss_import_name(&min_stat, &name_buf,
(gss_OID) gss_nt_service_name, &server_name);
if (maj_stat != GSS_S_COMPLETE) {
display_status("importing name", maj_stat, min_stat);
ret = -1;
goto error;
}
maj_stat = gss_acquire_cred(&min_stat, server_name, 0,
GSS_C_NULL_OID_SET, GSS_C_ACCEPT,
server_creds, NULL, NULL);
if (maj_stat != GSS_S_COMPLETE) {
display_status("acquiring credentials", maj_stat, min_stat);
ret = -1;
goto error;
}
error:
(void) gss_release_name(&min_stat, &server_name);
return ret;
}
我遇到的错误:
GSS-API error acquiring credentials: Unspecified GSS failure. Minor code may provide more information (851968, 851968, 0x000d0000)
GSS-API error acquiring credentials: No key table entry found matching gss\/dell-vostro-155.domain.in/domain.in@ (39756033, 39756033, 0x025ea101)
传递的service_name 是"gss/dell-vostro-155.domain.in@domain.in"。
我确实在 ktutil/list 中看到了主体
主要是在寻找有关如何进行调试的建议。
编辑:
ktutil: list -e
...
114 2 gss/dell-vostro-155.domain.in@domain.in (des-cbc-crc)
~/work/gss$ hostname -A
dell-vostro-155.domain.in
这发生在服务器端,它将执行 gss_ASC,
sudo ./gss-server gss/dell-vostro-155.domain.in@domain.in
所以 gss-server 充当主体名称中的“gss”部分。
编辑
krb5.conf 有点大,我想粘贴一些东西,因为它添加了一个 Pastebin 链接krb5.conf
【问题讨论】:
-
你有一个名为“gss”的服务在Linux服务器上运行吗?我们可以看到您用于更新 /etc/krb5.keytab 中相关 keytab 条目的命令语法吗?我们还能看到 klist 的输出吗?
-
谢谢@T-Heron,我已经更新了相关细节,如果有意义请告诉我。
-
当您自己执行 sudo ./gss-server gss/dell-vostro-155.domain.in 时会发生什么? (没有“@domain.in”后缀部分)请用结果更新您的问题。
-
好的。请将您的 krb5.conf 文件添加到问题中,这是一个非常相关的文件,并且不会那么长。
-
@T-Heron 非常感谢我已经完成了必要的工作。还逐步通过 gss_acquire_cred,在 krb5_gss_acquire_cred_from 我看到传递的名称无效并且 gssalloc 失败。这就是查找失败的原因。我需要进入 gssint_import_internal_name 并了解等效的 KRb5 实现,看看那里发生了什么。