adcli update 不会使用新的 kvno 保存 Kerberos 票证

adcli update 不会使用新的 kvno 保存 Kerberos 票证

计算机帐户的新 Kerberos 票证已被找到adcli update但未保存在 keytab 文件中。

adcli update --domain=example.org -v

出现输出“已检索计算机帐户的 kvno‘4’”,但在 keytab 文件中 KVNO3仍然是最大的数字。

详细说明

环境

  • 客户端:带有 adcli、sssd、idmapd 的 Ubuntu 桌面
  • KDC:Microsoft Active Directory

域加入成功

域的初始加入工作正常,通过adcli join --domain=example.org --domain-realm=EXAMPLE.ORG --login-type=user --login-user=join-admin。在初始加入时,计算机对象已正确创建,属性(计算机属性、DNS 主机名、SPN)已正确设置,并且计算机帐户票证和 SPN 已正确存储在 中/etc/krb5.keytab

sssd 和 idmapd

sssd 和 idmapd 已配置并运行。该id domain-user命令给出了正确的结果,并且su domain-user运行正常。

keytab 现在包含 kvno 2 和 3

# klist -kt | uniq
Keytab name: FILE:/etc/krb5.keytab
KVNO Timestamp           Principal
---- ------------------- ------------------------------------------------------
   2 06/22/2022 14:37:42 [email protected]
   2 06/22/2022 14:37:42 host/[email protected]
   2 06/22/2022 14:37:42 host/[email protected]
   2 06/22/2022 14:37:42 RestrictedKrbHost/[email protected]
   2 06/22/2022 14:37:42 RestrictedKrbHost/[email protected]
   3 06/27/2022 18:11:24 [email protected]
   3 06/27/2022 18:11:24 host/[email protected]
   3 06/27/2022 18:11:24 host/[email protected]
   3 06/27/2022 18:11:24 RestrictedKrbHost/[email protected]
   3 06/27/2022 18:11:24 RestrictedKrbHost/[email protected]

大约一周后出现问题

su domain-user命令不再起作用,可以在系统日志中发现以下错误:

[sssd[krb5_child[14085]]]: Cannot find key for [email protected] kvno 4 in keytab

Active Directory 检查显示 KeyVersionNumber 为4

PS> Get-ADComputer TESTCLIENT1 -Property msDS-KeyVersionNumber

DistinguishedName     : CN=TESTCLIENT1,CN=Computers,DC=example,DC=org
DNSHostName           : testclient1.example.org
Enabled               : True
msDS-KeyVersionNumber : 4
Name                  : TESTCLIENT1
ObjectClass           : computer
ObjectGUID            : [...]
SamAccountName        : TESTCLIENT1$
SID                   : [...]
UserPrincipalName     :

adcli 更新

该命令找到计算机帐户的adcli updatekvno ,但文件中没有任何更新。 之后的输出保持不变。4/etc/krb5.keytabklist -ktadcli update

# adcli update --domain=example.org -v
 * Found realm in keytab: EXAMPLE.ORG
 * Found computer name in keytab: TESTCLIENT1
 * Found service principal in keytab: host/TESTCLIENT1
 * Found service principal in keytab: host/testclient1.example.org
 * Found host qualified name in keytab: host/testclient1.example.org
 * Found service principal in keytab: RestrictedKrbHost/TESTCLIENT1
 * Found service principal in keytab: RestrictedKrbHost/testclient1.example.org
 * Using domain name: example.org
 * Calculated computer account name from fqdn: TESTCLIENT1
 * Using domain realm: example.org
 * Discovering domain controllers: _ldap._tcp.example.org
 * Sending netlogon pings to domain controller: cldap://141.3.80.11
 * Sending netlogon pings to domain controller: cldap://141.3.80.12
 * Sending netlogon pings to domain controller: cldap://141.3.80.13
 * Received NetLogon info from: DC01.example.org
 * Wrote out krb5.conf snippet to /tmp/adcli-krb5-Te0RhG/krb5.d/adcli-krb5-conf-M8VMw2
 * Authenticated as default/reset computer account: TESTCLIENT1
 * Using GSS-SPNEGO for SASL bind
 * Looked up short domain name: EXAMPLE
 * Using fully qualified name: testclient1.example.org
 * Using domain name: example.org
 * Using computer account name: TESTCLIENT1
 * Using domain realm: example.org
 * Using fully qualified name: testclient1.example.org
 * Enrolling computer name: TESTCLIENT1
 * Generated 120 character computer password
 * Using keytab: FILE:/etc/krb5.keytab
 * Found computer account for TESTCLIENT1$ at: CN=TESTCLIENT1,CN=Computers,DC=example,DC=org
 * Retrieved kvno '4' for computer account in directory: CN=TESTCLIENT1,CN=Computers,DC=example,DC=org
 * Password not too old, no change needed
 * Modifying computer account: userAccountControl
 ! Couldn't set userAccountControl on computer account: CN=TESTCLIENT1,CN=Computers,DC=example,DC=org: Insufficient access
 * Updated existing computer account: CN=TESTCLIENT1,CN=Computers,DC=example,DC=org

# echo $?
0

adcli0尽管有提示,但仍退出

! 无法在计算机帐户上设置 userAccountControl:CN=TESTCLIENT1、CN=Computers、DC=example、DC=org:访问权限不足

我找到了以下与此相关的票:realmd/adcli#4

我认为在更改计算机对象之前应该已经在 keytab 文件中更新了票证。

可能是什么问题呢?

为什么票证或票证版本更新不起作用?

我不确定 sssd 是否会自行更新存储在 keytab 文件中的计算机帐户票证?我读过一些相关内容。想必 sssd 遇到的问题与我手动运行更新时遇到的问题相同?

编辑:解决方法

使用该adcli update命令我无法将密钥更新为 KVNO 4

5相反,我现在使用KVNO 创建了一个新票据adcli join ...(参见上面的命令),然后成功将其传输到密钥表文件。因此,现在 AD 和本地密钥表文件位于 KVNO 5。我执行adcli join ...时没有离开域或删除密钥表文件。

但是,我无法找出为什么会发生这种情况,但我会继续监视它。在互联网上,我主要阅读了有关当它是具有 Linux 和 Windows 的多启动客户端时出现此问题的信息。

相关内容