Por que o Windows processa todos os objetos filho NTFS ao alterar a ACL de um pai?

10

Por que o Windows processa todos os objetos filho NTFS ao alterar a ACL de um pai?

Eu esperaria esse comportamento se tivesse marcado a caixa "Substituir todas as permissões de objeto filho ...", mas mesmo quando essa caixa é deixada desmarcada, o Windows processará todos os filhos.

Corey
fonte
@ Ben Não é feito pelo shell, porque a cascata de permissões herdadas deve ser replicada para todos os objetos filhos com a herança habilitada, portanto, isso deve ser feito mesmo ao chamar diretamente a API do Windows. FYI: as permissões são replicadas por motivos de desempenho.
Andreas

Respostas:

10

No Windows, as permissões de arquivo não são herdadas dinamicamente. Ou seja, quando é feita uma tentativa de abrir um arquivo, o Windows examina apenas a ACL desse arquivo e não as ACLs dos diretórios na árvore que contém o arquivo. Isso significa que, quando você altera a ACL de um diretório, o Windows precisa atualizar imediatamente as permissões de todos os arquivos e subdiretórios no diretório afetado.

No Windows, a configuração de herança em uma ACL não indica nenhuma forma de herança dinâmica. É apenas um sinalizador para indicar que, quando a ACL de um diretório pai é modificada, todos os arquivos e subdiretórios na árvore que possuem o sinalizador de herança também devem ser atualizados.

Aqueles entre nós com idade suficiente para lembrar o Novell NetWare lembrarão que essa foi uma das grandes diferenças do NetWare, porque no NetWare a herança de permissões é (foi?) Dinâmica. Houve muito debate na época sobre qual abordagem era melhor, embora a história tenha discutido a questão. As ACLs dinâmicas exigem que o sistema operacional verifique as ACLs de cada diretório pai no momento em que é feita uma tentativa de abrir o arquivo, mas a alteração das ACLs é rápida. No Windows, o arquivo de abertura requer que apenas uma única ACL seja verificada, mas como você descobriu, isso significa que a alteração de um diretório da ACL pode ser lenta.

John Rennie
fonte
1
Isso faz todo o sentido. As ACLs são lidas muito mais do que gravadas, portanto, faz sentido armazenar em cache o "valor herdado" para acesso de leitura mais rápido, com o custo de mais complexidade no caso de uso de gravação mais raro.
Alexander - Restabelecer Monica
@ Alexander: O que não entendo é por que essa complexidade precisa ser exposta ao usuário final. Por que não mentir e dizer ao usuário final "é dinâmico", mas armazenar em cache as coisas internamente?
Kevin
@ Kevin - porque pode levar algum tempo para propagar permissões e, nesse período, a imposição de permissões pode não acontecer como o esperado?
Davidbak
13

Qualquer objeto filho configurado para herdar suas permissões do objeto pai precisará ser processado. Permissões explicitamente definidas nos objetos filho não são afetadas.

A opção “Substituir permissões em todos os objetos filho” não propagará apenas as permissões para todos os objetos filhos, mas também removerá e substituirá quaisquer permissões definidas explicitamente em todos os objetos filhos.

Appleoddity
fonte
5

Por padrão, as pastas filho herdam as permissões da pasta pai. Assumindo o escopo padrão ao adicionar / modificar permissões na pasta pai (esta pasta, subpastas e arquivos), todas as pastas filho serão atualizadas para refletir as permissões alteradas no pai.

A caixa de seleção a que você está se referindo é uma operação "única" que remove todas as permissões definidas explicitamente em todas as pastas filho e as substitui por permissões herdáveis ​​do pai e reativa a herança de permissões nas pastas filho.

joeqwerty
fonte