我们试图用多个域(这是必需的)配置单个kerberos服务器,因此我最终创建了2个这样的数据库,每个数据库中有一些主体(很好,我可以登录到这两个数据库并查看不同的主体):
kdc.conf
[realms]
EXAMPLE1.COM =
{database_module=EXAMPLE1.COM
...}
EXAMPLE2.COM =
{database_module=EXAMPLE2.COM
...}
[dbmodules]
EXAMPLE1.COM=
{database_name=/var/kerberos/krb5kdc/principal
...}
EXAMPLE2.COM =
{database_name=/var/kerberos/krb5kdc/principal2
...}Krb5. that看起来是这样的:
[realms]
EXAMPLE1.COM=
{ kdc= server.example1.com
admin_server = server.example1.com
default_domain = example1.com
...}
EXAMPLE2.COM =
{kdc= server.example2.com:61321
admin_server = server.example2.com:61321
default_domain = example2.com
...}
[domain_realm]
.example1.com = EXAMPLE1.COM
example1.com = EXAMPLE1.COM
.example2.com = EXAMPLE2.COM
example2.com = EXAMPLE2.COM现在的问题是,kerberos似乎不接受example2具有不同领域的kdc (但它适用于example1):
kinit -V -t /tmp/krb5.example2.keytab user/example2@EXAMPLE2.com
keytab specified, forcing -k
Using default cache: /tmp/krb5cc_0
Using principal: user/example2@EXAMPLE2.com
Using keytab: /tmp/krb5.example2.keytab
kinit: Cannot contact any KDC for realm 'EXAMPLE2.com' while getting initial credentials经过我建议的修改之后,我用systemctl编辑--完整的krb5kdc.service编辑了服务文件,并将其放在-r EXAMPLE1 -r EXAMPLE2的末尾,现在它似乎更好用了,但我仍然无法理解(不确定是否应该添加不同的端口或正在发生什么):
kinit -V -t /tmp/krb5.example2.keytab user/example2@EXAMPLE2.COM
keytab specified, forcing -k
Using default cache: /tmp/krb5cc_0
Using principal: user/example2@EXAMPLE2.COM
Using keytab: /tmp/krb5.example2.keytab
[355090] 1573732431.376189: Getting initial credentials for user/example2@EXAMPLE2.COM
[355090] 1573732431.376190: Looked up etypes in keytab: aes256-cts, aes128-cts, des3-cbc-sha1, rc4-hmac, des-hmac-sha1, des, des-cbc-crc
[355090] 1573732431.376192: Sending unauthenticated request
[355090] 1573732431.376193: Sending request (201 bytes) to CPD4PRE.NEO4J.GENCAT.CAT
[355090] 1573732431.376194: Resolving hostname host.example2.com
[355090] 1573732431.376195: Initiating TCP connection to stream 10.53.48.79:88
[355090] 1573732431.376196: Sending TCP request to stream 10.53.48.79:88
[355090] 1573732431.376197: Received answer (218 bytes) from stream 10.53.48.79:88
[355090] 1573732431.376198: Terminating TCP connection to stream 10.53.48.79:88
[355090] 1573732431.376199: Response was not from master KDC
[355090] 1573732431.376200: Received error from KDC: -1765328370/KDC has no support for encryption type
[355090] 1573732431.376201: Getting initial credentials for user/example2@EXAMPLE2.COM
[355090] 1573732431.376202: Looked up etypes in keytab: aes256-cts, aes128-cts, des3-cbc-sha1, rc4-hmac, des-hmac-sha1, des, des-cbc-crc
[355090] 1573732431.376204: Sending unauthenticated request
[355090] 1573732431.376205: Sending request (201 bytes) to EXAMPLE2.COM (master)
kinit: KDC has no support for encryption type while getting initial credentials实际上,我并没有读到它需要不同的端口,所以我修改了它,以便使用61321,但是它没有推高端口上的任何套接字,它只是按默认端口88,这是针对第一个(也是默认的)领域:{kdc= server.example2.com:61321 admin_server = server.example2.com:61321
root@example1.com:/root# netstat -netapl grep听一听grep 0 0.0.0.0:88 0.0.0:*侦听9326395 9326395 362136/krb5kdc tcp6 0:88:*侦听9326395 9326396 362136/krb5kdcroot@示例1.com:/ root # ps -ef -i -i krb根362136 1 0 13:04 ? 00:00:00 /usr/sbin/krb5kdc -P /var/run/krb5kdc.pid -r EXAMPLE1.COM -r EXAMPLE2.COM根363981 331025 0 13:08 pts/0 00:00 grep -颜色=自动-i-i
发布于 2019-11-13 17:00:22
首先,您的领域database_module配置与dbmodules配置不匹配。您有database_module=EXAMPLE1,但是实际的模块部分称为EXAMPLE1.com。
(配置布局/语法看起来也很不稳定。我希望那只是一个复制和粘贴它的人工制品,而不是它看起来的实际方式?)
其次,在MIT中,必须为每个领域使用一个-r参数启动KDC进程(krb5-kdc)。如果没有指定,它将简单地使用系统范围的default_realm -它不会枚举所有配置的数据库。
编辑systemdkrb5-kdc.service或init.d脚本以运行:
krb5kdc -r EXAMPLE1.COM -r EXAMPLE2.COM不幸的是,在当前版本中,MIT的kadmind无法实现同样的目标--它只支持每个实例一个数据库。您可以运行多个kadmind实例(在不同的TCP端口上),或者使用kadmin.local进行管理。
最后,您的kinit实际上并没有显示它是否首先联系到正确的KDC。(而且您也没有包含任何KDC日志。)
通过导出KRB5_TRACE=/dev/stderr,您可以使Kerberos客户端更详细。
还请注意,传统的领域名称是完全大写的,包括TLD。因此,尽管EXAMPLE1.com是完全有效的,但在默认情况下它并不完全符合软件的期望。例如,如果没有domain_realm部分,客户端将尝试自动将域映射到完全大写的领域,而不是当前的混合版本。
https://stackoverflow.com/questions/58839529
复制相似问题