Offensichtlich habe ich so eine Karma: Standardaufgaben auf allerlei unkonventionelle Weise umzusetzen. Wenn jemand eine andere Sichtweise auf das Problem hat, lade ich zur Diskussion ein, um die Frage gemeinsam zu erarbeiten.
Eines schönen Morgens tauchte eine interessante Aufgabe auf: Berechtigungen fĂŒr Benutzergruppen auf verschiedene Freigaben zu vergeben, die Unterordner von Projekten mit Dokumenten enthalten. Alles lief gut und es wurde ein Skript zur Vergabe von Rechten fĂŒr die Ordner geschrieben. Dann stellte sich heraus, dass die Gruppen Benutzer aus verschiedenen DomĂ€nen, also aus unterschiedlichen Gesamtstrukturen beinhalten sollten (). Angenommen, die Freigabe selbst befindet sich auf einem Synology-GerĂ€t, das in der DomĂ€ne FB, Gesamtstruktur PSI, registriert ist. Aufgabe: Den Benutzern DomĂ€nen einer anderen Gesamtstruktur den Zugriff auf den Inhalt dieser Freigabe zu gewĂ€hren, und zwar sehr selektiv.
Die Anforderungen entwickelten sich im Laufe der Zeit wie folgt:
- 2 Gesamtstrukturen: PSI und TG.

- In jeder Gesamtstruktur gibt es 3 DomÀnen: PSI (ZG, PSI, FB); TG (TG, HU, KC).
- Zwischen den Gesamtstrukturen bestehen VertrauensverhÀltnisse; Synology sieht alle Sicherheitsgruppen in allen Gesamtstrukturen.
- Auf den Freigaben und Ordnern/Sousordnern mĂŒssen unbedingt Kontoanmeldungen der Administratoren der DomĂ€ne FB mit Vollzugriffsrechten vorhanden sein.
- Die Namen der Share-Ordner mĂŒssen systematisch organisiert sein. Die Abstimmung der Projekt-IDs wurde von der Leitung durchgefĂŒhrt, ich habe entschieden, die Namen der Gruppen Security an die Projekt-IDs zu koppeln.
- Die Projektordner in den System-Shares mĂŒssen eine im .xlsx-Dokument vorbereitete Struktur enthalten, mit entsprechenden Zugriffsprivilegien (R/RW/NA, wobei NA keinen Zugriff bedeutet).

- Es muss möglich sein, die Rechte der Benutzer/Gruppenmitglieder eines Projekts auf bestimmte Verzeichnisse dieses Projekts zu beschrÀnken. Auf andere Verzeichnisse/Projekte darf der Benutzer gemÀà seiner Gruppenmitglieder keine Zugriffsrechte haben.
- Bei der Anlage eines Projektordners sollen möglichst automatisch Gruppen in den entsprechenden DomÀnen mit den Namen, die den Projekt-IDs entsprechen, erstellt werden.
Anmerkungen zum Lastenheft
- Die Einrichtung von Vertrauensstellungen fÀllt nicht in den Rahmen des Lastenhefts.
- Die Projekt-ID enthÀlt Zahlen und lateinische Buchstaben.
- Die Benutzerrollen der Projekte fĂŒr alle DomĂ€nen haben standardisierte Namen.
- Die .xlsx-Datei mit den Ordnern und Zugriffsrechten (Zugriffs-Matrix) wird vor Beginn der gesamten ProjektdurchfĂŒhrung erstellt.
- Bei der Umsetzung von Projekten kann die Erstellung von Benutzergruppen in den entsprechenden DomÀnen erfolgen.
- Automatisierung erfolgt durch den Einsatz der integrierten Administrationsmittel von MS Windows
Umsetzung der Anforderungen
Nach der Formalisierung dieser Anforderungen wurde eine taktische Pause eingelegt, um die Methoden zur Erstellung von Katalogen und deren Berechtigungen zu testen. Es war nur vorgesehen, PowerShell zu verwenden, um das Projekt nicht zu komplizieren. Wie ich bereits erwÀhnt habe, war der Algorithmus des Skripts ziemlich einfach:
- Wir registrieren Gruppen mit Namen, die von der Projekt-ID abgeleitet sind (z. B. KC40587) und den entsprechenden Rollen, die in der Zugriffsmatrix angegeben sind: KC40587-EN fĂŒr den Ingenieur; KC40587-PM fĂŒr den Produktmanager usw.
- Wir erhalten die SID der erstellten Gruppen
- Wir registrieren den Projektordner und das entsprechende Set an Katalogen (die Liste der Unterordner hÀngt von der Freigabe ab, in der er erstellt wird, und ist in der Zugriffsmatrix definiert)
- Wir weisen die Berechtigungen fĂŒr die neuen Unterkataloge des Projekts den Gruppen gemÀà der Zugriffsmatrix zu.
Herausforderungen, denen wir in der ersten Phase begegnet sind:
- UnverstĂ€ndnis ĂŒber die Art und Weise, wie die Zugriffsmatrix im Skript festgelegt wird (derzeit wird ein mehrdimensionales Array implementiert, aber es wird nach einem Weg gesucht, es auf Grundlage des Inhalts einer .xlsx-Datei/Zugriffsmatrix zu fĂŒllen)

- Die Unmöglichkeit, Berechtigungen in SMB-Freigaben auf Synology-Speicher mit PoSH festzulegen (https://social.technet.microsoft.com/Forums/en-US/3f1a949f-0919-46f1-9e10-89256cf07e65/error-using-setacl-on-nas-share?forum=winserverpowershell), hat eine Menge Zeit gekostet und erforderte die Anpassung alles an Skripte unter Verwendung des Dienstprogramms icacls zur Bearbeitung von Berechtigungen, was die Erstellung eines Zwischenablagespeichers fĂŒr Text- und CMD-Dateien erforderte.
Derzeit wird die AusfĂŒhrung von CMD-Dateien manuell kontrolliert, abhĂ€ngig von der Notwendigkeit, einen Ordner fĂŒr das Projekt zu registrieren.

Es stellte sich auch heraus, dass das Skript unter anderem fĂŒr die Registrierung von Gruppen in anderen Forests (wir verwendeten den Begriff Cross-Domains) ausgefĂŒhrt werden muss, wobei das VerhĂ€ltnis nicht nur 1 zu 1, sondern auch 1 zu vielen sein kann.

Das bedeutet, dass auf den Zugang zu Ressourcen eines bestimmten DomĂ€nes jetzt auch Gruppen aus anderen Cross-Domains, einschlieĂlich des benachbarten Forests, Anspruch erheben können. Um Einheitlichkeit zu gewĂ€hrleisten, wurde beschlossen, eine symmetrische Struktur in den OUs aller verwalteten DomĂ€nen sĂ€mtlicher Forests (schwarze vertikale Ovale) zu schaffen. Wie man sagt, im MilitĂ€r muss alles chaotisch, aber einheitlich sein:

Bei der Registrierung des Projekts 80XXX in der Domain TG fĂŒhrt das Skript die folgenden Schritte aus:
1. Erstellung der entsprechenden OU (rote horizontale Ovale) in dieser Domain und in den Cross-Domains, also in denen Domains, zu denen Mitarbeitende Zugriff auf diese Ressource haben mĂŒssen.
2. BefĂŒllung der OU mit Gruppen, deren Namen der Struktur <SRC_domain><DST_domain><ID_project>- entsprechen, wobei:
- SRC_domain â die Cross-Domain, deren Mitarbeitende Zugang zu den Ressourcen der DST-Domain haben werden
- DST_domain â die Domain, zu deren Ressourcen, die tatsĂ€chlich bereitgestellt werden sollen, also warum dies alles gestartet wurde
- <ID_project> â die Projektnummer
- ROLES â die Bezeichnungen der in der Zugriffsmatrix aufgefĂŒhrten Rollen.
3. Auslesen des Arrays von SID aller Gruppen aller beteiligten Domains und Speichern dieser Daten zur spĂ€teren Ăbergabe an eine Datei, die die Berechtigungen fĂŒr einen bestimmten Unterordner des Projekts definiert.
4. Generierung von Quell-Dateien (Parameter /restore) mit einem Satz von Rechten zur Verwendung im Dienstprogramm icacKC im Modus der ausfĂŒhrbaren Datei "icacKC \"as-nasNNKCProjects\" /restore C:TempKCKC40XXKC40XX.txt"
5. Erstellung einer CMD-Datei, die alle auszufĂŒhrenden icacls-Befehle fĂŒr alle Projektordner vereint.

Wie bereits erwĂ€hnt, erfolgt der Start der ausfĂŒhrbaren Datei manuell und die Auswertung der Ergebnisse wird ebenfalls manuell durchgefĂŒhrt.
Die Schwierigkeiten, mit denen wir konfrontiert wurden, sind:
- Wenn der Projektordner bereits mit einer groĂen Anzahl von Dateien gefĂŒllt ist, kann die AusfĂŒhrung des Befehls icacls auf den vorhandenen Volumen bedeutende Zeit in Anspruch nehmen und in einigen FĂ€llen zu einem Fehler fĂŒhren (z. B. bei langen Dateipfaden).
- ZusĂ€tzlich zum Parameter /restore musste ich Zeilen mit dem Parameter /reset hinzufĂŒgen, falls die Ordner nicht neu erstellt, sondern aus bereits bestehenden Ordnern mit deaktivierten Vererbungsrechten vom Stamm verschoben wurden.
- Einen Teil des Skripts zur Erstellung von Gruppen musste ich auf einem beliebigen DC jedes Forests ausfĂŒhren; das Problem betrifft die administrativen Benutzerkonten fĂŒr jeden Baum.
Fazit: Es ist sehr seltsam, dass es auf dem Markt bisher keine Tools mit einer solchen FunktionalitÀt gibt. Es wÀre möglich, eine Àhnliche FunktionalitÀt auf der Basis des SharePoint-Portals zu realisieren.
Es ist auch unverstÀndlich, dass es keine Möglichkeit gibt, PoSH-Tools zur Zuweisung von Rechten auf Ordnern auf Sinology-GerÀten zu verwenden.
Ich teile gerne das Skript, wenn jemand Interesse hat, und erstelle ein Projekt auf GitHub.
Quelle: habr.com



