Das ist offenbar mein Karma: Standardaufgaben auf alle möglichen nicht trivialen Arten umzusetzen. Wenn jemand eine andere Sicht auf das Problem hat, beteiligen Sie sich bitte an der Diskussion, um das Problem zu lösen.
Eines schönen Morgens ergab sich eine interessante Aufgabe: Rechte an Benutzergruppen auf verschiedenen Freigaben zu verteilen, die Projektunterordner mit Dokumentordnern enthielten. Alles war in Ordnung und es wurde ein Skript geschrieben, das den Ordnern Rechte zuweist. Und dann stellte sich heraus, dass die Gruppen Benutzer aus verschiedenen DomÀnen, aus verschiedenen WÀldern enthalten sollten (Angenommen, die Freigabe selbst befindet sich auf einem Synology-Laufwerk, das in der FB-DomÀne der PSI-Gesamtstruktur registriert ist. Die Aufgabe besteht darin, Benutzern den Zugriff zu ermöglichen. domenov ein anderer Wald, um Zugang zum Inhalt dieser Kugel zu erhalten, und zwar sehr selektiv.
Nach einiger Zeit nahmen die technischen Spezifikationen folgende Form an:
- 2 WĂ€lder: PSI-Wald, TG-Wald.

- Jeder Wald hat 3 DomÀnen: PSI (ZG, PSI, FB); TG (TG, HU, KC).
- Zwischen den Gesamtstrukturen besteht eine Vertrauensbeziehung. Synology sieht alle Sicherheitsgruppen in allen Gesamtstrukturen.
- Freigaben und Ordner/Unterordner mĂŒssen ĂŒber FB-DomĂ€nenadministratorkonten mit Vollzugriffsrechten verfĂŒgen
- Die Namen der Ordner im Ball sollten systematisiert werden. Das Management war fĂŒr die Koordinierung der Projekt-IDs verantwortlich und ich beschloss, die Namen der Sicherheitsgruppen mit den Projekt-IDs zu verknĂŒpfen.
- Projektordner in Systemfreigaben mĂŒssen eine vorab in einer XLSX-Datei vorbereitete Struktur mit den entsprechenden Zugriffsrechten (R/RW/NA, wobei NA keinen Zugriff bedeutet) enthalten.

- Es sollte möglich sein, die Rechte von Benutzern/Gruppenmitgliedern eines Projekts auf bestimmte Verzeichnisse dieses Projekts zu beschrÀnken. Aufgrund der Gruppenmitgliedschaft hat der Benutzer möglicherweise keinen Zugriff auf andere Verzeichnisse/Projekte.
- Beim Anlegen eines Projektordners sollen möglichst automatisch Gruppen in den entsprechenden DomÀnen angelegt werden, deren Namen den Projekt-IDs entsprechen.
Hinweise zu den technischen Daten
- Der Aufbau von Vertrauensbeziehungen ist nicht im Leistungsumfang enthalten.
- Die Projekt-ID enthÀlt Zahlen und lateinische Buchstaben
- Projektbenutzerrollen fĂŒr alle DomĂ€nen haben Standardnamen
- Die .xlsx-Datei mit Ordnern und Zugriffsrechten (Zugriffsmatrix) wird vor Beginn des gesamten Projekts erstellt.
- Bei der Umsetzung von Projekten besteht die Möglichkeit, Benutzergruppen in den entsprechenden DomÀnen zu erstellen.
- Die Automatisierung wird durch den Einsatz von Standard-MS-Verwaltungstools erreicht. Windows
Umsetzung der technischen Spezifikationen
Nach der Formalisierung dieser Anforderungen wurde eine taktische Pause eingelegt, um Methoden zum Erstellen von Verzeichnissen und zum Zuweisen von Rechten an diese zu testen. Um das Projekt einfach zu halten, sollte nur PowerShell verwendet werden. Wie ich bereits schrieb, schien der Skriptalgorithmus recht einfach zu sein:
- Wir registrieren Gruppen mit einem Namen, der aus der Projekt-ID abgeleitet ist (z. B. KC40587) und den entsprechenden Rollen, die in der Zugriffsmatrix angegeben sind: KC40587-EN â fĂŒr einen Ingenieur; KC40587-PM â fĂŒr Produktmanager usw.
- wir erhalten SIDs der erstellten Gruppen
- Registrieren Sie den Projektordner und die entsprechenden Verzeichnisse (die Liste der Unterordner hÀngt von der Freigabe ab, in der sie erstellt und in der Zugriffsmatrix definiert wird).
- FĂŒr neue Projektunterverzeichnisse vergeben wir Rechte an Gruppen entsprechend der Zugriffsmatrix.
In Phase 1 aufgetretene Schwierigkeiten:
- MissverstĂ€ndnis der Methode zur Angabe der Zugriffsmatrix im Skript (derzeit ist ein mehrdimensionales Array implementiert, es wird jedoch nach einer Möglichkeit gesucht, es basierend auf dem Inhalt der XLSX-Datei/Zugriffsmatrix zu fĂŒllen)

- Unmöglichkeit, Zugriffsrechte in SMB-Freigaben auf Synology-Laufwerken mit PoSH festzulegen (https://social.technet.microsoft.com/Forums/en-US/3f1a949f-0919-46f1-9e10-89256cf07e65/error-using-setacl-on-nas-share?forum=winserverpowershell), wodurch viel Zeit verloren ging und alles fĂŒr Skripte mit dem Dienstprogramm zur Bearbeitung von Zugriffsrechten icacls angepasst werden musste, was die Erstellung eines Zwischenrepositorys mit Text- und Befehlsdateien erforderte.
Im aktuellen Modus wird die AusfĂŒhrung von cmd-Dateien manuell gesteuert, basierend auf der Notwendigkeit, einen Ordner fĂŒr das Projekt zu registrieren.

Es stellte sich auch heraus, dass das Skript ausgefĂŒhrt werden muss, auch um Gruppen in anderen Gesamtstrukturen zu registrieren (der Begriff âCross-Domainsâ wurde verwendet) und das VerhĂ€ltnis nicht nur 1 zu eins, sondern auch 1 zu viele betragen kann.

Dies bedeutet, dass Gruppen aus anderen domĂ€nenĂŒbergreifenden Bereichen, einschlieĂlich benachbarter Gesamtstrukturen, nun Zugriff auf Ressourcen jeder beliebigen DomĂ€ne beanspruchen können. Um Einheitlichkeit zu erreichen, wurde beschlossen, in der OU eine symmetrische Struktur aller bedienten DomĂ€nen aller WĂ€lder zu erstellen (schwarze vertikale Ovale). Wie man sagt, sollte in der Armee alles hĂ€sslich, aber einheitlich sein:

Daher fĂŒhrt das Skript beim Registrieren des 80XXX-Projekts in der TG-DomĂ€ne Folgendes aus:
1. Erstellen der entsprechenden OU (rote horizontale Ovale) in der angegebenen DomĂ€ne und domĂ€nenĂŒbergreifend, d. h. in den DomĂ€nen, deren Mitarbeiter Zugriff auf die angegebene Ressource haben sollen.
2. FĂŒllen der OU mit Gruppen mit Namen wie -, Wo:
- SRC_-DomĂ€ne â domĂ€nenĂŒbergreifend, deren Mitarbeiter Zugriff auf die DST-DomĂ€nenressourcen haben
- DST_domain â die DomĂ€ne, auf deren Ressourcen eigentlich Zugriff gewĂ€hrt werden sollte, d. h. fĂŒr die alles gestartet wurde
- â Projektnummer
- ROLLEN â Namen der in der Zugriffsmatrix aufgefĂŒhrten Rollen.
3. Lesen des SID-Arrays aller Gruppen aller beteiligten DomĂ€nen und Speichern fĂŒr die spĂ€tere DatenĂŒbertragung in einer Datei, die die Rechte fĂŒr einen bestimmten Projektunterordner definiert
4. Generieren von Quelldateien (Parameter /restore) mit einer Reihe von Rechten zur Verwendung durch das Dienstprogramm icacKC im ausfĂŒhrbaren Dateimodus "icacKC "as-nasNNKCProjects" /restore C:TempKCKC40XXKC40XX.txt"
5. Erstellen einer CMD-Datei, die alle fĂŒr alle Projektordner gestarteten icacls kombiniert

Wie bereits erwĂ€hnt, wird die ausfĂŒhrbare Datei manuell gestartet und die Auswertung der AusfĂŒhrungsergebnisse erfolgt ebenfalls manuell.
Schwierigkeiten, die am Ende bewÀltigt werden mussten:
- Wenn der Projektordner bereits mit einer groĂen Anzahl von Dateien gefĂŒllt ist, kann die Verarbeitung des icacls-Befehls auf den verfĂŒgbaren DatentrĂ€gern sehr viel Zeit in Anspruch nehmen und in einigen FĂ€llen zu einem Fehler fĂŒhren (z. B. bei langen Dateipfaden).
- zusĂ€tzlich zum Parameter /restore mussten Zeilen mit dem Parameter /reset hinzugefĂŒgt werden, falls die Ordner nicht erstellt, sondern aus bereits vorhandenen Ordnern ĂŒbertragen wurden, wobei die Vererbungsrechte vom Stammverzeichnis deaktiviert waren;
- Ein Teil des Skripts zum Erstellen von Gruppen musste auf einem zufĂ€lligen DC jedes Forests ausgefĂŒhrt werden. Das Problem betrifft Administratorkonten fĂŒr jeden Baum.
Allgemeines Fazit: Es ist sehr merkwĂŒrdig, dass es noch keine Dienstprogramme mit Ă€hnlicher FunktionalitĂ€t auf dem Markt gibt. Es scheint möglich, Ă€hnliche Funktionen auf Basis des Sharepoint-Portals zu implementieren.
Unklar ist auch, dass es keine Möglichkeit gibt, mithilfe von PoSH-Dienstprogrammen Rechte fĂŒr einen Ordner auf Sinology-GerĂ€ten festzulegen.
Falls gewĂŒnscht, bin ich bereit, das Skript zu teilen, indem ich ein Projekt auf GitHub erstelle, falls jemand Interesse hat.
Source: habr.com



