1

我们正在尝试配置具有多个域的单个 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.conf 看起来像这样:

[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 似乎不接受具有不同领域的 kdc,例如 example2(但它适用于 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

在修改建议grawity之后,我用 systemctl edit --full 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 krb tcp 0 0 0.0.0.0:88 0.0.0.0:* LISTEN 0 9326395 362136/krb5kdc tcp6 0 0 :::88 :::* LISTEN 0 9326396 362136/krb5kdc root@example1.com:/root# ps -ef | grep -i krb 根 362136 1 0 13:04?00:00:00 /usr/sbin/krb5kdc -P /var/run/krb5kdc.pid -r EXAMPLE1.COM -r EXAMPLE2.COM root 363981 331025 0 13:08 pts/0 00:00:00 grep --color =自动 -i krb

4

1 回答 1

3

首先,您的 [realms] database_module 配置与 [dbmodules] 配置不匹配。你有database_module=EXAMPLE1,但实际的模块部分被称为EXAMPLE1.com.

(配置布局/语法似乎也很不稳定。我希望这只是复制和粘贴的产物,而不是它的实际外观?)


其次,在 MIT Kerberos 中,必须使用-r每个领域的参数来启动 KDC 进程 (krb5-kdc)。如果未指定,它将仅使用系统范围default_realm- 它不会枚举所有已配置的数据库。

编辑 systemd krb5-kdc.service 或 init.d 脚本以运行:

krb5kdc -r EXAMPLE1.COM -r EXAMPLE2.COM

不幸的是,在当前版本中,MIT Kerberos无法实现相同的目标kadmind——每个实例仅支持一个数据库。您可以运行多个 kadmind 实例(在不同的 TCP 端口上),或kadmin.local用于管理。


最后,您kinit实际上并没有显示它是否首先联系了正确的 KDC。(而且您也没有包含任何表明这一点的 KDC 日志。)

您可以通过导出KRB5_TRACE=/dev/stderr.


另请注意,传统的领域名称完全大写,包括 TLD。因此,虽然EXAMPLE1.com它完全有效,但它并不是软件默认情况下所期望的。例如,如果您没有 [domain_realm] 部分,客户端将尝试自动将域映射到全大写领域,而不是您当前拥有的混合版本。

于 2019-11-13T17:00:22.123 回答