FileSystemWatcher превосходит разрешения файловой системы - PullRequest
7 голосов
/ 07 января 2011

Экспериментируя с FileSystemWatcher, я обнаружил, что он каким-то образом превосходит разрешения моей учетной записи для файлов и папок и будет вызывать события изменений с информацией об изменениях в файлах и папках, к которым у вас даже нет доступа.

У меня есть два вопроса по этому поводу:

1) Почему это происходит?
2) Это проблема в конфигурации AD?как это исправить?
3) Есть ли способ собрать эти файлы или даже создать из них FileSystemInfo, чтобы получить больше информации о файлах (а не только об изменениях, внесенных в них)?

Насколько я пытался, только FileSystemWatcher защищен от ограничений, я не могу запустить что-либо другое, вот список того, что я пробовал:

  • File.Exists
  • Directory.Exists
  • Экземпляр FileInfo в найденных файлах
  • Экземпляр DirectoryInfo в найденных файлах
  • File.Copy
  • File.Delete

Обновление : решение пробного хелга, с чем-то похожим на то, что он предложил, не через API Windows, а через командную строку:

robocopy / B \ myserver \ folder c: \ somefolder

Лучшее из когда-либо названных команд.

С помощью robocopy вы можете проверить, что / B означает «режим резервного копирования».Хелге предположил, что это может стать причиной превышения этой безопасности.

Я попробую что-нибудь, я хочу выяснить, что именно заставляет FileSystemWatcher просматривать папки, у которых нет разрешения на открытие.Зная, почему, я хочу узнать, как блокировать FileSystemWatcher, и как собирать найденные файлы.

Я бы провел опрос, если бы был с моей личной учетной записью.Пожалуйста, кто-нибудь может мне помочь?Я напишу в блоге об этом решении, среди прочего, что может помочь любому, кто сомневается в будущем.

1 Ответ

4 голосов
/ 07 января 2011

Согласно этому ответу на SO FileSystemWatcher основан на функции API ReadDirectoryChangesW .Если это правда, это объясняет поведение, свидетелем которого вы стали, и почему это не дыра в безопасности.

Поскольку задокументировано в MSDN ReadDirectoryChangesW требует привилегии SeBackupPrivilege (которая запрашивается параметром FILE_FLAG_BACKUP_SEMANTICS).Создать файл).Если файл открывается в этом режиме, возвращаемый дескриптор предоставляет полный доступ к файлу, обходя проверки доступа.Эта функция предназначена для программ резервного копирования , которые должны иметь возможность читать все на диске независимо от разрешений.

Это не дыра в безопасности, поскольку привилегия SeBackupPrivilege , котораятребуется для того, чтобы это работало, по умолчанию предоставляется только администраторам.Администраторы и фактически любой, кто имеет физический доступ к машине, всегда могут взять под контроль и прочитать каждый файл - если он не зашифрован.

Какие функции можно использовать для доступа к файлам в режиме резервного копирования:Есть хотя бы BackupRead для чтения.Перечисление легко возможно с FindFirstFile / FindNextFile.Конечно, для этого требуется настоящий Windows API, а не поврежденные функции файловой системы .NET.

...