怎么排查Windows系统故障?

  • 阅读量:36  发布时间:   

  • 标签:
  • window

这篇文章主要是讲一讲,Window系统上的一些排查思路。

c822b7c3e7a42820c9bec920.png

排查步骤

windows系统和其他系统的排查,基本上是大同小异,有三个步骤。

第一,和用户来沟通。这个阶段里面的我们能向用户了解背景的信息,包括这个问题周边的一些情况。那么当我们没有思路的时候,回过头来看这些信息可能会是一些关键性的信息,会帮到我们。

第二个阶段就是通过一些对比测试来做一些区分。这些区分会帮助我们定位到这个问题大概在哪一个部分。

第三个阶段就是抓起一些日志。通过日志来看这个问题具体是发生在哪个点,从而找到问题的根本原因。

具体案例

下面我们来分析一个具体的案例。用户在云上有一套自建的域即Windows AD。每当他去登录这个域中的一台计算机的时候,就会发生自动注销的情况,也就说登陆进去以后,刚刚看到桌面,这个机器就自动注销了。

和用户进行沟通,了解背景的一些情况,这个用户告诉了我们两点信息。第一点就是这套域已经存在很久了,但是目前这个用户刚刚接手,所以他并不清楚最近有什么样的更改。第二点就是这个问题仅仅发生在这个域的帐号下。

这两点信息就给了我们一些线索。第一,由于这是存在很久的一套域环境,而这个用户刚刚接手,他可能不清楚有些配置背后的用意。第二,根据用户描述可能本地帐号是没有问题的。

接下来需要我们通过具体的对比措施来定位。我们使用本地管理员账号来登录这个机器,事实证明本地管理员账号是可以登录这个机器的,也就验证了这个问题仅仅和域或者域帐号有关。

第三步抓取日志分析日志。使用Process Monitor,这是Windows系统排查问题经常使用的工具。由于域账号是无法登陆的,所以我们只能使用本地账号或者本地的管理员账号来登录抓取日志。

首先用本地管理员的账号去登录机器,启动Process Monitor,然后用域账号去重现这个问题,直到这个机器自动注销。然后回到本地管理员帐号的会话中,分析日志。

怎么样从海量的信息里面提取出我们需要的信息呢?我们可以用首先用Process Monitor里面的一个特性,点击Tool菜单,选择Process Tree,他可以列出这个系统在这段时间内运行过的所有进程。

d729db87ae479d36b04b719e.png

这张图里面,我们可以看到在userinit.exe这个进程下,运行了一个logoff.exe进程,从名字来讲,这是非常值得怀疑的一个进程。双击一下这个进程,我们就可以得到这个进程的具体的可执行文件的位置。

e48062ceb0d05a54218e6c34.png

它在C盘下system32中,使用这个命令可以用来来注销系统。也就是说,我们在这个命令行里面,直接执行这个可执行文件,我们的系统就会被注销掉。

所以我们就找到了原因,在登陆的过程中,执行了logoff.exe导致这个系统被注销。

为什么logoff.exe会被调用?我们回过头去再看一看Process Monitor。系统中大部分的配置都是写在注册表里,Process Monitor也是抓取了所有访问注册表的这个信息和行为,我们认真的来看一下所有注册表的访问,就可以看到这样一条信息:

8c604cf9742f9884b3a5a18f.png

这条信息其实就表明了系统在访问注册表的时候,读到的值是logoff.exe。这个注册表是在用户的配置文件里,也就是说,它是和用户相关的一个特别的配置。其次,它是在Terminal Service下的,这个说明其实他仅仅是和Terminal Service或者远程调用服务相关的一个配置。最后我们看到这个键值叫做Initial Program,会发现这个注册表是控制“执行远程登录时,最初在登录时需要执行的命令”,所以当这个用户配置了logoff.exe之后,导致我们在登陆的过程中会执行命令logoff.exe,所以就产生了注销的结果。

这个配置的第一段是在Policies下面,说明这个是Windows域中主策略方面的一个配置。顺藤摸瓜我们在相应的域控上找到了这个主策略。

0db90712ef0f7f92ab707943.png

看一下这个主策略具体的情况,就可以发现这个主策略其实就是远程登陆服务提供的一个功能,在登录的时候执行一些特别的命令或者脚本,这个用户配置的就是logoff.exe,所以会出现这种问题。

所以最后的解决方法就是,把相应的这个策略禁用。


猜你喜欢

微信QQ空间QQ好友新浪微博联系客服