Compartilhar via


Propagação automática de ACEs herdáveis

As funçõesSetNamedSecurityInfo eSetSecurityInfo dão suporte à propagação automática de entradas de controle de acesso herdáveis (ACEs). Por exemplo, se você usar essas funções para adicionar um ACE herdável a um diretório em um NTFS, o sistema aplicará o ACE conforme apropriado às listas de controle de acesso (ACLs) de quaisquer subdiretórios ou arquivos existentes.

AcEs aplicados diretamente têm precedência sobre ACEs herdados. O sistema implementa essa precedência colocando ACEs diretamente aplicadas à frente de ACEs herdadas em uma lista de controle de acesso discricionário (DACL). Quando você chama as funções SetNamedSecurityInfo e SetSecurityInfo para definir as informações de segurança de um objeto, o sistema impõe o modelo de herança atual nas ACLs de todos os objetos na hierarquia abaixo do objeto de destino. Para objetos que foram convertidos no modelo de herança atual, os bits SE_DACL_AUTO_INHERITED e SE_SACL_AUTO_INHERITED são definidos no campo de controle do descritor de segurança do objeto.

Quando você cria um novo descritor de segurança que reflete o modelo de herança atual, é necessário cuidado para não alterar a semântica do descritor de segurança. Dessa forma, permitir e negar ACEs nunca são movidos em relação uns aos outros. Se esse movimento for necessário (por exemplo, para colocar todas as ACEs não herdadas na frente de uma ACL), a ACL será marcada como protegida para evitar a alteração semântica.

O sistema usa as seguintes regras ao propagar ACEs herdados para objetos filho:

  • Se um objeto filho sem DACL herdar um ACE, o resultado será um objeto filho com uma DACL que contém apenas o ACE herdado.
  • Se um objeto filho com uma DACL vazia herdar um ACE, o resultado será um objeto filho com uma DACL que contém apenas o ACE herdado.
  • Se você remover um ACE herdável de um objeto pai, a herança automática removerá todas as cópias do ACE herdadas por objetos filho.
  • Se a herança automática resultar na remoção de todas as ACEs do DACL de um objeto filho, o objeto filho terá um DACL vazio em vez de nenhum DACL.

Essas regras podem ter o resultado inesperado da conversão de um objeto sem DACL em um objeto com uma DACL vazia. Um objeto sem DACL permite acesso total, mas um objeto com um DACL vazio não permite acesso. Como exemplo de como essas regras podem criar um DACL vazio, suponha que você adicione um ACE herdável ao objeto raiz de uma árvore de objetos. A herança automática propaga o ACE herdável para todos os objetos na árvore. Objetos filho que começaram sem DACL agora têm um DACL com o ACE herdado. Se você remover o ACE herdável do objeto raiz, o sistema propagará automaticamente a alteração para os objetos filho. Objetos filho que começaram sem DACL (permitindo acesso completo) agora têm um DACL vazio (sem permitir acesso).

Para garantir que um objeto filho sem DACL não seja afetado por ACEs herdáveis, defina o sinalizador SE_DACL_PROTECTED no descritor de segurança do objeto.

Para obter informações sobre como criar corretamente uma DACL, consulte Criando umDACL.