7

Khi thử nghiệm với FileSystemWatcher, tôi đã phát hiện ra rằng nó bằng cách nào đó vượt quá quyền của tài khoản người dùng đối với tệp và thư mục và sẽ tăng sự kiện thay đổi với thông tin về những gì đã thay đổi trong tệp và thư mục mà bạn don ' t thậm chí có quyền truy cập vào.FileSystemWatcher vượt qua quyền của hệ thống tệp

Tôi có hai câu hỏi về điều đó:

1) Tại sao điều này xảy ra?
2) Đây có phải là sự cố trong cấu hình AD không? Làm thế nào để tôi sửa chữa nó ?
3) Có cách nào để thu thập các tập tin này, hoặc thậm chí tạo một FileSystemInfo của họ để có thêm thông tin về các tập tin (không chỉ những thay đổi được thực hiện trên chúng)?

Theo như tôi đã cố gắng, chỉ có miễn dịch FileSystemWatcher để những hạn chế, tôi không thể chạy bất kỳ điều khác trên nó, đây là một danh sách những gì tôi đã cố gắng:

  • File.Exists
  • Directory.Exists
  • FileInfo dụ trên các tập tin tìm thấy
  • DirectoryInfo dụ trên các tập tin tìm thấy
  • File.Copy
  • File.Delete

Cập nhật: Cố gắng giải pháp Helge, với somethin tương tự như những gì ông sugested, không thông qua api cửa sổ, nhưng qua dấu nhắc lệnh:

robocopy/B \ myserver \ thư mục c: \ somefolder

Tên lệnh tốt nhất từ ​​trước đến nay.

Bạn có thể kiểm tra thông qua robocopy/B là viết tắt của "chế độ sao lưu", đó là những gì mà helge đề xuất sẽ là nguyên nhân dẫn đến việc bảo mật này vượt qua.

Tôi sẽ thử mọi thứ, tôi muốn tìm hiểu chính xác nguyên nhân khiến FileSystemWatcher có thể xem các thư mục mà tôi không được phép mở. Biết lý do tại sao, tôi muốn tìm hiểu cả cách chặn FileSystemWatcher và cách thu thập các tệp đã tìm thấy.

Tôi muốn thực hiện khảo sát nếu tôi đã sử dụng tài khoản cá nhân của mình. Xin vui lòng ai có thể giúp tôi ? Tôi sẽ viết một bài đăng blog về giải pháp, trong số những thứ khác có thể giúp bất kỳ ai có cùng nghi ngờ trong tương lai.

+0

Quyền của hệ thống tệp không có liên quan gì đến Thư mục hoạt động. Chúng chỉ là chức năng của hệ thống cục bộ. –

+2

@Helge Tôi không đồng ý. Nếu tôi từ chối cho phép một thư mục cho một nhóm hoặc người dùng, tôi không muốn họ có thể nhìn thấy bất cứ điều gì tôi làm trên thư mục này trong bất kỳ cách nào. Đối với tôi đây là một lỗ hổng, một lỗi, và nên được cố định. – DevexPP

+0

Nhưng thực thi quyền trên hệ thống cục bộ không liên quan gì đến Active Directory. Cho dù máy có tham gia miền hay không thì có lẽ không liên quan đến vấn đề này. –

Trả lời

4

Theo this answer on SO FileSystemWatcher dựa trên chức năng API ReadDirectoryChangesW. Nếu điều đó đúng, nó giải thích hành vi mà bạn chứng kiến ​​- và tại sao đó không phải là một lỗ hổng bảo mật.

documented on MSDN ReadDirectoryChangesW cần đặc quyền SeBackupPrivilege (được yêu cầu bởi tham số FILE_FLAG_BACKUP_SEMANTICS đến CreateFile). Nếu một tệp được mở trong chế độ đó, trình xử lý được trả lại cấp quyền truy cập đầy đủ vào tệp, phá vỡ kiểm tra truy cập. Tính năng này được thiết kế cho backup programs cần phải đọc mọi thứ trên đĩa bất kể quyền.

Đây không phải là lỗ hổng bảo mật vì đặc quyền SeBackupPrivilege được yêu cầu để làm việc này theo mặc định chỉ được cấp cho quản trị viên.Quản trị viên và trên thực tế bất kỳ ai có quyền truy cập vật lý vào máy, luôn có khả năng kiểm soát và đọc mọi tệp - trừ khi tệp được mã hóa.

Có thể sử dụng chức năng nào để truy cập các tệp ở chế độ sao lưu: Có ít nhất BackupRead để đọc. Việc liệt kê có thể dễ dàng với FindFirstFile/FindNextFile. Tất nhiên điều này đòi hỏi Windows API thực, không phải là các chức năng hệ thống tập tin .NET bị tê liệt.

+0

Bạn có nói rằng FileSystemWatcher sẽ không hoạt động trong các tài khoản người dùng bị hạn chế? –

+0

Tôi không biết. Nhưng điều tôi chắc chắn là nếu nó cung cấp cho bạn thông tin về các tệp mà bạn không có quyền xem thì đặc quyền sao lưu là bắt buộc. Có thể nó chỉ sử dụng đặc quyền nếu có. –

+0

OK. Tôi sẽ kiểm tra kỹ hơn và báo cáo bất cứ điều gì tôi tìm thấy ở đây! – Marcelo

Các vấn đề liên quan