为什么 "Local realm referral" 使用 MIT-Kerberos 失败?
Why does "Local realm referral" fail with MIT-Kerberos?
我正在尝试在 2 个 KDC(EXAMPLE.COM 和 HADOOP.COM)之间设置跨领域身份验证,以便领域 EXAMPLE.COM 中的用户可以访问 HADOOP.COM。我已经为我的 krb5.conf 添加了一个 capaths 部分:
[logging]
default = FILE:/var/log/krb5libs.log
kdc = FILE:/var/log/krb5kdc.log
admin_server = FILE:/var/log/kadmind.log
[libdefaults]
default_realm = EXAMPLE.COM
dns_lookup_realm = false
dns_lookup_kdc = false
ticket_lifetime = 24h
renew_lifetime = 7d
forwardable = true
[realms]
EXAMPLE.COM = {
kdc = examplekdc.example.com
admin_server = examplekdc.example.com
}
HADOOP.COM = {
kdc = hadoopkdc.hadoop.com
admin_server = hadoopkdc.hadoop.com
}
[domain_realm]
.example.com = EXAMPLE.COM
example.com = EXAMPLE.COM
[capaths]
HADOOP.COM = {
EXAMPLE.COM = .
}
我还向两个 KDC 添加了所需的主体 krbtgt/HADOOP.COM@EXAMPLE.COM。到目前为止,一切正常,我的应用程序能够执行所需的操作。
我担心的是我在 EXAMPLE.COM 上的跟踪日志中的以下行:
[158447] 1497720267.441664: TGS request result: -1765328377/Server myservice/hadoopkdc.hadoop.com@EXAMPLE.COM not found in Kerberos database
[158447] 1497720267.441680: Local realm referral failed; trying fallback realm HADOOP.COM
我的问题如下:
- 这个本地领域推荐到底是什么?这是 kerberos 行话吗
对于跨领域请求?
- 为什么本地领域推荐会失败?我如何明确指定我希望如何进行本地领域引用?
- 回退领域是什么意思?我该如何指定一个?
正如您从我的 krb5.conf 中看到的那样,我没有明确指定回退领域或引用,所以我认为 kerberos 正在为它们选择默认值。我想知道如何明确指定它们。
[158447] 1497720267.441664: TGS request result: -1765328377/Server myservice/hadoopkdc.hadoop.com@EXAMPLE.COM not found in Kerberos database
您的客户要求 KDC 提供服务主体。您的 KDC 不知道如何找到该委托人的领域。
我相信,如果您在 EXAMPLE.COM
KDC 使用的 krb5.conf
的 [domain_realms]
部分添加一个条目,内容如
[domain_realms]
.hadoop.com = HADOOP.COM
然后 KDC 将知道以 hadoop.com
结尾的主机由 HADOOP.COM
领域提供服务,并会自行尝试引用。
[158447] 1497720267.441680: Local realm referral failed; trying fallback realm HADOOP.COM
这是在 src/lib/krb5/krb/get_creds.c
中的 try_fallback
函数中产生的,当客户端在第一次请求时从 KDC 收到错误。
客户端比 KDC 更积极地猜测服务的领域,因为如果客户端猜不到,请求就会失败。
客户端尝试 HADOOP.COM
因为它最后的猜测是剥离主机名并尝试大写域名。
如果您正确配置了 KDC,那么您将保存一个请求。 Windows 主机可能比 MIT Kerberos 更关心 KDC 的正确配置。
我正在尝试在 2 个 KDC(EXAMPLE.COM 和 HADOOP.COM)之间设置跨领域身份验证,以便领域 EXAMPLE.COM 中的用户可以访问 HADOOP.COM。我已经为我的 krb5.conf 添加了一个 capaths 部分:
[logging]
default = FILE:/var/log/krb5libs.log
kdc = FILE:/var/log/krb5kdc.log
admin_server = FILE:/var/log/kadmind.log
[libdefaults]
default_realm = EXAMPLE.COM
dns_lookup_realm = false
dns_lookup_kdc = false
ticket_lifetime = 24h
renew_lifetime = 7d
forwardable = true
[realms]
EXAMPLE.COM = {
kdc = examplekdc.example.com
admin_server = examplekdc.example.com
}
HADOOP.COM = {
kdc = hadoopkdc.hadoop.com
admin_server = hadoopkdc.hadoop.com
}
[domain_realm]
.example.com = EXAMPLE.COM
example.com = EXAMPLE.COM
[capaths]
HADOOP.COM = {
EXAMPLE.COM = .
}
我还向两个 KDC 添加了所需的主体 krbtgt/HADOOP.COM@EXAMPLE.COM。到目前为止,一切正常,我的应用程序能够执行所需的操作。
我担心的是我在 EXAMPLE.COM 上的跟踪日志中的以下行:
[158447] 1497720267.441664: TGS request result: -1765328377/Server myservice/hadoopkdc.hadoop.com@EXAMPLE.COM not found in Kerberos database
[158447] 1497720267.441680: Local realm referral failed; trying fallback realm HADOOP.COM
我的问题如下:
- 这个本地领域推荐到底是什么?这是 kerberos 行话吗 对于跨领域请求?
- 为什么本地领域推荐会失败?我如何明确指定我希望如何进行本地领域引用?
- 回退领域是什么意思?我该如何指定一个?
正如您从我的 krb5.conf 中看到的那样,我没有明确指定回退领域或引用,所以我认为 kerberos 正在为它们选择默认值。我想知道如何明确指定它们。
[158447] 1497720267.441664: TGS request result: -1765328377/Server myservice/hadoopkdc.hadoop.com@EXAMPLE.COM not found in Kerberos database
您的客户要求 KDC 提供服务主体。您的 KDC 不知道如何找到该委托人的领域。
我相信,如果您在 EXAMPLE.COM
KDC 使用的 krb5.conf
的 [domain_realms]
部分添加一个条目,内容如
[domain_realms]
.hadoop.com = HADOOP.COM
然后 KDC 将知道以 hadoop.com
结尾的主机由 HADOOP.COM
领域提供服务,并会自行尝试引用。
[158447] 1497720267.441680: Local realm referral failed; trying fallback realm HADOOP.COM
这是在 src/lib/krb5/krb/get_creds.c
中的 try_fallback
函数中产生的,当客户端在第一次请求时从 KDC 收到错误。
客户端比 KDC 更积极地猜测服务的领域,因为如果客户端猜不到,请求就会失败。
客户端尝试 HADOOP.COM
因为它最后的猜测是剥离主机名并尝试大写域名。
如果您正确配置了 KDC,那么您将保存一个请求。 Windows 主机可能比 MIT Kerberos 更关心 KDC 的正确配置。