7

在試用FileSystemWatcher時,我發現它以某種方式超過了我的用戶帳戶對文件和文件夾的權限,並且會引發更改事件,其中包含有關文件和文件夾中發生更改的信息,甚至無法訪問。FileSystemWatcher超越文件系統權限

我有兩個問題:

1)爲什麼會發生這種情況?
2)這是AD配置中的問題嗎?我如何解決它 ?
3)有什麼辦法可以收集這些文件,甚至創建一個FileSystemInfo文件來獲得更多關於這些文件的信息(不僅僅是對它們所做的修改)?

至於我試過,只有FileSystemWatcher的免疫的限制,我不能在上面運行的任何其他東西,這裏是什麼,我已經試過清單:

  • File.Exists
  • Directory.Exists
  • 上找到的文件
  • FileInfo的實例
  • DirectoryInfo的實例上找到的文件
  • File.Copy
  • File.Delete

更新:試過黑爾格的解決方案,事端類似於他sugested,不通過Windows的API,而是通過命令提示符:

ROBOCOPY/B \ MYSERVER \文件夾C: \ somefolder

有史以來最好的命令名稱。

您可以通過robocopy檢查/ B代表「備份模式」,這是helge的建議,這將導致此安全性超出。

我會嘗試一切,我想知道究竟是什麼原因導致FileSystemWatcher能夠觀看我無權打開的文件夾。知道爲什麼,我想學習如何阻止FileSystemWatcher,以及如何收集找到的文件。

如果我使用我的個人帳戶,我會進行調查。請,有人可以幫我嗎?我會寫一篇關於解決方案的博客文章,以及其他可能有助於任何人在未來也有同樣疑問的東西。

+0

文件系統權限與Active Directory無關。它們只是本地系統的一項功能。 – 2011-01-07 15:01:06

+2

@Helge我不同意。如果我拒絕某個組或用戶的文件夾權限,我不希望他們以任何方式查看我在此文件夾上執行的任何操作。對我來說這是一個漏洞,一個bug,應該修復。 – DevexPP 2011-01-07 16:05:21

回答

4

根據this answer on SO,FileSystemWatcher基於API函數ReadDirectoryChangesW。如果那是真的,它解釋了你所見證的行爲 - 以及爲什麼這不是安全漏洞。

As documented on MSDN ReadDirectoryChangesW需要特權SeBackupPrivilege(由參數FILE_FLAG_BACKUP_SEMANTICS向CreateFile請求)。如果在該模式下打開文件,則返回的句柄授予對文件的完全訪問權限,從而規避訪問檢查。此功能專爲backup programs而設計,無論權限如何,都需要能夠讀取磁盤上的所有內容。

這不是一個安全漏洞,因爲這個工作所需的特權SeBackupPrivilege默認僅授予管理員。管理員,實際上任何人都可以通過物理方式訪問一臺機器,它們總是能夠控制和讀取每個文件 - 除非它是加密的。

至於哪些功能可用於在備份模式下訪問文件:至少有用於讀取的BackupRead。使用FindFirstFile/FindNextFile很容易枚舉。當然這需要真正的Windows API,而不是殘缺的.NET文件系統功能。