我遇到了将 Linux 服务器加入 Active Directory 域时自动创建的密钥表条目的问题。首先说一下我的流程:
- 安装所需的 Linux 软件包
yum install realmd pam sssd adcli oddjob oddjob-mkhomedir samba-common-tools krb5-workstation
- 在 Active Directory 中创建计算机对象并添加相关 SPN 条目 (servicePrincipalName)
- 执行域加入
realm join -v EXAMPLE.COM -U domainUser
在加入过程中,该过程会自动创建一个 krb5.keytab 文件,其中的条目与计算机对象的 SPN 条目直接匹配。因此,如果 SPN 具有[email protected]条目,则加入过程会创建[email protected]密钥表条目。 问题是,如果 SPN 的名称中包含大写的服务类型,则密钥表生成过程不会考虑服务类型的大小写,而是强制密钥表条目具有小写的服务类型。因此,如果 SPN 为HTTP /Se [email protected],则密钥表生成器会强制其为http / [email protected],在域加入过程中。为了使我正在使用的应用程序正常工作,这些需要匹配(均为大写)。
我的目标是拥有一个与 SPN(大写服务类型)匹配的密钥表条目,据我所知,我有两个选择
- 修复
realm join
流程以保持服务类型的大小写相同,或者 - 在 keytab 文件中创建我自己的 keytab 条目
我对这两个选项都有问题。对于第一个选项,我找不到任何可以更改的加入过程。对于第二个选项,我找到了两个可以使用的应用程序来创建我自己的条目。这些应用程序是 kadmin 和 ktutil。kadmin 给我一个错误“所需的 KADM5 主体缺失...”(我不知道如何修复)。ktutil 选项也可以使用,只不过它需要将相同的密码应用于这个新的 keytab 条目,该密码由其他 keytab 条目使用;但是,该密码由 Active Directory 管理,无法获取。
有没有其他人以前遇到过这个问题,并有关于如何将密钥表条目的服务类型保持大写的解决方案?
谢谢!
我想说的是,您首先不应该将这些 SPN 添加到主机的 keytab(计算机帐户)中。Samba (cifs) 或 SSH (host) 等服务可以继续使用它,但其他所有服务(HTTP、imap 等)都应该在自己的 keytab 文件中拥有自己的独立密钥。(总的来说,如果该服务不在 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
.像这样的东西应该有效: