Propagation automatique des AE hérités

Les fonctions SetNamedSecurityInfo et SetSecurityInfo prennent en charge la propagation automatique des entrées de contrôle d’accès (AE) héritées. Par exemple, si vous utilisez ces fonctions pour ajouter un ACE pouvant être 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 (ACL) de tous les sous-répertoires ou fichiers existants.

Les ACÉ directement appliqués sont prioritaires sur les ACÉ hérités. Le système implémente cette priorité en plaçant les ACÉ directement appliqués avant les ACÉ hérités 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 sur les listes de contrôle d’accès 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 créez un nouveau descripteur de sécurité qui reflète le modèle d’héritage actuel, veillez à ne pas modifier la sémantique du descripteur de sécurité. Par conséquent, les AE d’autorisation et de refus ne sont jamais déplacés les uns par rapport aux autres. Si un tel mouvement est nécessaire (pour instance de placer tous les ACÉ non intégrés à l’avant d’une liste de contrôle d’accès), l’ACL 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 d’AE hérités à des objets enfants :

  • Si un objet enfant sans DACL hérite d’un ACE, le résultat est un objet enfant avec un 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 un DACL qui contient uniquement l’ACE hérité.
  • Si vous supprimez un ACE pouvant être hérité d’un objet parent, l’héritage automatique supprime toutes les copies de l’ACE héritées par les objets enfants.
  • Si l’héritage automatique entraîne la suppression de tous les ACA de la liste DACL d’un objet enfant, l’objet enfant a une liste DACL vide plutôt qu’aucune liste DACL.

Ces règles peuvent avoir le résultat inattendu de la conversion d’un objet sans DACL en objet avec un DACL vide. Un objet sans DACL autorise l’accès total, mais un objet avec un DACL vide n’autorise aucun accès. À titre d’exemple de la façon dont ces règles peuvent créer une liste DACL vide, supposons que vous ajoutiez un ACE pouvant être hérité à 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 commencé avec aucun DACL ont désormais un DACL avec l’ACE hérité. Si vous supprimez l’ACE pouvant être hérité de l’objet racine, le système propage automatiquement la modification aux objets enfants. Les objets enfants qui ont commencé avec aucune LISTE de contrôle d’accès (autorisant l’accès total) ont désormais un DACL vide (n’autorisant aucun accès).

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

Pour plus d’informations sur la façon de créer correctement une liste de contrôle d’accès d’accès, consultez Création d’une liste de contrôle d’accès.