Назад | Перейти на главную страницу

Windows: как исправить нарушение наследования разрешений?

На наших общих сетевых ресурсах у нас есть все виды нарушенного наследования разрешений.

Только один пример: папка «D: \ Shares \ PublicRelations» имеет полный доступ для групп «PublicRelations» и «HR» (обе с полным набором наследования). Но для папки «D: \ Shares \ PublicRelations \ SomeTopic» отсутствуют унаследованные разрешения для группы «HR», хотя наследование активно.

Вероятно, это произошло, когда кто-то добавил "HR" в верхнюю папку и по какой-то причине распространение не удалось.

Есть ли какой-нибудь инструмент для автоматического устранения такого рода проблем?

В идеале я бы просто назвал его с параметром «D: \ Shares». Затем он будет просматривать все каталоги и исправлять все унаследованные разрешения, если это необходимо.

В итоге я написал его на C #:

  • Получите SeBackupPrivilege и SeRestorePrivilege (позволяет пользователю читать и писать везде).
  • Перепишите путь, чтобы Windows обрабатывала длинные имена файлов (для локальных путей: префикс @ "\\? \")
  • Пройдите по дереву каталогов
  • Для каждого элемента загрузите ACL
  • Добавьте явное правило и удалите его снова. Это заставляет библиотеку думать, что ACL был изменен.
  • Напишите ACL
  • Библиотека ввода-вывода исправит проблемы с наследованием при записи неизмененного ACL.

Я также реализовал проверку, нужно ли вообще исправление. Но потребовалась некоторая работа, чтобы заставить его работать надежно:

  • Вам необходимо правильно интерпретировать флаги распространения и наследования.
  • Иногда разрешения объединяются на пути вниз, а иногда нет. В конце концов, я просто проверил, означают ли они то же самое.
  • Разберитесь со специальными разрешениями "GENERIC_ (READ | WRITE | EXECUTE | ALL)"

Он обнаружил и исправил около 40 000 ошибок в 1 миллионном файловом хранилище.

icacls <folder> /t /reset сбросит все разрешения на наследуемые по умолчанию.

Ссылка на Technet