Partager via


Propagation automatique des AE héritantes

Les fonctions SetNamedSecurityInfo et SetSecurityInfo prennent en charge la propagation automatique des entrées de contrôle d’accès héritées (ACEs). Par exemple, si vous utilisez ces fonctions pour ajouter un ACE hérité à un répertoire dans un fichier NTFS, le système applique l’ACE en fonction des listes de contrôle d’accès des listes de contrôle d’accès (ACL) de tous les sous-répertoires ou fichiers existants.

Les AE appliquées directement ont la priorité sur les ACL héritées. Le système implémente cette priorité en plaçant les AE directement appliquées devant les AE héritées dans une liste de contrôle d’accès discrétionnaire (DACL). Lorsque vous appelez les fonctions SetNamedSecurityInfo et SetSecurityInfo pour définir les informations de sécurité d’un objet, le système impose le modèle d’héritage actuel aux ACL de tous les objets de la hiérarchie sous l’objet cible. Pour les objets qui ont été convertis en modèle d’héritage actuel, les bits SE_DACL_AUTO_INHERITED et SE_SACL_AUTO_INHERITED sont définis dans le champ de contrôle du descripteur de sécurité de l’objet.

Lorsque vous générez un descripteur de sécurité qui reflète le modèle d’héritage actuel, vous n’avez pas à modifier la sémantique du descripteur de sécurité. Par conséquent, autoriser et refuser les AE ne sont jamais déplacés par rapport à l’autre. Si un tel mouvement est nécessaire (par exemple pour placer toutes les AE non non utilisées au début d’une liste de contrôle d’accès), la liste de contrôle d’accès est marquée comme protégée pour empêcher la modification sémantique.

Le système utilise les règles suivantes lors de la propagation des AE héritées aux objets enfants :

  • Si un objet enfant sans DACL hérite d’un ACE, le résultat est un objet enfant avec une liste DACL qui contient uniquement l’ACE hérité.
  • Si un objet enfant avec une liste DACL vide hérite d’un ACE, le résultat est un objet enfant avec une liste DACL qui contient uniquement l’ACE hérité.
  • Si vous supprimez un ACE hérité d’un objet parent, l’héritage automatique supprime toutes les copies de l’ACE héritées par des objets enfants.
  • Si l’héritage automatique entraîne la suppression de toutes les ACL de la liste de contrôle d’accès d’un objet enfant, l’objet enfant a un DACL vide plutôt qu’aucun DACL.

Ces règles peuvent avoir le résultat inattendu de la conversion d’un objet sans DACL en objet avec une liste DACL vide. Un objet sans DACL autorise l’accès complet, mais un objet avec une liste DACL vide n’autorise aucun accès. Par exemple, comme exemple de la façon dont ces règles peuvent créer une liste DACL vide, supposons que vous ajoutez un ACE hériter à l’objet racine d’une arborescence d’objets. L’héritage automatique propage l’ACE pouvant être hérité à tous les objets de l’arborescence. Les objets enfants qui ont démarré sans DACL ont désormais une liste DACL avec l’ACE hérité. Si vous supprimez l’ACE hérité de l’objet racine, le système propage automatiquement la modification aux objets enfants. Les objets enfants qui ont démarré sans DACL (autorisant l’accès complet) ont désormais une DACL vide (autorisant l’absence d’accès).

Pour vous assurer qu’un objet enfant sans liste de contrôle d’accès n’est pas affecté par les AE héritées, définissez l’indicateur de SE_DACL_PROTECTED dans le descripteur de sécurité de l’objet.

Pour plus d’informations sur la création correcte d’une liste DACL, consultez Création d’unDACL .