Windows 事件 4771,计算机和用户之间的不同用例

Windows event 4771 , different use case between computer and user

我正在使用 powershell 从域控制器获取审计失败事件 4625 和 4771。其中大部分是 0x18 状态。现在我理解带有用户名(不要以 $ 结尾)的事件是来自机器的密码错误。大多数 google 示例显示来自用户的 4771。

What i want to understand, is what it means when it is coming from a machine?

即肯定是机器上的一个帐户有问题,机器怎么密码错误?如果可以,如何找出问题所在?

Active Directory 是一个身份管理系统,因此任何使用 Active Directory 进行身份验证的东西都需要某种“身份”。由于计算机本身可以加入域并且必须对其进行身份验证(使用与常规用户登录相同的用户名和密码,通过 Kerberos),它们有一个用户名。 AD机器账户用户名是计算机的DNS主机名后跟一个美元符号,例如:Desktop-AB123$

由于域中的每台计算机都必须使用用户名和密码对域进行身份验证,因此身份验证可能会失败。它可能会因与常规用户登录失败相同的所有原因而失败:用户名无法识别或拼写错误、密码不正确、域或 UPN 后缀错误,或者任何数量的身份验证错误。

事件 ID 4771 表示 Kerberos 预身份验证错误,状态 0x18(通常)表示密码错误。 Source.

机器帐户在连接到域时会自动与域控制器重新协商密码。如果加入域的工作站无法与域控制器通信足够长的时间以致于密码过期,它将无法登录并且您将无法登录该计算机的机器名称。计算机将需要重新加入域(或使用 Reset-ComputerMachinePassword 和域管理员凭据重置其密码)。如果域控制器无法与 PDC 仿真器通信,情况也是如此。这将是导致计算机帐户登录失败的最常见错误类型。第二个最常见的可能是由于计算机在无法联系 DC 时被重命名,更改计算机的登录用户名而不更新 AD。

除了密码过期或计算机重命名之外,您还必须开始更深入地寻找根本原因。这些很可能是 Kerberos 协商错误,由服务尝试进行身份验证以执行某些操作引起。请注意,身份验证错误 不一定 一定会在服务启动时发生,并且可能会在服务被访问或被另一个应用程序触发时发生。我建议查看我的 question & answer in ServerFault 关于一个服务器的 DNS 名称与其 NETBIOS 名称不匹配的示例,这导致 Kerberos 身份验证失败并回退到 NTLM。

如 ServerFault 问题所示,一旦排除了用户名和密码错误,追踪机器登录失败的根本原因可能 极其 困难。您的第一步可能应该是 enable Netlogon debug logging,然后在 netlogon 日志文件中搜索您的失败事件。您还可以在系统事件日志中搜索与服务启动失败相关的任何事件。在这两个起点之后,您基本上只能靠自己了,并且需要培养一些高级故障排除和调查技能来追踪根本原因。

最后一点,您的问题与编程或软件开发并不完全相关,因此 SuperUser or ServerFault 将来可能更适合提出此类问题。 ServerFault 面向在生产环境中工作的专业系统管理员,而 SuperUser 则更面向业余爱好者、发烧友、家庭服务器和 DIY 爱好者。