Automatische Weitergabe vererbbarer ACEs

Die Funktionen SetNamedSecurityInfo und SetSecurityInfo unterstützen die automatische Weitergabe vererbbarer Zugriffssteuerungseinträge (ACEs). Wenn Sie beispielsweise diese Funktionen verwenden, um ein vererbbares ACE zu einem Verzeichnis in einem NTFS hinzuzufügen, wendet das System den ACE entsprechend auf die Zugriffssteuerungslisten (ACLs ) aller vorhandenen Unterverzeichnisse oder Dateien an.

Direkt angewendete ACEs haben Vorrang vor geerbten ACEs. Das System implementiert diese Rangfolge, indem direkt angewendete ACEs vor geerbten ACEs in einer diskretionären Zugriffssteuerungsliste (DACL) platziert werden. Wenn Sie die Funktionen SetNamedSecurityInfo und SetSecurityInfo aufrufen, um die Sicherheitsinformationen eines Objekts festzulegen, legt das System das aktuelle Vererbungsmodell für die ACLs aller Objekte in der Hierarchie unterhalb des Zielobjekts fest. Für Objekte, die in das aktuelle Vererbungsmodell konvertiert wurden, werden die SE_DACL_AUTO_INHERITED und SE_SACL_AUTO_INHERITED Bits im Steuerelementfeld der Sicherheitsbeschreibung des Objekts festgelegt.

Wenn Sie einen neuen Sicherheitsdeskriptor erstellen, der das aktuelle Vererbungsmodell widerspiegelt, wird darauf geachtet, dass die Semantik des Sicherheitsdeskriptors nicht geändert wird. Daher werden Zulassen und Verweigern von ACEs nie in Beziehung zueinander verschoben. Wenn eine solche Bewegung erforderlich ist (damit instance alle nicht inheritierten ACEs an der Vorderseite einer ACL platzieren kann), wird die ACL als geschützt markiert, um die semantische Änderung zu verhindern.

Das System verwendet die folgenden Regeln, wenn geerbte ACEs an untergeordnete Objekte weitergegeben werden:

  • Wenn ein untergeordnetes Objekt ohne DACL einen ACE erbt, ist das Ergebnis ein untergeordnetes Objekt mit einer DACL, die nur den geerbten ACE enthält.
  • Wenn ein untergeordnetes Objekt mit einer leeren DACL einen ACE erbt, ist das Ergebnis ein untergeordnetes Objekt mit einer DACL, das nur den geerbten ACE enthält.
  • Wenn Sie ein vererbbares ACE aus einem übergeordneten Objekt entfernen, entfernt die automatische Vererbung alle Kopien des ACE, die von untergeordneten Objekten geerbt wurden.
  • Wenn die automatische Vererbung zum Entfernen aller ACEs aus der DACL eines untergeordneten Objekts führt, verfügt das untergeordnete Objekt über eine leere DACL anstelle einer DACL.

Diese Regeln können das unerwartete Ergebnis der Konvertierung eines Objekts ohne DACL in ein Objekt mit einer leeren DACL haben. Ein Objekt ohne DACL ermöglicht vollzugriff, aber ein Objekt mit einer leeren DACL lässt keinen Zugriff zu. Als Beispiel dafür, wie diese Regeln eine leere DACL erstellen können, nehmen Sie an, Sie fügen dem Stammobjekt einer Struktur von Objekten ein vererbbares ACE hinzu. Die automatische Vererbung verteilt den vererbbaren ACE an alle Objekte in der Struktur. Untergeordnete Objekte, die ohne DACL gestartet wurden, verfügen jetzt über eine DACL mit dem geerbten ACE. Wenn Sie das vererbbare ACE aus dem Stammobjekt entfernen, gibt das System die Änderung automatisch an die untergeordneten Objekte weiter. Untergeordnete Objekte, die mit keiner DACL (vollzugriff ermöglichen) gestartet wurden, verfügen jetzt über eine leere DACL (ohne Zugriff).

Um sicherzustellen, dass ein untergeordnetes Objekt ohne DACL nicht von vererbbaren ACEs betroffen ist, legen Sie das flag SE_DACL_PROTECTED im Sicherheitsdeskriptor des Objekts fest.

Informationen zum ordnungsgemäßen Erstellen einer DACL finden Sie unter Erstellen einer DACL.