albertminrich
Goto Top

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.
75f48769248c0877e209064227412d8f

Jetzt individuelle Berechtigungen vergeben.
1cfd0f026e9a31953828d6caa7942787

und diese durch Haken bei "Berechtigungen für alle untergeordneten Objekte durch die angezeigten Einträge, sofern anwendbar, ersetzen." nach unten durchdrücken.
70c75e827511027a63b7473eed015e25


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"  
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:
"cscript //nologo xcacls.vbs c:\eins /i enable /f /s"  
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:
"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"  
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

Content-Key: 176240

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

Ausgedruckt am: 28.03.2024 um 17:03 Uhr

Mitglied: AlbertMinrich
AlbertMinrich 14.11.2011 um 17:11:08 Uhr
Goto Top
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"

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"  

aber schöner wär´s mit einer Zeile.
Mitglied: DerWoWusste
DerWoWusste 14.11.2011 um 21:34:50 Uhr
Goto Top
Moin.

Und was ist mit icacls ... /inheritance?
Mitglied: AlbertMinrich
AlbertMinrich 15.11.2011 um 06:30:50 Uhr
Goto Top
Zitat von @DerWoWusste:
Moin.

Und was ist mit icacls ... /inheritance?

Ja, den Parameter "inheritance" hab ich auch öfters gelesen. Bei meinem icacls gibt´s den aber gar nicht und ein anderes hab ich nicht gefunden.
Wenn du einen Downloadlink hast, ich würd´s mir gern mal anschauen.

Gruß
Martin
Mitglied: DerWoWusste
DerWoWusste 15.11.2011 um 11:51:59 Uhr
Goto Top
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.
Mitglied: AlbertMinrich
AlbertMinrich 15.11.2011 um 13:45:34 Uhr
Goto Top
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
Mitglied: DerWoWusste
DerWoWusste 15.11.2011 um 14:14:38 Uhr
Goto Top
(OI)(CI)=object inherit und container inherit. Das ist es doch.
Mitglied: AlbertMinrich
AlbertMinrich 15.11.2011 um 14:34:17 Uhr
Goto Top
Zitat von @DerWoWusste:
(OI)(CI)=object inherit und container inherit. Das ist es doch.

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"  
Damit bekommt der User mydomain\username Vollzugriff und das wird nach unten vererbt. ABER NUR, wenn bei den untergeordneten Ordnern das Erben aktiv ist. Ist es aber nicht unbedingt immer.


So könnte ich es zwar durchdrücken
"icacls c:\eins /grant mydomain\username:(OI)(CI)F /t"  
so dass alle untergeordneten Ordner die gewünschten Berechtigungen haben, aber dann sind sie nicht geerbt sondern explizit gesetzt.
Mitglied: DerWoWusste
DerWoWusste 15.11.2011 um 15:16:14 Uhr
Goto Top
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 
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
Mitglied: AlbertMinrich
AlbertMinrich 15.11.2011 um 19:56:36 Uhr
Goto Top
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 
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.

Gruß
Martin
Mitglied: AlbertMinrich
AlbertMinrich 17.11.2011 um 17:30:53 Uhr
Goto Top
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 
> 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
>
icacls \\server\share /grant:r Sonstwer:(OI)(CI)(F) /t 
> 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.

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:
8bfa742f2e6104f8747b3acddaad01f2
Mitglied: AlbertMinrich
AlbertMinrich 19.11.2011 um 12:06:00 Uhr
Goto Top
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