计算机帐户的新 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 update
kvno ,但文件中没有任何更新。 之后的输出保持不变。4
/etc/krb5.keytab
klist -kt
adcli 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
adcli
0
尽管有提示,但仍退出
! 无法在计算机帐户上设置 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 的多启动客户端时出现此问题的信息。