我们有一个生成文件的网站,这些文件被放入一个文件夹中,并由另一个进程将文件复制到另一台服务器(不是我的设计)。
在我们的生产环境中,移动是由每分钟触发一次的计划任务执行的,该计划任务调用批处理文件,该文件调用实际移动文件的 powershell 脚本(再次强调,这不是我的设计)。
现在的问题是:
该网站在我们的 UAT 环境中的设置完全相同。文件被放入一个文件夹中,然后移动。但该框上没有计划任务,我费了好大劲才确定哪个进程实际上在移动文件。
它甚至可能不在与文件夹相同的机器上执行。您知道如何确定哪个进程正在移动文件,或者至少是哪台机器在移动文件吗?
答案1
您可以使用 SysInternals 进程监视器和过滤器来查找文件系统条目,其中包含已移动文件的路径或文件名。如果是本地进程,这应该会显示出来。如果不是本地进程,那么您将看到文件被“系统”或类似的东西移动。
不幸的是,您必须在移动时运行进程监视器,而进程监视器有点重,因此在您进行故障排除时整个服务器可能会受到影响。
如果文件被远程进程移动,您可以使用 SysInternals PsFile 或类似的实用程序来找出谁在访问它们。
SysInternals 主页:https://technet.microsoft.com/en-us/sysinternals/default
答案2
您可以通过对相关文件和目录(“文件夹”)进行安全审计日志来执行此操作。
首先,以管理员身份运行组策略 ( gpedit.msc
)。在左侧窗格中导航至计算机配置 | Windows 设置 | 安全设置 | 本地策略 | 审核策略。在右侧窗格中,将“审核对象访问”和“审核进程跟踪”都设置为在成功时启用。(失败时审核没什么意义,因为尝试访问失败不会导致移动文件!)
或者 - 如果您运行的是 Windows 7 或更高版本,您可以选择以下方式:在左窗格中,导航至计算机配置 | Windows 设置 | 安全设置 | 高级审核策略 | 系统审核策略。在“详细跟踪”下,启用“审核流程创建”以获得成功。在“对象访问”下,启用“审核文件系统”以获得成功。此方法将在您的事件日志中生成较少的虚假条目。注意:如果在“高级审核策略”下将任何内容设置为“未配置”以外的任何内容,最好也在此处进行后续更改,因为在此处和上一段中描述的不太详细的“审核策略”中进行设置可能会产生奇怪的结果。
下一步:在资源管理器中,转到移动的源目录。右键单击目录,选择“属性”,然后选择“安全”选项卡,然后单击“高级”(几乎所有有价值的东西都位于“高级”选项卡或按钮下...)。单击“审核”选项卡,然后单击“继续”,然后单击“添加”。结果对话框看起来就像将条目添加到“权限列表”的对话框,但在这种情况下,您创建的条目将确定要审核指示的操作 - 即将为它们创建审核日志条目。
对于“主体”,请使用“所有人”组。对于“类型”,您可能只希望“成功”(再次强调,失败的尝试显然不会移动任何文件)。“适用于:”选择“此文件夹、子文件和文件”。选择所有“高级权限”。
对目标目录重复此操作。
如果相关文件已存在于源目录中,您可以仅针对该文件而不是其所在的目录启用审核(但也为目标目录启用它)。
如果您在该级别启用了审核,则所有成功访问目录或文件的尝试都将反映在安全日志中。
要查看审计条目,请转到“计算机管理”、“系统工具”|“事件查看器”、“Windows 日志”,然后选择“安全日志”。将文件/目录访问的日志条目与进程创建条目关联起来。
审计条目通常需要一两分钟才能显示在事件查看器中。不要害怕多次使用刷新。
注意:“对象访问”(包括文件)的安全审计日志条目仅指示对象被访问的时间已打开用于访问,而不是实际操作的时间,也不是具体的操作。
例如:如果有人打开文件进行读写访问,则会生成审计条目。随后对文件的实际读写操作不会不是生成审计条目。而且不可能从审计日志中得知文件是否真的被写入 - 只能知道文件是以允许写入的方式打开的。要获取这些详细信息,您必须使用 Mike Nakis 描述的进程监视器。