我尝试在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 = .
}
我还将所需的校长krbtgt/HADOOP.COM@EXAMPLE.COM添加到了KDC的两个部门。到目前为止,一切正常,我的应用程序能够做到它所需要的。
我关注的是我在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
我的问题如下:
从我的krb5.conf可以看出,我还没有明确指定回退领域或推荐,所以我认为kerberos正在为它们选择默认值。我想知道如何明确指定它们。
答案 0 :(得分:0)
[158447] 1497720267.441664: TGS request result: -1765328377/Server myservice/hadoopkdc.hadoop.com@EXAMPLE.COM not found in Kerberos database
您的客户向KDC询问了服务主管。你的KDC不知道如何找到该校长的领域。
我相信,如果您在[domain_realms]
KDC使用的krb5.conf
部分的EXAMPLE.COM
部分添加条目,其中包含
[domain_realms]
.hadoop.com = HADOOP.COM
然后,KDC将知道以hadoop.com
领域结尾的主机将由HADOOP.COM
领域提供服务,并将自行尝试推介。
[158447] 1497720267.441680: Local realm referral failed; trying fallback realm HADOOP.COM
当客户端在第一次请求时从KDC收到错误时,会在try_fallback
中的src/lib/krb5/krb/get_creds.c
函数中生成此函数。
客户在猜测服务领域方面比KDC更积极,因为如果客户端无法猜测,请求将失败。
客户端尝试HADOOP.COM
,因为它最后的猜测是剥离主机名并尝试使用大写域名。
如果您正确配置KDC,那么您将保存一个请求。与MIT Kerberos相比,Windows主机可能更关心KDC的正确配置。