如何確定哪個進程正在移動檔案?

如何確定哪個進程正在移動檔案?

我們有一個產生檔案的網站,這些檔案被放入一個資料夾中,並由另一個將檔案複製到另一台伺服器(不是我的設計)的進程抓取。

在我們的生產環境中,移動是由每分鐘觸發的計劃任務執行的,該任務調用批次文件,該批次文件調用實際移動文件的 powershell 腳本(同樣,不是我的設計)。

現在的問題是:

網站在我們的 UAT 環境中設定相同。文件被放入資料夾中,然後移動。但該盒子上沒有計劃任務,我很難確定哪個進程實際上正在移動檔案。

它甚至可能不在與資料夾相同的電腦上執行。知道如何確定哪個進程正在移動文件,或至少是哪台機器正在執行此操作?

答案1

您可以使用 SysInternals 進程監視器和過濾器來尋找具有已移動檔案的路徑或檔案名稱的檔案系統條目。如果它是本地進程,這應該會顯示它。如果它不是本地進程,那麼您將看到檔案被「系統」或類似的東西移動。

不幸的是,您必須在移動發生時運行進程監視器,並且進程監視器有點繁重,因此在排除故障時整個伺服器可能會受到影響。

如果檔案由遠端進程移動,您可以使用 SysInternals PsFile 或一些類似的實用程式來找出誰正在存取它們。

系統內部首頁:https://technet.microsoft.com/en-us/sysinternals/default

答案2

您可以透過對相關文件和目錄(「資料夾」)進行安全審核日誌記錄來實現此目的。

首先,以管理員身分執行群組原則 ( gpedit.msc)。在左窗格中導覽至電腦設定 | Windows 設定 |安全設定|地方政策 |審計政策。在右側窗格中,將「審核物件存取」和「審核進程追蹤」設定為在成功時啟用。 (對失敗進行審核沒有多大意義,因為嘗試存取失敗不會導致文件移動!)

或者 - 如果您使用的是 Windows 7 或更高版本,您可以選擇這樣做:在左窗格中,導航到電腦配置| Windows 設定 |安全設定|高級審核政策|系統審核策略。在「詳細追蹤」下,啟用「審核流程建立」以獲得成功。在「物件存取」下,啟用「審核檔案系統」即可成功。此方法將在事件日誌中產生較少的虛假條目。注意:如果「進階審核策略」下的任何內容設定為「未配置」以外的任何內容,最好也在此處進行後續更改,如在此處和描述的不太詳細的「審核策略」中進行設定上一段中的內容可能會產生奇怪的結果。

下一步:在資源管理器中,前往移動的來源目錄。右鍵單擊目錄,選擇“屬性”,然後選擇“安全性”選項卡,然後單擊“高級”(幾乎所有有價值的內容始終位於“高級”選項卡或按鈕下...)。按一下“審核”選項卡,然後按一下“繼續”,然後按一下“新增”。生成的對話框看起來就像向“權限列表”添加條目的對話框,但在這種情況下,您創建的條目將確定要審核指示的操作 - 即,將創建審核日誌條目對於他們來說。

對於“主體”,請使用“所有人”群組。對於“類型”,您可能只想要“成功”(同樣,失敗的嘗試顯然不會移動任何檔案)。 「適用於:」選擇「此資料夾、子檔案和檔案」。選擇所有“高級權限”。

對目標目錄重複此操作。

如果相關文件已存在於來源目錄中,您可以僅針對該文件而不是其所在的目錄啟用審核(但也為目標目錄啟用審核)。

所有成功存取目錄或檔案(如果您在該層級啟用了審核)的嘗試現在都將反映在安全日誌中。

若要查看審核條目,請前往“電腦管理”、“系統工具”|“事件檢視器”、“Windows 日誌”,然後選擇“安全性日誌”。將檔案/目錄存取的日誌條目與進程建立條目相關聯。

審核條目通常需要一兩分鐘才能顯示在事件檢視器中。不要害怕使用刷新幾次。

注意:「物件存取」(包括檔案)的安全審核日誌條目僅指示物件存取的時間打開訪問的時間,而不是實際操作的時間,也不是特定的操作。

例如:如果有人開啟一個檔案進行讀寫訪問,則會產生一個審核條目。後續對檔案的實際讀取和寫入操作不是產生審計條目。並且無法從審核日誌中判斷該文件是否確實被寫入 - 只能知道它是以允許寫入的方式打開的。要獲取這些詳細信息,您必須使用 Process Monitor,如 Mike Nakis 所描述。

相關內容