iknarf
Goto Top

Verzeichnisrechte mit Cacls nur dann ersetzen, wenn der User keinen vererbten Vollzugriff hat

Hallo,
seit einer Weile bin ich dabei ein Batchscript zu schreiben, welches die Berechtigungsstruktur für ein bestimmtes Verzeichnis und deren Unterverzeichnisse anpasst. Hintergrund ist der, dass auf dem Ursprungs Verzeichnis Rechte für den Ersteller mit Vollzugriff ohne Vererbung aktiv sind. Das bedeutet, dass der User in diesem Ursprungsverzeichnis Verzeichnisse und darunter auch Verzeichnisse und Dateien erstellen kann, auf diese kann er auch selbst zugreifen, jedoch sobald z. B. ein Administrator in diese Verzeichnisse Dateien kopiert kann der Anwender nicht auf diese zugreifen, da keine Vererbung aktiv war und er nicht mehr berechtigt ist.

Da die Anwenderverzeichnisse dynamisch bei der ersten Anmeldung mit dem jeweiligen Anmeldenamen erzeugt wurden und das Ganze zudem historisch gewachsen ist, suche ich nun einen Weg die Rechtestruktur "gerade" zu ziehen. Mein Ansatz ist eine FOR Schleife, welche das Ursprungsverzeichnis nach den Unterordnern (Anmeldenamen) durchsucht und im Anschluss die Rechte für den betreffenden User auf Vollzugriff mit Vererbung ändert:

 FOR /F "tokens=1,*" %%i IN ('DIR /b C:\Verzeichnis') DO CACLS C:\Verzeichnis\%%i /T /E /P Domain\%%i:F   

das funktioniert z. B. per Task ganz gut, jedoch werden die Berechtigungen bei jedem Neustart des Computers angefasst, was bei großen Datenmengen doch erheblich lange dauert.

Daher meine Frage, gibt es die Möglichkeit das Skript so anzupassen, dass die Berechtigungen nur dann angefasst werden, wenn der User auf seinen Ordner keinen vererbten Vollzugriff hat. Falls ja, wie müsste oder sollte der Code hierzu aussehen?

Vielen Dank und viele Grüße
Frank

Content-ID: 177270

Url: https://administrator.de/contentid/177270

Ausgedruckt am: 25.11.2024 um 15:11 Uhr

Luie86
Luie86 05.12.2011 um 17:43:41 Uhr
Goto Top
Hi,

ich würde dir empfehlen für solche Sachen nicht Batch zu verwenden.
Nimm lieber VBS, Perl, <beliebige Programmier-/Skriptsprache>.

Da ich sowas ähnliches schon in Perl gelöst habe, könnte ich dir mein Skript schicken.
Müsstest es nur ein wenig anpassen und vielleicht hat es sich damit ja schon erledigt.

Gruß Daniel
60730
60730 05.12.2011 um 21:37:29 Uhr
Goto Top
moin,

das ist doch ganz einfach - auch ohne Perl..

If exist flag - damit das stur nur einmal läuft
oder uauberer

Gruß
Iknarf
Iknarf 06.12.2011 um 11:20:07 Uhr
Goto Top
@timobeil

vielen Dank das war's ...

Zitat von @60730:
einzeilerschleife von oben.


So sieht mein Skript jetzt fertig aus:

 FOR /F "tokens=1,*" %%i IN ('DIR /b C:\Verzeichnis') DO (  
CACLS C:\Verzeichnis\%%i | FINDSTR /I "domain\%%i:(OI)(CI)F" || CACLS C:\Verzeichnis\%%i /T /E /C /P domain\%%i:F   
)


Viele Grüße
Frank
Iknarf
Iknarf 06.12.2011 um 11:22:05 Uhr
Goto Top
@Luie86

vielen Dank für Dein Angebot, aber mit Perl kenne ich mich nicht so aus.

Viele Grüße
Frank
Heiß diskutiert
superfun2k24Sophos SFOS 20 DNAT funktioniert nichtsuperfun2k24 - 26 KommentareLangaberWindows Server Sicherung Restore - MöglichkeitenLangaber - 21 Kommentareprplemk2Testumgebung bauen (Grundlegend)prplemk2 - 19 KommentaremaisenkaiserSwitch ohne STP ins Netzwerkmaisenkaiser - 19 KommentareBlitterWindows 10 u. 11 und 802.1x Netzwerk PortsecurityBlitter - 15 KommentareTJ.Hooker74Dom.Admin-Passwort ändern - Auswirkungen auf EX, HCW, AADCTJ.Hooker74 - 15 KommentaremaxMicrosoft plant für 2025 mehrere Preiserhöhungenmax - 14 KommentareleberkaeseFB7590 ISDN Fax-Funktionleberkaese - 13 KommentareUnluckyProccess1999Creo 4.0 Lizenz Server (LMTOOLS)UnluckyProccess1999 - 13 KommentareDaniSIP Zugangsdaten von Vodafone erhaltenDani - 12 KommentareEnrixkHilfe bei Netzwerkinfrastruktur für AbschlussprojektEnrixk - 12 KommentareSarekHLLegaler Einsatz vom M365 Family in Business-UmgebungSarekHL - 11 Kommentare