Condividi tramite


Propagazione automatica degli ACL ereditabili

Le funzioni SetNamedSecurityInfo e SetSecurityInfo supportano la propagazione automatica delle voci di controllo di accesso ereditabili (ACEs). Ad esempio, se si usano queste funzioni per aggiungere un ACE ereditabile a una directory in un NTFS, il sistema applica l'ACE come appropriato agli elenchi di controllo di accesso (ACL) di qualsiasi sottodirectory o file esistenti.

Gli ACL applicati direttamente hanno la precedenza sugli ACL ereditati. Il sistema implementa questa precedenza posizionando gli ACL direttamente applicati prima degli AES ereditati in un elenco di controllo di accesso discrezionale (DACL). Quando si chiamano le funzioni SetNamedSecurityInfo e SetSecurityInfo per impostare le informazioni di sicurezza di un oggetto, il sistema impone il modello di ereditarietà corrente sugli elenchi di controllo di accesso di tutti gli oggetti della gerarchia sotto l'oggetto di destinazione. Per gli oggetti convertiti nel modello di ereditarietà corrente, i bit di SE_DACL_AUTO_INHERITED e SE_SACL_AUTO_INHERITED vengono impostati nel campo controllo del descrittore di sicurezza dell'oggetto.

Quando si compila un nuovo descrittore di sicurezza che riflette il modello di ereditarietà corrente, è necessario non modificare la semantica del descrittore di sicurezza. Di conseguenza, consentire e negare gli ACL non vengono mai spostati in relazione tra loro. Se tale spostamento è necessario (ad esempio per inserire tutti gli ACL non nonriti davanti a un ACL), l'ACL viene contrassegnato come protetto per impedire la modifica semantica.

Il sistema usa le regole seguenti durante la propagazione degli ACL ereditati agli oggetti figlio:

  • Se un oggetto figlio senza daCL eredita un ACE, il risultato è un oggetto figlio con un'elenco di controllo daCL contenente solo l'ACE ereditato.
  • Se un oggetto figlio con un daCL vuoto eredita un ACE, il risultato è un oggetto figlio con un daCL che contiene solo l'ACE ereditato.
  • Se si rimuove un ACE ereditabile da un oggetto padre, l'ereditarietà automatica rimuove tutte le copie dell'ACE ereditate dagli oggetti figlio.
  • Se l'ereditarietà automatica comporta la rimozione di tutti gli ACL dall'elenco dati di un oggetto figlio, l'oggetto figlio ha un daCL vuoto anziché nessun daCL.

Queste regole possono avere il risultato imprevisto della conversione di un oggetto senza daCL in un oggetto con un daCL vuoto. Un oggetto senza daCL consente l'accesso completo, ma un oggetto con un daCL vuoto non consente l'accesso. Come esempio di come queste regole possono creare un daCL vuoto, si supponga di aggiungere un ACE ereditabile all'oggetto radice di un albero di oggetti. L'ereditarietà automatica propaga l'ACE ereditabile a tutti gli oggetti nell'albero. Gli oggetti figlio che iniziano senza daCL ora dispongono di un daCL con l'ACE ereditato. Se si rimuove l'ACE ereditabile dall'oggetto radice, il sistema propaga automaticamente la modifica agli oggetti figlio. Gli oggetti figlio che iniziano senza daCL (consentendo l'accesso completo) ora dispongono di un daCL vuoto (che non consente l'accesso).

Per assicurarsi che un oggetto figlio senza daCL non sia interessato dagli ACL ereditabili, impostare il flag di SE_DACL_PROTECTED nel descrittore di sicurezza dell'oggetto.

Per informazioni su come creare correttamente un'elenco dati, vedere Creazione di un'elenco dati.