所以我有一个服务器,每次用户或服务帐户登录到机器时,系统日志中都会生成一个错误事件:
A Kerberos Error Message was received:
on logon session DOMAIN\serviceaccount
Client Time:
Server Time: 12:44:21.0000 10/9/2012 Z
Error Code: 0x19 KDC_ERR_PREAUTH_REQUIRED
Extended Error:
Client Realm:
Client Name:
Server Realm: DOMAIN
Server Name: krbtgt/DOMAIN
Target Name: krbtgt/DOMAIN@DOMAIN
Error Text:
File: e
Line: 9fe
Error Data is in record data.
所以当然我用谷歌搜索了这个,我得到的唯一信息是“它不一定表示有问题,你通常可以忽略它。”
好吧,太棒了,但是这些错误大约每分钟一次向我的系统日志发送垃圾邮件,我真的很想让它们停止。有任何想法吗?
来自 Microsoft AskDS 博客:
KDC_ERR_PREAUTH_REQUIRED
如果您在跟踪中看到此错误,则根本不表示存在问题。客户端请求了一张票,但没有包含预身份验证数据。您通常会看到再次发送相同的请求和数据以及发出票证的域控制器。Windows 使用此技术来确定支持的加密类型。
我不能帮你阻止他们;恐怕我是 Linux 人。我至少可以解释它们。理解此消息需要稍微偏离一下 Kerberos 身份验证的工作原理。
基本的 Kerberos 身份验证过程是客户端从 KDC 请求加密的 TGT,然后使用其本地密钥对其进行解密。然而,天真地实施,这允许攻击者为您领域中的每个用户下载 TGT,然后在攻击者空闲时尝试通过暴力攻击解密它们。因此,Kerberos 添加了一种称为预身份验证的机制。
预身份验证的工作方式是 KDC 在收到 TGT 请求时发回预身份验证质询,而不是仅发回 TGT。预身份验证质询可以采用多种形式,但最常见的要求客户端发送用客户端密钥加密的当前时间。KDC 然后在发送 TGT 之前确认客户端可以这样做(这表明对客户端密钥有一些了解)。
然而,部分是因为添加了预身份验证,部分是因为客户端不知道将发送什么预身份验证质询,客户端总是发送基本的 TGT 请求,然后 KDC 总是用预身份验证质询拒绝它。这些日志消息是 Active Directory 记录的事实,即它在没有预身份验证的情况下收到了 TGT 请求并发回了质询。
关于为什么要记录这个,你的猜测和我的一样好,因为它是协议的正常部分并且不是很有趣,但是所有基于 Linux 的 KDC 都做同样的事情。
我在我的服务器上遇到了同样的问题,它使我的服务器充满了错误。
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Lsa\Kerberos\Parameters
我在 Microsoft 支持知识库 ( https://support.microsoft.com/en-us/kb/262177 ) 中找到了这个注册表项 ( )并将其删除,现在它似乎运行良好。KDC_ERR_PREAUTH_REQUIRED 在初始 Kerberos AS 请求中返回。默认情况下,Windows Kerberos 客户端不在此第一个请求中包含预身份验证信息。响应包含有关 KDC 上支持的加密类型的信息,如果是 AES,则包含用于加密密码哈希的盐。
建议:始终忽略此错误代码。
https://support.microsoft.com/en-us/help/262177/how-to-enable-kerberos-event-logging
虽然这个问题已经被用户@Tony 回答了,但实际原因还不够清楚:
有一天,有人在服务器上打开了 Kerberos 事件的详细日志记录。要禁用它,您应该删除以下注册表值:
事实上,完全删除指定的注册表项也可以,但这不是最好的主意。
首先,它可能包含在某些情况下可能至关重要的任何其他重要设置(例如,MaxTokenSize,当用户帐户是大量域组的成员时,它可以解决身份验证问题)。
但主要原因是此注册表项存在于干净的 Windows 安装中,尽管它不包含任何值。因此,最好将其保留在其原始状态(空)而不是将其删除。空和不存在绝对不是一回事。
我 99% 确定删除这个特定的密钥不会在将来造成任何麻烦,但是你甚至开发人员自己都不知道在你执行了一些意想不到的事情之后事情会发生什么变化:)