NTFS-Berechtigungen nach unten durchdrücken per Kommandozeilenbefehl?
Hallo,
ein Windows 2003er Server.
Beispielsweise diese Ordnerstruktur:
c:\eins
c:\eins\a
c:\eins\b
c:\eins\c
Ich möchte, egal wie die Berechtigungen und Vererbungen für diese 4 Ordner gerade eingestellt sind, für den Ordner c:\eins das Erben deaktivieren, individuelle Berechtigungen vergeben und diese nach unten durchdrücken, so dass auf alle 4 Ordner die gleichen Berechtigungen gelten und bei den Unterordnern a, b und c das Erben aktiviert ist.
Per GUI geht das einfach durch Eigenschaften von Ordner "eins" > Sicherheit > Erweitert > den Haken "Berechtigungen übergeordneter Objekte auf untergeordnete Objekte, sofern anwendbar, vererben. Diese mit den hier definierten Einträgen mit einbeziehen." entfernen. Die anschliessende Frage entweder mit Kopieren oder Entfernen beantworten.
Jetzt individuelle Berechtigungen vergeben.
und diese durch Haken bei "Berechtigungen für alle untergeordneten Objekte durch die angezeigten Einträge, sofern anwendbar, ersetzen." nach unten durchdrücken.
Kein Problem, aber wie geht´s per Kommandozeile.
Ich denke nicht mit cacls.exe oder xcacls.exe. Auch bei icacls.exe hab ich nichts gefunden. Am ehesten noch mit xcacls.vbs. Aber auch damit geht meiner Meinung nach nur folgendes.
Möglichkeit 1:
Dadurch sind zwar auf alle 4 Ordner die gewünschten Berechtigungen vergeben, aber die Unterordner a, b und c haben sie nicht geerbt, sondern sie wurden explizit vergeben. Genau das will ich ja nicht.
Möglichkeit 2:
Dadurch wird auf c:\eins das Erben aktiviert und die Berechtigungen werden nach unten durchgedrückt. Die Unterordner a, b und c haben die Berechtigungen von oben geerbt. Alles super, nur will ich auf c:\eins das Erben nicht aktivieren, nur bei den Unterordnern.
Mir bleibt also nur eine Kombination beider Möglichkeiten:
Ich durchlaufe also in einer Schleife alle Unterordner (erster Ebene) und führe für jeden den Befehl aus Möglichkeit 2 aus.
Geht das wirklich nicht anders?
Danke
Martin
ein Windows 2003er Server.
Beispielsweise diese Ordnerstruktur:
c:\eins
c:\eins\a
c:\eins\b
c:\eins\c
Ich möchte, egal wie die Berechtigungen und Vererbungen für diese 4 Ordner gerade eingestellt sind, für den Ordner c:\eins das Erben deaktivieren, individuelle Berechtigungen vergeben und diese nach unten durchdrücken, so dass auf alle 4 Ordner die gleichen Berechtigungen gelten und bei den Unterordnern a, b und c das Erben aktiviert ist.
Per GUI geht das einfach durch Eigenschaften von Ordner "eins" > Sicherheit > Erweitert > den Haken "Berechtigungen übergeordneter Objekte auf untergeordnete Objekte, sofern anwendbar, vererben. Diese mit den hier definierten Einträgen mit einbeziehen." entfernen. Die anschliessende Frage entweder mit Kopieren oder Entfernen beantworten.
Jetzt individuelle Berechtigungen vergeben.

und diese durch Haken bei "Berechtigungen für alle untergeordneten Objekte durch die angezeigten Einträge, sofern anwendbar, ersetzen." nach unten durchdrücken.
Kein Problem, aber wie geht´s per Kommandozeile.
Ich denke nicht mit cacls.exe oder xcacls.exe. Auch bei icacls.exe hab ich nichts gefunden. Am ehesten noch mit xcacls.vbs. Aber auch damit geht meiner Meinung nach nur folgendes.
Möglichkeit 1:
"cscript //nologo xcacls.vbs c:\eins /i remove /g mydomain\username:F /f /s /t"
Möglichkeit 2:
"cscript //nologo xcacls.vbs c:\eins /i enable /f /s"
Mir bleibt also nur eine Kombination beider Möglichkeiten:
"cscript //nologo xcacls.vbs c:\eins /i remove /g mydomain\username:F /f /s /t"
"for /D %i in (C:\eins\*) do cscript //nologo xcacls.vbs %i /i enable /f /s"
Geht das wirklich nicht anders?
Danke
Martin
11 Antworten
- LÖSUNG AlbertMinrich schreibt am 14.11.2011 um 17:11:08 Uhr
- LÖSUNG DerWoWusste schreibt am 14.11.2011 um 21:34:50 Uhr
- LÖSUNG AlbertMinrich schreibt am 15.11.2011 um 06:30:50 Uhr
- LÖSUNG DerWoWusste schreibt am 15.11.2011 um 11:51:59 Uhr
- LÖSUNG AlbertMinrich schreibt am 15.11.2011 um 13:45:34 Uhr
- LÖSUNG DerWoWusste schreibt am 15.11.2011 um 14:14:38 Uhr
- LÖSUNG AlbertMinrich schreibt am 15.11.2011 um 14:34:17 Uhr
- LÖSUNG DerWoWusste schreibt am 15.11.2011 um 15:16:14 Uhr
- LÖSUNG AlbertMinrich schreibt am 15.11.2011 um 19:56:36 Uhr
- LÖSUNG AlbertMinrich schreibt am 17.11.2011 um 17:30:53 Uhr
- LÖSUNG AlbertMinrich schreibt am 19.11.2011 um 12:06:00 Uhr
- LÖSUNG AlbertMinrich schreibt am 17.11.2011 um 17:30:53 Uhr
- LÖSUNG AlbertMinrich schreibt am 15.11.2011 um 19:56:36 Uhr
- LÖSUNG DerWoWusste schreibt am 15.11.2011 um 15:16:14 Uhr
- LÖSUNG AlbertMinrich schreibt am 15.11.2011 um 14:34:17 Uhr
- LÖSUNG DerWoWusste schreibt am 15.11.2011 um 14:14:38 Uhr
- LÖSUNG AlbertMinrich schreibt am 15.11.2011 um 13:45:34 Uhr
- LÖSUNG DerWoWusste schreibt am 15.11.2011 um 11:51:59 Uhr
- LÖSUNG AlbertMinrich schreibt am 15.11.2011 um 06:30:50 Uhr
LÖSUNG 14.11.2011 um 17:11 Uhr
Zitat von @AlbertMinrich:
Mir bleibt also nur eine Kombination beider Möglichkeiten:
"cscript nologo xcacls.vbs c:\eins /i remove /g mydomain\username:F /f /s /t"
"for /D %i in (C:\eins\*) do cscript nologo xcacls.vbs %i /i enable /f /s"
Mir bleibt also nur eine Kombination beider Möglichkeiten:
"cscript nologo xcacls.vbs c:\eins /i remove /g mydomain\username:F /f /s /t"
"for /D %i in (C:\eins\*) do cscript nologo xcacls.vbs %i /i enable /f /s"
Hab grad noch gemerkt, andersrum geht´s ein wenig einfacher
"cscript //nologo xcacls.vbs c:\eins /i enable /f /s /t"
"cscript //nologo xcacls.vbs c:\eins /i remove /g mydomain\username:F"
LÖSUNG 15.11.2011 um 06:30 Uhr
LÖSUNG 15.11.2011 um 11:51 Uhr
Du hast Recht, 2003 bekommt vom sp2 ein icacls, welches buggy ist: es fehlt dieser Parameter. Nimm http://support.microsoft.com/kb/943043 , dieser Fix behebt das.
LÖSUNG 15.11.2011 um 13:45 Uhr
Hallo,
danke. Ich hab den Hotfix installiert, es gibt dann auch den Parameter /inheritance.
Aber auch damit geht´s nicht anders als mit xcacls.vbs.
Es fehlt bei beiden die Option, die Berechtigungen nach unten durchzudrücken UND gleichzeitig für alle Unterordner das Erben zu aktivieren.
Vielleicht überseh ich ja auch was.
Gruß
Martin
danke. Ich hab den Hotfix installiert, es gibt dann auch den Parameter /inheritance.
Aber auch damit geht´s nicht anders als mit xcacls.vbs.
Es fehlt bei beiden die Option, die Berechtigungen nach unten durchzudrücken UND gleichzeitig für alle Unterordner das Erben zu aktivieren.
Vielleicht überseh ich ja auch was.
Gruß
Martin
LÖSUNG 15.11.2011 um 14:34 Uhr
Das gab es auch mit dem alten icacls.exe, aber das hilft mir nicht, denn was macht z.B. das hier?
"icacls c:\eins /grant mydomain\username:(OI)(CI)F"
So könnte ich es zwar durchdrücken
"icacls c:\eins /grant mydomain\username:(OI)(CI)F /t"
LÖSUNG 15.11.2011 um 15:16 Uhr
Wieso? Sie sind geerbt. Ich nutze hier ein Skript [Edit: auf Vista/2008R2], das geht
und kann danach über den Explorer beispielsweise bei untergeordneten Dateien sehen, dass von server\share geerbt wurde.
Edit2: man beachte das /r: r - remove all inherited ACEs
icacls \\server\share /grant:r Sonstwer:(OI)(CI)(F) /t
Edit2: man beachte das /r: r - remove all inherited ACEs
LÖSUNG 15.11.2011 um 19:56 Uhr
Zitat von @DerWoWusste:
Wieso? Sie sind geerbt. Ich nutze hier ein Skript [Edit: auf Vista/2008R2], das geht
und kann danach über den Explorer beispielsweise bei untergeordneten Dateien sehen, dass von server\share geerbt wurde.
Edit2: man beachte das /r: r - remove all inherited ACEs
Wieso? Sie sind geerbt. Ich nutze hier ein Skript [Edit: auf Vista/2008R2], das geht
icacls \\server\share /grant:r Sonstwer:(OI)(CI)(F) /t
Edit2: man beachte das /r: r - remove all inherited ACEs
Und bei den untergeordneten Ordnern bzw. Dateien war das Erben vorher sicher deaktiviert?
Bei mir klappt das nicht. Muss morgen mal an einem 2008er Server testen, ob der sich anders verhält als mein 2003er bzw. mein XP.
Gruß
Martin
LÖSUNG 17.11.2011 um 17:30 Uhr
Zitat von @AlbertMinrich:
> Zitat von @DerWoWusste:
> ----
> Wieso? Sie sind geerbt. Ich nutze hier ein Skript [Edit: auf Vista/2008R2], das geht
>> und kann danach über den Explorer beispielsweise bei untergeordneten Dateien sehen, dass von server\share geerbt wurde.
>
> Edit2: man beachte das /r: r - remove all inherited ACEs
Und bei den untergeordneten Ordnern bzw. Dateien war das Erben vorher sicher deaktiviert?
Bei mir klappt das nicht. Muss morgen mal an einem 2008er Server testen, ob der sich anders verhält als mein 2003er bzw. mein
XP.
Zitat von @AlbertMinrich:
> Zitat von @DerWoWusste:
> ----
> Wieso? Sie sind geerbt. Ich nutze hier ein Skript [Edit: auf Vista/2008R2], das geht
>> und kann danach über den Explorer beispielsweise bei untergeordneten Dateien sehen, dass von server\share geerbt wurde.
>
> Edit2: man beachte das /r: r - remove all inherited ACEs
Und bei den untergeordneten Ordnern bzw. Dateien war das Erben vorher sicher deaktiviert?
Bei mir klappt das nicht. Muss morgen mal an einem 2008er Server testen, ob der sich anders verhält als mein 2003er bzw. mein
XP.
> Zitat von @DerWoWusste:
> ----
> Wieso? Sie sind geerbt. Ich nutze hier ein Skript [Edit: auf Vista/2008R2], das geht
>
icacls \\server\share /grant:r Sonstwer:(OI)(CI)(F) /t
>
> Edit2: man beachte das /r: r - remove all inherited ACEs
Und bei den untergeordneten Ordnern bzw. Dateien war das Erben vorher sicher deaktiviert?
Bei mir klappt das nicht. Muss morgen mal an einem 2008er Server testen, ob der sich anders verhält als mein 2003er bzw. mein
XP.
Zitat von @AlbertMinrich:
> Zitat von @DerWoWusste:
> ----
> Wieso? Sie sind geerbt. Ich nutze hier ein Skript [Edit: auf Vista/2008R2], das geht
>
icacls \\server\share /grant:r Sonstwer:(OI)(CI)(F) /t
>
> Edit2: man beachte das /r: r - remove all inherited ACEs
Und bei den untergeordneten Ordnern bzw. Dateien war das Erben vorher sicher deaktiviert?
Bei mir klappt das nicht. Muss morgen mal an einem 2008er Server testen, ob der sich anders verhält als mein 2003er bzw. mein
XP.
Also, habs probiert an einem 2008er Server. Klappt leider nicht. Beispiel im Screenshot.
Mit dem ersten
"icacls c:\eins /t"
sieht man, die Berechtigungen sind auf die beiden Unterordner a und b gleich, der Unterschied ist, a hat sie geerbt (Erben ist aktiviert), bei b sind sie explizit vergeben (Erben ist deaktiviert). Das ist die Ausgangsbasis. Ob Berechtigungen geerbt sind, sind man an dem "(I)".
Nächster Befehl:
"icacls c:\eins /grant:r fritz: (OI)(CI)()F) /t" (zwischen fritz: und (OI) ist nur hier ein Leerzeichen, sonst wird ein (Anti-)Smiley draus)
und wieder mit
"icacls c:\eins /t"
überprüft.
Was ist passiert?
Der Unterordner a hat die Fritz-Berechtigung einmal geerbt und einmal wurde sie explizit vergeben.
Bei Unterordner b wurde sie nur explizit vergeben.
Zum Vergleich hab ich dann die Berechtigungen per Explorer gesetzt (Haken: "Berechtigungen übergeordneter Objekte auf untergeordnete Objekte, sofern anwendbar, vererben....") und nochmal das Ergebnis angezeigt mit
"icacls c:\eins /t"
Man sieht, alle drei Ordner haben jetzt exakt die gleichen Berechtigungen. Beim Ordner c:\eins explizit vergeben, die beiden Unterordner haben sie geerbt. So soll es sein.
[EDIT] Mist, wieso gibts jetzt hier keine Möglichkeit mehr, ein Bild einzufügen. Ich versuchs von zu Hause
So, jetzt:
LÖSUNG 19.11.2011 um 12:06 Uhr
Jetzt hab ich doch noch das richtige Tool gefunden:
setacl.exe
http://helgeklein.com/setacl/documentation/command-line-version-setacl- ...
So sieht der Befehl aus:
SetACL.exe -on c:\eins\zwei -ot file -actn clear -clr "dacl" -actn ace -ace "n:mydomain\myuser;p:change" -ace "n:mydomain\group;p:full" -actn setprot -op "dacl:p_nc" -actn rstchldrn -rst dacl
Damit bekommt auf das Verzeichnis c:\eins der User mydomain\myuser Ändern-Berechtigung:
"-ace "n:mydomain\myuser;p:change""
die Gruppe mydomain\mygroup Vollzugriff
"-ace "n:mydomain\mygroup;p:full""
deaktivieren des Erbens von oben (Berechtigungen werden gelöscht)
"setprot -op "dacl:p_nc""
löschen aller nichtgeerbten Berechtigungen
"clear -clr "dacl""
und das wichtigste, dass ich bisher nirgends finden konnte, durchdrücken der Berechtigungen nach unten
"rstchldrn -rst dacl"
Gruß
Martin
setacl.exe
http://helgeklein.com/setacl/documentation/command-line-version-setacl- ...
So sieht der Befehl aus:
SetACL.exe -on c:\eins\zwei -ot file -actn clear -clr "dacl" -actn ace -ace "n:mydomain\myuser;p:change" -ace "n:mydomain\group;p:full" -actn setprot -op "dacl:p_nc" -actn rstchldrn -rst dacl
Damit bekommt auf das Verzeichnis c:\eins der User mydomain\myuser Ändern-Berechtigung:
"-ace "n:mydomain\myuser;p:change""
die Gruppe mydomain\mygroup Vollzugriff
"-ace "n:mydomain\mygroup;p:full""
deaktivieren des Erbens von oben (Berechtigungen werden gelöscht)
"setprot -op "dacl:p_nc""
löschen aller nichtgeerbten Berechtigungen
"clear -clr "dacl""
und das wichtigste, dass ich bisher nirgends finden konnte, durchdrücken der Berechtigungen nach unten
"rstchldrn -rst dacl"
Gruß
Martin