Zugriffssteuerungslisten (ZSLs) / Access Control Lists (ACLs): Management der Wiederherstellung von großen Datenmengen

Beim Umgang mit Dateien und/oder Ordnern kommt es nicht nur auf den Inhalt an. Die Dateien/Ordner können auch andere wertvolle Informationen enthalten, die sorgfältig behandelt werden müssen. Das merkt man (hoffentlich nicht auf schmerzhafte Art und Weise) beim Wiederherstellen von Dateien, besonders wenn Zugriffssteuerungslisten (ZSLs) / Access Control Lists (ACLs) kopiert werden müssen. Es kann aber auch bei der Überprüfung des Zugriffs einer Entität auf Dateien/Ordner oder der Berechtigungen einer Datei/eines Ordners auffallen.

Bei der Suche nach fertigen Lösungen für unsere internen auf Zugriffssteuerungslisten (ZSLs) / Access Control Lists (ACLs) bezogenen Aufgaben haben wir festgestellt, dass es keine einzige App gibt, die das tut, was wir brauchen. Wir haben daher eine Reihe von Mechanismen entwickelt, die es uns ermöglichen, die Zugriffsrechte der Originaldatei/des Originalordners zu lesen und sie auf die Kopierdatei/den Kopierordner zu replizieren. Obwohl dies kein Werkzeug ist, das wir einfach auf den Markt bringen können, sollten die Grundsätze und der Arbeitsablauf helfen, wenn Sie mit den gleichen Problemen zu kämpfen haben.

Wenn Sie Systemadministrator, Sicherheitsmanager oder Backup-Mitarbeiter sind oder einfach nur mit einem hochvolumigen/komplexen System von Dateien/Ordnern zu kämpfen haben, auf das ein ständig wechselnder Anwenderkreis zugreift – willkommen in unserem Club! Und bitte lesen Sie weiter.

Intro

Was also sind Zugriffssteuerungslisten (ZSLs) / Access Control Lists (ACLs)? In geteilten Umgebungen, in denen viele Benutzer und Gruppen auf Dateien/Ordner zugreifen dürfen, kann die Definition der spezifischen Rechte ziemlich schwierig sein.

Im Windows-Ökosystem haben die Datei-/Ordnerrechte einen generischen Namen: Zugriffssteuerungslisten (ZSLs) / Access Control Lists (ACLs). Sie sind eigentlich nicht nur Listen, sondern ganze Bäume von Rechten, die von einer Gruppe auf ihre Mitglieder, die einzelne Benutzer oder Gruppen sein können, übertragen werden.

In der Microsoft-Dokumentation werden die verschiedenen auf Zugriffssteuerungslisten (ZSLs) / Access Control Lists (ACLs) bezogenen Elemente folgendermaßen definiert:

  • Eine Zugriffs Steuerungs Liste (Access Control List , ACL) ist eine Liste von Zugriffs Steuerungs Einträgen (Access Control Entries , ACE). Jeder ACE in einer ACL bezeichnet einen Vertrauensnehmer und gibt die Zugriffsrechte an, die dem Vertrauensnehmer gewährt, verweigert oder im Hinblick auf den Vertrauensnehmer überwacht werden. Die Sicherheits Beschreibung für ein Sicherungs fähiges Objekt kann zwei Arten von ACLs enthalten: eine DACL und eine SACL.
  • Eine freigegebene Zugriffs Steuerungs Liste (DACL) identifiziert die Vertrauens nehmer, denen der Zugriff auf ein Sicherungs fähiges Objekt gestattet oder verweigert wird. Wenn ein Prozess versucht, auf ein Sicherungs fähiges Objekt zuzugreifen, prüft das System die ACEs in der DACL des Objekts, um zu bestimmen, ob Ihnen Zugriff gewährt werden soll. Wenn das Objekt keine DACL hat, gewährt das System vollen Zugriff auf alle. Wenn die DACL des Objekts keine ACEs hat, verweigert das System alle Zugriffsversuche auf das Objekt, da die DACL keine Zugriffsrechte zulässt. Das System überprüft die ACEs nacheinander, bis ein oder mehrere ACEs gefunden werden, die alle angeforderten Zugriffsrechte zulassen, oder bis eine der angeforderten Zugriffsrechte verweigert wird. […]
  • Eine System Zugriffs Steuerungs Liste (SACL) ermöglicht Administratoren das Protokollieren von Zugriffsversuchen auf ein gesichertes Objekt. Jeder ACE gibt die Arten von Zugriffsversuchen durch einen angegebenen Vertrauens nehmer an, die bewirken, dass das System einen Datensatz im Sicherheits Ereignisprotokoll generiert. Ein ACE in einer SACL kann Überwachungsdaten Sätze generieren, wenn ein Zugriffs Versuch fehlschlägt, wenn er erfolgreich ist oder beides. Weitere Informationen zu SACLs finden Sie unter Audit Generation and SACL Access Right.
  • Ein Vertrauens nehmer ist das Benutzerkonto, das Gruppenkonto oder die Anmelde Sitzung , auf die ein Zugriffs Steuerungs Eintrag angewendet wird. Jeder ACE in einer Zugriffs Steuerungs Liste(Access Control List , ACL) verfügt über eine Sicherheits -ID (SID), die einen Vertrauens nehmer identifiziert.

Wenn das kompliziert aussieht, lassen Sie es uns vereinfachen: „Zugriffssteuerungslisten (ZSLs) / Access Control Lists (ACLs) definieren, wer welche Art von Zugriff auf eine Datei/einen Ordner hat.

Zugriffssteuerungslisten (ZSLs) / Access Control Lists (ACLs): Wer hat Zugang?

Lassen Sie uns also über diesen „Wer“ sprechen. Für einen privaten Benutzer ist „Wer“ normalerweise gleich „Ich“. Aber für geteilte Umgebungen, in denen bestimmte Informationen nur für bestimmte Benutzer sichtbar/bearbeitbar sein sollen, kann es kompliziert werden:

  • „Wer“ könnte ein einzelner Benutzer oder eine Gruppe sein.
  • Eine Gruppe könnte eine Liste von einzelnen Benutzern und/oder eine Liste von Gruppen sein.

Im Windows-Betriebssystem gibt es keine Einschränkungen, was das Definieren von Gruppen und Gruppenhierarchien angeht, also achten Sie auf die zirkuläre Indizierung.

Zugriffssteuerungslisten (ZSLs) / Access Control Lists (ACLs): Welche Art von Zugriff?

Der „Welche Art von Zugriff“-Teil ist komplizierter. Auf den ersten Blick geht es um den Lesezugriff, den Schreibzugriff usw. – aber es wird noch detaillierter als das.

Zunächst noch einmal die Windows-Dokumentation: „Das System vergleicht den Treuhänder in jedem ACE mit den im Zugriffs Tokendes Threads identifizierten Treuhändern. Ein Zugriffs Token enthält Sicherheits -IDs (SIDs), die den Benutzer und die Gruppenkonten identifizieren, zu denen der Benutzer gehört.“

„Was“ der Benutzer oder die Gruppe mit der Datei/dem Ordner tun darf, wird also entweder auf Datei-/Ordnerebene definiert oder vom übergeordneten Ordner übernommen, oder beides. Wenn wir z. B. einige Rechte für einen übergeordneten Ordner haben und die Zugriffssteuerungsliste seiner untergeordneten Datei nicht geändert wird, um diese Rechte zu ändern, dann behalten wir die gleichen Rechte für den Ordner und die Datei. Wenn die Datei jedoch einen anderen Satz von Rechten hat (d. h. eine „unterbrochene Rechteübernahme“), dann werden die neuen Rechte übernommen.

Spezifische Rechte der Zugriffssteuerungslisten (ZSLs) / Access Control Lists (ACLs)

Hier ist die Liste der Rechte auf granularer Ebene:

FILE_READ_DATA = 0x00000001; // 1 List Folder/Read Data
FILE_WRITE_DATA = 0x00000002; // 2 Create Files/Write Data
FILE_APPEND_DATA = 0x00000004; // 3 Create Folders/Append Data
FILE_READ_EA = 0x00000008; // 4 Read Extended Attributes
FILE_WRITE_EA = 0x00000010; // 5 Write Extended Attributes
FILE_EXECUTE = 0x00000020; // 6 Traverse Folder/Execute File
FILE_DELETE = 0x00000040; // 7 Delete Subfolders and Files
FILE_READ_ATTRIBUTES = 0x00000080; // 8 Read Attributes
FILE_WRITE_ATTRIBUTES = 0x00000100; // 9 Write Attributes
DELETE = 0x00010000; // 16 Delete
READ_CONTROL = 0x00020000; // 17 Read Permissions
WRITE_DAC = 0x00040000; // 18 Change Permissions
WRITE_OWNER = 0x00080000; // 19 Take Ownership
SYSTEM_SECURITY = 0x01000000; // 19
SYNCHRONIZE = 0x00100000; // 20 Synchronize
GENERIC_ALL = 0x10000000; // 28
GENERIC_EXECUTE = 0x20000000; // 29
GENERIC_WRITE = 0x40000000; // 30
GENERIC_READ = 0x80000000; // 31

… und die Übernahme-Flaggen:

FLAGS_OBJECT_INHERIT = 0x01;
FLAGS_CONTAINER_INHERIT = 0x02;
FLAGS_NO_PROPAGATE = 0x04;
FLAGS_INHERIT_ONLY = 0x08;
FLAGS_INHERITED = 0x10;

…Und schließlich finden Sie hier die einzelnen Berechtigungen in einer benutzerfreundlicheren Anordnung:

Wir haben also einen einfachen Satz von Rechten (Full Control, Modify, Read/Execute, List, Read, Write) mit einfachen Definitionen (Allowed, Not Allowed, Not defined – wobei Not Allowed immer stärker ist als Allowed).

Zugriffssteuerungslisten (ZSLs) / Access Control Lists (ACLs): Beispiel

Nehmen wir an, ein Benutzer gehört sowohl zu Gruppe1 als auch zu Gruppe2:

  • File1 berechtigt Group1 zum Read, während Group2 Not defined ist. In diesem Fall ist es dem Benutzer erlaubt, den Inhalt von File1 zu lesen.
  • — … Wenn aber in File1 auch Group2 bei Read auf Not Allowed steht, wird der Benutzer den Inhalt der Datei nicht lesen können (weil „Not“ immer gewinnt).

(Stellen Sie sich nun dieses einfache Szenario für eine ganze Unternehmenshierarchie mit Hunderten/Tausenden von Benutzern auf einer gemeinsamen Struktur vor, die Buchhaltung, Marketing, technische Dokumentation usw. umfasst, und nehmen Sie an, dass Einzelpersonen regelmäßig je nach Arbeitsbedarf von einer Gruppe zu einer anderen wechseln. Können Sie sich ein Bild von der Arbeit der Systemadministratoren beim Hinzufügen/Löschen von Personen zu/aus Gruppen machen? Die kleinste Ungenauigkeit in der Rechtevergabe kann zu unerwünschten Zugriffsrechten auf geschützte Informationen führen.)

Wiederherstellung von Zugriffssteuerungslisten (ZSLs) / Access Control Lists (ACLs): Wie es geht

Zurück zu unserem Beispiel: Der Benutzer muss eine zuvor gelöschte Datei wiederherstellen. Obwohl wir die Originaldatei in einem Backup haben, reicht es nicht aus, sie einfach zu kopieren, da die Zugriffssteuerungslisten (ZSLs) / Access Control Lists (ACLs) nicht in ihrer ursprünglichen Form erhalten bleiben.

Wir müssen also die Zugriffssteuerungslisten (ZSLs) / Access Control Lists (ACLs) aus der Quelldatei ablesen und sie am Speicherort wiederherstellen. Das ist nicht die einfachste Sache, weil der Mechanismus eine Sicherheitsverletzung darstellt. Daher ist das Schreiben von Zugriffssteuerungslisten (ZSLs) / Access Control Lists (ACLs) mit gängigen Libraries nicht möglich. (Stellen Sie sich nur ein Werkzeug vor, das Zugriffssteuerungslisten (ZSLs) / Access Control Lists (ACLs) für jede beliebige Datei/jeden beliebigen Ordner ändern kann – und damit möglicherweise den Zugriff auf das gesamte Dateisystem ermöglicht.)

Was wir gemacht haben, war, eine gegabelte Version von JCIFS (eine Open-Source-Bibliothek zur Steuerung von Dateien) zu verwenden, die wir gepatcht (/erweitert) haben, um Zugriffssteuerungslisten (ZSLs) / Access Control Lists (ACLs) entsprechend unseren Bedürfnissen zu lesen/schreiben:

  • Wir erweiterten den Kopiermechanismus, um auch die Zugriffssteuerungslisten (ZSLs) / Access Control Lists (ACLs) zu lesen, wenn der Dateiinhalt gelesen wird. Sobald die neue Datei erstellt wurde, wendeten wir diese ACLs an (einschließlich der Eigentumsrechte für Benutzer und Gruppe).
  • Für den Zweck unserer Anwendung haben wir diese Zugriffssteuerungslisten (ZSLs) / Access Control Lists (ACLs) in ein für Menschen lesbares Format umgewandelt und in einer Datenbank gespeichert, die Abfragen und Statistiken über die Rechte von Dateien/Ordnern ermöglicht.
  • Außerdem haben wir innerhalb der Datenbank die Informationen der Zugriffssteuerungslisten (ZSLs) / Access Control Lists (ACLs) durch Hinzufügen der AD-Namen für jede SID erweitert.

Da die Active-Directory-Elemente nicht eingebettet sind (wie .Net-Libraries), kam es bei der Verwendung eines Linux-Rechners zu kleineren Komplikationen. Zum Beispiel wurde jede SID-Übersetzung durch eine Abfrage an den LDAP-Server vorgenommen, anstatt direkte Aufrufe zu tätigen. Dann haben wir, um die Systembelastung beim Lösen von Tausenden von Zugriffssteuerungslisten (ZSLs) / Access Control Lists (ACLs) zu minimieren, einen Second-Level-Cache verwendet. (Wir gehen nicht weiter ins Detail – die Library ist öffentlich, und wir unterstützen Sie gerne, falls Sie sie benötigen.)

Also, ja! Wir haben unser Ziel erreicht, die richtigen Zugriffssteuerungslisten (ZSLs) / Access Control Lists (ACLs) für die wiederhergestellten Dateien/Ordner einzusetzen. Darüber hinaus haben wir aber noch etwas anderes erreicht: Da wir einen Lesemechanismus für Zugriffssteuerungslisten (ZSLs) / Access Control Lists (ACLs) implementiert haben, konnten wir Berichte für die Systemadministratoren erstellen, wie z. B.:

  • „wer welchen Zugriff“ auf die Dateien hat
  • auf welche Dateien eine bestimmte Person zugreifen konnte, usw.

Fazit

Wir sind uns sicher, dass jeder Systemadministrator seine eigenen Tools hat, um die Hierarchien der Vertrauensnehmer zu pflegen (entweder indem er sie selbst erstellt oder direkt von Microsoft bereitgestellt bekommt). Aber wer kann schon zu 100 % auf sein eigenes System schwören? Indem wir also unsere Erfahrungen, Grundsätze und Arbeitsweisen mit Ihnen teilen, können wir Ihnen hoffentlich das Leben ein wenig leichter machen – zumindest in Bezug auf Zugriffssteuerungslisten (ZSLs) / Access Control Lists (ACLs).

_

Sie würden gerne Ihre Erfahrungen im Bereich ZSLs / ACLs mit uns teilen? Wir freuen uns auf Ihre Kontaktaufnahme!

29 Jahre im Geschäft | 2700 Software-Projekte | 760 Kunden | 24 Länder

Wir verwandeln Ideen in Software. Wie lautet Ihre Idee?

Kontakt aufnehmen

14 + 4 =