krb5.keytab 条目需要具有大写的服务类型

krb5.keytab 条目需要具有大写的服务类型

我遇到了将 Linux 服务器加入 Active Directory 域时自动创建的密钥表条目的问题。首先说一下我的流程:

  1. 安装所需的 Linux 软件包yum install realmd pam sssd adcli oddjob oddjob-mkhomedir samba-common-tools krb5-workstation
  2. 在 Active Directory 中创建计算机对象并添加相关 SPN 条目 (servicePrincipalName)
  3. 执行域加入realm join -v EXAMPLE.COM -U domainUser

在加入过程中,该过程会自动创建一个 krb5.keytab 文件,其中的条目与计算机对象的 SPN 条目直接匹配。因此,如果 SPN 中有条目[电子邮件受保护],加入过程创建一个 keytab 条目[电子邮件受保护]问题是如果 SPN 的名称中包含大写的服务类型,则密钥表生成过程不会考虑服务类型的大小写,而是强制密钥表条目具有小写的服务类型。因此,如果 SPN 是HTTP协议/[电子邮件受保护],然后密钥表生成器强制它成为http/[电子邮件受保护],在域加入过程中。为了使我正在使用的应用程序正常工作,这些需要匹配(均为大写)。

我的目标是拥有一个与 SPN(大写服务类型)匹配的密钥表条目,据我所知,我有两个选择

  1. 修复realm join流程以保持服务类型的大小写相同,或者
  2. 在 keytab 文件中创建我自己的 keytab 条目  

我对这两个选项都有问题。对于第一个选项,我找不到任何可以更改的加入过程。对于第二个选项,我找到了两个可以使用的应用程序来创建我自己的条目。这些应用程序是 kadmin 和 ktutil。 kadmin 给我一个错误“所需的 KADM5 主体缺失...”(我不知道如何修复)。 ktutil 选项也可以使用,只不过它需要将相同的密码应用于这个新的 keytab 条目,该密码由其他 keytab 条目使用;但是,该密码由 Active Directory 管理,无法获取。

有没有其他人以前遇到过这个问题,并有关于如何将密钥表条目的服务类型保持大写的解决方案?

谢谢!

答案1

我会说你不应该首先将这些 SPN 添加到主机的 keytab(计算机帐户)中。 Samba (cifs) 或 SSH (host) 等服务可以继续使用它,但其他所有服务(HTTP、imap 等)都应该有自己独立的密钥在他们自己的密钥表文件中。(总的来说,如果该服务不在 AD 的默认“主机”“服务别名”列表中,那么它不应该共享计算机帐户。)

在 Active Directory 中创建其他主体(不与计算机帐户关联)的常用方法是创建用户使用随机密码的帐户并为其分配所需的 SPN。 Active Directory 不使用 MIT kadmin 协议;它的管理是通过 LDAP 完成的 - 创建 Kerberos 主体的唯一方法是servicePrincipalName您已经找到的 LDAP 属性。 (但msDS-SupportedEncryptionTypes也不要忘记设置!)

借助Samba工具,samba-tool spn add可以samba-tool domain exportkeytab使用 和 来实现这一点;您还可以使用ktutil手工制作密钥表来完成此操作,甚至可以使用 RSAT 和ktpass.exe.

像这样的东西应该有效:

samba-tool user create HTTP-foo --random-password
samba-tool user setexpiry HTTP-foo --noexpiry
samba-tool spn add HTTP/foo.example.com HTTP-foo
net ads enctypes set HTTP-foo 24
samba-tool domain exportkeytab HTTP.keytab --principal=HTTP/foo.example.com

相关内容