Почему Windows обрабатывает все дочерние объекты NTFS при изменении родительского ACL?

10

Почему Windows обрабатывает все дочерние объекты NTFS при изменении родительского ACL?

Я ожидал бы такого поведения, если бы я установил флажок «Заменить все разрешения дочернего объекта ...», но даже если этот флажок не установлен, Windows будет обрабатывать все дочерние элементы.

Corey
источник
@Ben Это не выполняется оболочкой, поскольку каскад унаследованных разрешений должен быть реплицирован на все дочерние объекты с включенным наследованием, поэтому это необходимо делать даже при непосредственном вызове Windows API. К вашему сведению: разрешения реплицируются по соображениям производительности.
Андреас

Ответы:

10

В Windows права доступа к файлам не наследуются динамически. То есть, когда предпринимается попытка открыть файл, Windows смотрит только на ACL этого файла, а не на ACL каталогов в дереве, содержащем файл. Это означает, что когда вы изменяете ACL каталога, Windows должна немедленно обновить разрешения всех файлов и подкаталогов в соответствующем каталоге.

В Windows параметр наследования в ACL не указывает какую-либо форму динамического наследования. Это просто флаг, указывающий, что при изменении ACL родительского каталога все файлы и подкаталоги в дереве, для которых установлен флаг наследования, также должны быть обновлены.

Те из нас, кто достаточно взрослый, чтобы помнить, что Novell NetWare помнит, это было одним из больших отличий от NetWare, потому что в NetWare наследование разрешений является (было?) Динамическим. В то время было много споров о том, какой подход был лучше, хотя история сделала вопрос спорным. Динамические ACL требуют, чтобы ОС проверяла ACL каждого родительского каталога во время попытки открыть файл, но изменение ACL происходит быстро. В Windows открытие файла требует проверки только одного ACL, но, как вы обнаружили, это означает, что изменение ACL каталога может быть медленным.

Джон Ренни
источник
1
Это имеет смысл. ACL читаются намного больше, чем пишутся, поэтому имеет смысл кэшировать «унаследованное значение» для более быстрого доступа к чтению за счет большей сложности в более редком случае использования записи.
Александр - Восстановить Монику
@ Александр: Я не понимаю, почему эта сложность должна быть раскрыта конечному пользователю. Почему бы не лгать и не говорить конечному пользователю «это динамично», а кешировать все внутри?
Кевин
@Kevin - потому что для распространения разрешений может потребоваться некоторое время, и в этот период времени вы не сможете обеспечить соблюдение разрешений, как вы ожидаете?
Давидбак
13

Любой дочерний объект, который настроен на наследование своих разрешений от родительского объекта, должен быть обработан. Явно определенные разрешения для дочерних объектов не затрагиваются.

Опция «Заменить разрешения для всех дочерних объектов» будет не только распространять разрешения на все дочерние объекты, но также будет удалять и заменять любые явно определенные разрешения для всех дочерних объектов.

Appleoddity
источник
5

По умолчанию дочерние папки наследуют разрешения от родительской папки. Предполагая область действия по умолчанию при добавлении / изменении разрешений для родительской папки (этой папки, подпапок и файлов), все дочерние папки будут обновлены, чтобы отразить изменение разрешений в родительской папке.

Флажок, на который вы ссылаетесь, является «одноразовой» операцией, которая удаляет все явно определенные разрешения для всех дочерних папок, заменяет их наследуемыми разрешениями от родительских и повторно включает наследование разрешений для дочерних папок.

joeqwerty
источник