barthinator
Goto Top

Berechtigungen via Skript einstellen. Skript setzt Lesen-Verweigerungseintrag?

Moin,

ich stehe leider total auf dem Schlauch und komme nicht mehr weiter. Aber erst einmal etwas zum Hintergrund:

wir haben hier einen Windows Storage Server 2008 R2 Standard als Mitgliedsserver eine Windows Domäne auf welchen wir unsere Projekte ablegen. Die Ordnerstruktur sieht abgekürzt wie folgt aus
\\Server\Projekte\2016\16000
\\Server\Projekte\2016\16001
\\Server\Projekte\2016\16002
...usw. Die Struktur geht zwar noch tiefer, aber das ist erstmal irrelevant.

Von den Berechtigungen soll das ganze so aussehen, dass die Mitarbeiter nichts ändern oder löschen können außer ab der 3. Ebene, also alles was tiefer im Ordner 16000 beispielsweise kommt, da können die User wilde Sau spielen.

Da das sehr viele Ordner sind, wollte ich ein kleines Batch-Skript mit icacls schreiben, welches mir die Berechtigungen setzt, da das händisch sehr aufwändig wäre. Mein Skript sieht bisher so aus:

@ECHO OFF
SET I=0
:PR10
IF %I% == 10 GOTO PR100
icacls \\Server\Projekte\2016\1600%I% /grant "Domäne\Mitarbeiter":(OI)(CI)(D,RC,GR,GW,GE,RD,WD,AD,REA,WEA,X,DC,RA,WA)  
icacls \\Server\Projekte\2016\1600%I% /deny "Domäne\Mitarbeiter":(D)  
SET /A I=%I%+1
GOTO PR10
:PR100
...
..
.

Meine Logik war, dass ich quasi alles erlaube für diesen Ordner, Unterordner und Dateien und dann einen Verweigerungseintrag für das Löschen nur für diesen Ordner einstelle. Wenn ich diese Berechtigungen so per Hand einstelle, dann funktioniert alles super. Wenn ich das Skript laufen lasse, dann sieht auf dem ersten Blick alles erfolgreich aus, allerdings haben die User dann nicht mehr weiter als Order 2016. Ich sehe zwar noch die einzelnen aber wenn ich darauf klicke, erhalte ich eine Fehlermeldung:

"\\Server\Projekte\2016\16001" ist nicht verfügbar. Wenn sich der Speicherort auf diesem PC befindet, stellen Sie sicher, dass das Gerät oder Laufwerk angeschlossen oder der Datenträger eingelegt ist, und wiederholen Sie den Vorgang. Stellen Sie im Fall eines Netzwerkspeicherorts sicher, dass Sie mit dem Netzwerk oder Internet verbunden sind, und wiederholen Sie den Vorgang. Falls der Speicherort weiterhin nicht gefunden wird, wurde er möglicherweise verschoben oder gelöscht.

Sobald ich aber händisch in die GUI zum Einstellen der Berechtigungen gehe (es sieht alles so aus wie als hätte ich es auch händisch eingestellt, auch die effektiven Berechtigungen sehen alle super aus), und dort nur eine oder irgendeine weitere Berechtigung anlege oder entferne zu der bestehenden dann funktioniert der Zugriff wieder tadellos.

Vielleicht hat ja jemand eine Idee oder weiß sofort Bescheid, was ich falsch gemacht habe und kann mir helfen.


Ansonsten wünsche ich schon mal allen ein frohes Fest und einen guten Rutsch!

Content-ID: 291594

Url: https://administrator.de/forum/berechtigungen-via-skript-einstellen-skript-setzt-lesen-verweigerungseintrag-291594.html

Ausgedruckt am: 26.12.2024 um 16:12 Uhr

AndreasHoster
Lösung AndreasHoster 23.12.2015, aktualisiert am 28.12.2015 um 10:57:22 Uhr
Goto Top
Guck Dir mal https://social.technet.microsoft.com/Forums/windows/en-US/430f61ee-b278- ... an.
Laut dem hat icacls einen Bug was das Verweigern angeht.
Barthinator
Barthinator 23.12.2015 aktualisiert um 16:26:35 Uhr
Goto Top
Super Hinweis, vielen Dank! Komme leider erst am Montag wieder dazu, aber da haben wohl mehrere das Problem mit der kompletten Verweigerung.
LG
Barthinator
Barthinator 28.12.2015 um 10:57:14 Uhr
Goto Top
Moin,

also tatsächlich gibt es beim Verweigern einen Bug (wenn ist nicht sogar ein Feature ist).

Statt ICACLS wollte ich CACLS nutzen, aber dies ist veraltet und bietet mir nicht genug Optionen für mein Vorhaben. Da es einen Unterschied zwischen der GUI Berechtigungen und den tatsächlich gesetzten Berechtigungen gibt, wäre noch eine Möglichkeit gewesen per GUI die Berechtigungen für einen Ordner richtig anzupassen und dann per ICACLS die Berechtigungen zu exportieren und auf andere Ordner wieder importieren. Da ich das aber auf die Schnelle nicht hinbekommen habe (Struktur muss am 01.01.16 stehen), habe ich mich in die Variante nicht besonders vertieft.

Allerdings habe ich noch einen letztendlich entscheidenden Hinweiß bekommen, welcher mit ein paar Abänderungen für mein Vorhaben ausreicht. Ausschlaggebend war der Parameter 'DE'. Mein Code sieht jetzt wie folgt aus und funktioniert nach meinen Vorstellungen:
@ECHO OFF
SET I=0
:PR10
IF %I% == 10 GOTO PR100

REM	Berechtigungen Anpassen
icacls \\Server\projekte\2016\1600%I% /deny "domäne\Mitarbeiter":(DE,WEA,DC,WA,AD,WD)  
icacls \\Server\projekte\2016\1600%I% /grant "domäne\Mitarbeiter":(CI)(OI)(D,RC,GR,GW,GE,RD,WD,AD,REA,WEA,X,RA,WA,DC)  

icacls \\Server\projekte\2016\1600%I%\Ordner1 /deny "domäne\Mitarbeiter":(DE)  
icacls \\Server\projekte\2016\1600%I%\Ordner2 /deny "domäne\Mitarbeiter":(DE)  
icacls \\Server\projekte\2016\1600%I%\Ordner3 /deny "domäne\Mitarbeiter":(DE)  
icacls \\Server\projekte\2016\1600%I%\Ordner4 /deny "domäne\Mitarbeiter":(DE)  
icacls \\Server\projekte\2016\1600%I%\Ordner5 /deny "domäne\Mitarbeiter":(DE)  
usw....

SET /A I=%I%+1
GOTO PR10
:PR100
...
..
.

Manche Befehle machen für mich wenig Sinn und sind nicht gerade nachvollziehbar, aber nur so funktioniert es bei mir. Durch etwas herumprobieren habe ich es doch noch so geschafft.

Vielen Dank Andreas für den Tipp und Denkanstoß!
Guten Rutsch!
LG