Aktionen

Windows:Per Batch Berechtigungen auf Ordner inklusive Unterordner setzen mit icacls

Aus znilwiki

Important.png
Hinweis: Am 09.10.2013 wurde dieser Artikel überarbeitet und erweitert

Ich habe öfters die Anforderung, Rechte von Ordner und Dateien per Batch / Skript neu zu setzen. Irgendwie erfinde ich das Rad dabei jedesmal neu - deshalb schreibe ich hier nun endlich mal eine Lösung für das nächste mal nieder :-)

Ich führe hier die aus meiner Sicht wichtigsten Parameter auf - den Rest bitte der icacls Hilfe entnehmen.
icacls ist übrigends bei Windows dabei - das muss nicht erst heruntergeladen werden :-)


1 Allgeiner Aufruf von icalcs

1.1 Rechte gewähren

icacls [Pfad]Datei-oder-Ordner /grant Benutzer-oder-Gruppe:[(CI)(OI)](Rechte)

Bedeutungen

icacls                  : Der eigentliche Befehl (in Windows eingebaut)
[Pfad]Datei-oder-Ordner : Für welche Datei oder Ordner?
/grant                  : Wir wollen Rechte gewähren
Benutzer-oder-Gruppe    : z.B. "Jeder", "Domain\Domänen-Benutzer"
:                       : Wichtig! Der Doppelpunkt zwischen Gruppe/Benutzer und den Rechten
(CI)(OI)                : Veerben auf alle Unterordner und Dateien (macht nur bei Ordner sinn)
(Rechte)                : (F)  = Vollzugriff
                          (M)  = Ändern
                          (RX) = Lesen und Ausführen
                          (N)  = Keinen Zugriff



1.2 Rechte entziehen / Benutzer entfernen

Die einfachste Form ist, neben dem setzen von (N) das wir den Benutzer / die Gruppe von der Datei entfernen:

icacls [Pfad]Datei-oder-Ordner /remove Benutzer-oder-Gruppe

Bedeutungen:

icacls                  : Der eigentliche Befehl (in Windows eingebaut)
[Pfad]Datei-oder-Ordner : Für welche Datei oder Ordner?
/remove                 : Wir wollen einen Benutzer oder Gruppe entfernen
Benutzer-oder-Gruppe    : z.B. "Jeder", "Domain\Domänen-Benutzer"




1.3 Vererbung ein oder ausschalten

Wer versucht einen Benutzer wie im Abschnitt zuvor zu entfernen kann auf das Problem stoßen das es einfach nicht klappen will.
icacls.exe meldet zwar ein "1 Dateien erfolgreich verarbeitet" - aber wenn wir nachsehen ist der Benutzer immer noch drin.
Warum? Der Lösung kommen wir näher wenn wir es von Hand im Explorer machen - da gibt es nämlich dann eine Fehlermeldung "... kann nicht entfernt werden da dieses Objekt übergeordnete Berechtigungen übernimmt."
Der Benutzer oder die Gruppe steht also schon weiter oben im Baum und ist hier nur dank Veerbung angelangt.
Die Lösung ist also, die Veerbung ab dieser Stelle zu unterbrechen:

icacls [Pfad]Datei-oder-Ordner /inheritance:d

Bedeutungen:

icacls                  : Der eigentliche Befehl (in Windows eingebaut)
[Pfad]Datei-oder-Ordner : Für welche Datei oder Ordner?
/inheritance:d          : d -> deaktiviert die Vererbung, kopiert aber die ACL (REchte sind wie zuvor, nur ohne Vererbung von oben
                          r -> entfernt die vererbten ACLs. Testen! Ggf. kann nur noch der Besitzer kann dann darauf zugreifen / Änderungen vornehmen
                          e -> aktiviert die Vererbung

Für den Hausgebrauch emfehle ich die Verwendung von "/inheritance:d" und dem anschliessendem entfernen der nichtgewollten Benutzern.



2 Beispiele

2.1 Ordner: Jeder Vollzugriff (inklusive Unterordner)

icacls D:\Beispielordner /grant Jeder:(CI)(OI)(F)

Vorher:
Rechte-mit-icacls-setzen-001.png
Befehl:
Rechte-mit-icacls-setzen-002.png
Nachher:
Rechte-mit-icacls-setzen-003.png Rechte-mit-icacls-setzen-004.png

in englischen Versionen müsst Ihr "Everyone" statt "Jeder" nehmen.



2.2 Ordner: Domänengruppe Ändern (inklusive Unterordner)

icacls D:\Beispielordner /grant znil\Beispielgruppe:(CI)(OI)(M)




2.3 Ordner: Benutzer lesen und Ausführen (inklusive Unterordner)

icacls D:\Beispielordner /grant Benutzer:(CI)(OI)(RX)

Entspricht der lokalen Gruppe Benutzer (im Englischen: User)


--Bernhard Linz 09:22, 9. Okt. 2013 (CEST)



Anonymer Benutzer #1

77 Monaten zuvor
Punktzahl 0++

Wie kann ich die Gruppe "Domänen-Benutzer" verwenden. Meine Batch-Datei scheitert offenbar am "ä" icacls Postkasten /grant "Schule\Domänen-Benutzer":(CI)(RX,W) dieser Befehl sollte der Gruppe Domänen-Benutzer der Domäne Schule Berechtigungen auf den Ordner Postkasten geben. Das funktioniet aber nicht....

Weiß jemand Rat?

BLinz

77 Monaten zuvor
Punktzahl 0++

Entweder Nutzt du einen anderen Editor unter Windows - z.B. Notepad++ ( http://notepad-plus-plus.org/ ), öffnest deine Batch Datei und stellst oben im Menü unter Sprachen - M - MS-DOS-Stil ein. Oder bearbeite Datei in einer DOS-Box nochmal mit Edit (edit Dateiname.bat) und setze da die Umlaute neu.

Ein Ä in DOS ist ein anders als unter Windows (ASCII und Unicode meine ich). Gruß,

Bernhard

Anonymer Benutzer #3

68 Monaten zuvor
Punktzahl 0++

Zum Thema "ä" in Batch-Datei: Oder Du gibts die Codepage mit den Umlauten an mit dem Befehl: "chcp 1252" als erste Zeile der Batch-Datei.

Gruß

Karl

Name hier einsetzen

5 Monaten zuvor
Punktzahl 0++

Hallo, kÖnnte ich nicht einfach die Änglische Bezeichnung benutzen? Die kommt sehr gut ohne Umlaute aus und das deutsche UI ist nur irgendwie oben aufgesetzt.

Oft hilft es auch den gesamten Pfad in GÄnsefÜsschen zu setzen, weil irgend ein Schlaukopf meinte "sprechende" Verzeichnis-/ Dateinamen verwenden zu müssen.

Anonymer Benutzer #2

71 Monaten zuvor
Punktzahl 0++

Für alle die sich wundern, warum die Beispiele nicht Funktionieren:

hier wurde statt icacls "icalcs" geschrieben ;)

Ein kleiner Fehler mit großer auswirkung...

Trotzdem vielen vielen Dank für diesen Tipp!!!

BLinz

71 Monaten zuvor
Punktzahl 0++

Danke - habs korregiert .... vertipp mich bei dem Vefehl jedes 2. mal ...

Bernhard

BLinz

71 Monaten zuvor
Punktzahl 0++
Befehl .... es wir dnicht besser :-)

Anonymer Benutzer #4

65 Monaten zuvor
Punktzahl 0++

Eine fertige BAT die ich bei uns einsetze.

chcp 1252 icacls "C:\Program Files\[programmordner]" /grant domänen-benutzer:(CI)(OI)(M)

Vielen Dank an alle.

Anonymer Benutzer #5

65 Monaten zuvor
Punktzahl 0++

Hallo,

kann mir wer sagen was da schief läuft?

icacls.exe C: /T /grant:r "Fernwartung":(CI)(OI)(N) /inheritance:e Ungültiger Parameter: "Fernwartung:(CI)(OI)(N)"

Benutzername ist so gewollt ebenso ist es Absicht alles zu verbieten

Danke!

Anonymer Benutzer #6

65 Monaten zuvor
Punktzahl 0++
Hat mir sehr geholfen da die Berechtigungen vorher für Ablage P waren.

Anonymer Benutzer #7

63 Monaten zuvor
Punktzahl 0++
Hatte Windows Server 2012 R2 Standard installiert, aber irgendwie schaft das BS die Berechtigungen so zu verunstalten, dass alle Berechtigungen neu gesetzt werden müssen. Dieses Windows schaft es, dass alle portable Anwendungen wegen falscher Berechtigung nicht starten können oder auf bestimmte Dateien keinen Zugriff haben, da Windows es schaft, das in vielen Ordnern gar kein Benutzer überhaupt drin steht. Berechtigungen im Explorer sind ein Albtraum, da erscheinen viele Fehlermeldungen da der Besitz nicht übernommen werden kann... Ich will doch nur, dass z.B. eine Platte/Partition nur einen Besitzer hat und der Besitzer soll vollen Zugriff auf alles haben, aber das kapiert Windows leider nicht :-(

BLinz

63 Monaten zuvor
Punktzahl 0++
test

Anonymer Benutzer #7

63 Monaten zuvor
Punktzahl 0++

Nachtrag:

Kann mir bitte jemand sagen, warum mit "icacls D: /remove Jeder" usw. trotzdem nicht alle Berechtigungen komplett gelöscht werden? Oder muss ein Parameter angehängt werden, damit alle Berechtigungen spurlos gelöscht werden können? Bei manchen Ordnern/Dateien stehen weiterhin Benutzer/Gruppen drin, obwohl diese zwangsgelöscht werden sollen.

BLinz

63 Monaten zuvor
Punktzahl 0++

Moin,

ja, steht weiter oben - die Vererbung muss dann wahrscheinlich ausgeschaltet werden

Bernhard

Anonymer Benutzer #7

63 Monaten zuvor
Punktzahl 0++
Mir ist aufgefallen, wenn der Benutzer "Jeder" gesetzt wird, und bei der Bearbeitung ein Fehler auftritt, z.B. beim setzen der Berechtigung für "Recycle" (Papierkorb), dann bricht die weitere Bearbeitung einfach ab, wird also nicht weiter fortgesetzt. Parameter /c übergeht Fehlermeldungen, von daher wird das Script weiter ausgeführt und bricht nicht ab.

BLinz

63 Monaten zuvor
Punktzahl 0++

Mhh,

dein Problem ist das du scheinbar an den Systemordner etc. rumfummelst. Wenn du was für Benutzer hast machst du einen Ornder - und an dem inklusive Unterordner kannst du rumkonfigurieren, lass das Hauptverzeichnis in ruhe ... und jau auch den Mülleimer. Am besten löscht du den RECYCLE.BIN Ordner einmal - nach einem reboot sollte er denn wieder neu anlegen.

Bernhard

Hugi

59 Monaten zuvor
Punktzahl 0++

Guten Tag, meine untenstehende Batchdatei läuft, jedoch sehr langsam. Frage: gibt es eine Optimierungsmöglichkeit?

ECHO OFF icacls PfadOrdner /Q /T /Reset icacls PfadOrdner /inheritance:d /Q /T icacls PfadOrdner /grant:r UserGruppe1:(OI)(CI)(R,RX) /remove:g UserGruppe2 /Q /T icacls PfadOrdner /grant:r UserGruppe1:(R,RX) takeown /F PfadOrdner /R /D Y attrib +R PfadOrdner attrib +R PfadOrdner\*.*

PfadOrdner enthält Dateien, sowie Unterordner mit Dateien Vererbung von oben her deaktivieren Berechtigung für UserGruppe1 einschränken UserGruppe2 entfernen Schreibschutz setzen auf Ordner und Unterordner/-dateien

Vielen Dank im Voraus schon!

Gruss Hugi

BLinz

59 Monaten zuvor
Punktzahl 0++

Naja,

wenn er da JEDE Datei und Ordner einmal anfassen muss und da viele Dateien sind - nun dann kann das schon mal sehr lange dauern. Das geht im Explorer von Hand dann auch nicht schneller. Wir reden hier von der puren Performance des Plattensystemes unter dem Server.

Hugi

59 Monaten zuvor
Punktzahl 0++
beim Kommentar abschicken wurden leider alle Zeilenumbrüche entfernt.....

Hugi

59 Monaten zuvor
Punktzahl 0++

Hallo BLinz, Danke für die Antwort. Mit dem Explorer dauert es 30sek (reine Laufzeit, ohne Klicks), mit der Batchdatei jedoch fast 5 Mal länger. Die Dateien befinden sich auf einem Server. Ist ev. hier noch eine Bremse dazwischen, welche einen Unterschied macht zwischen dem Explorer und der Batchdatei?

Gruss Hugi

BLinz

59 Monaten zuvor
Punktzahl 0++

Naja, in der Batch machst du ja auch mehrere Sachen hintereinander - Rechte setzten, Attribute setzten. Sprechen wir über einen einzelnen Befehl oder das ganze Script an sich. Für das ganze Script wäre es ok wenn es 5x länger braucht, schliesslich führt es die einzelnen Aktionen nacheinander durch. Ich weis nicht ob der Explorer so schlau ist das zu kombinieren. Theorethisch könnte man das auf Forfiles umbauen - also anstatt einen icacls Befehl auf eine Struktur loszulassen und danch einen Attrib die einzelnen Dateien einlesen, auf jede Datei ein icalcs und ein attrib. Aber ob das schneller geht ....

Gruß,

Bernhard

enibas370@googlemail.com

53 Monaten zuvor
Punktzahl 0++

Hallo, ich habe auch das Problem, dass ich aus eigener Dummheit den Zugriff für "Jeder" auf Laufwerk c gelöscht habe. Habe nunmehr alle Anweisungen, wie oben beschrieben ausgeführt. Neuen Administrator angelegt usw. icacls /t/Q/C/Reset ausgeführt. Trotzdem habe ich keinen ZUgriff auf C. Was könnte ich noch tun?

Bin für jede Hilfe dankbar.

Gruß Sabine

Denno

11 Monaten zuvor
Punktzahl 0++

Moin,

vielen Dank für deine Anmerkungen zu diesem speziellen Thema.

Ich habe dennoch eine Frage: Wenn ich mehrere Benutzer berechtigen möchte, kommt der Fehler: "nutzer1,nutzer2: Zuordnungen von Kontennamen und Sicherheitskennungen wurden nicht durchgeführt."

Im Batch habe ich folgendes getippt: icacls %%c /grant "nutzer1,nutzer2:(CI)(OI)(RX)"

%%c ist der Pfad. Was weiterhin egal ist.. wenn ich nur Nutzer1 eintippe, klappt es. Beim hinzufügen des Zweiten klappt nichts mehr..

Danke

BLinz

11 Monaten zuvor
Punktzahl 0++
Ich habe noch nirgends gesehen das der Befehl das kann, mehrere Benutzer mit Kommas getrennt. Du musst das für jeden Benutzer einzeln machen, nacheinander. Oder eine Gruppe verwenden.

Markus

8 Monaten zuvor
Punktzahl 0++

i.d. Fall wohl eher icacls %%c /grant nutzer1:(CI)(OI)(RX) nutzer2:(CI)(OI)(RX)

oder?

BLinz

8 Monaten zuvor
Punktzahl 0++
@Markus - getestet?

Denno

8 Monaten zuvor
Punktzahl 0++
Ist aber bei einer individuellen Anzahl pro Ordner mit ueber 30 Personen zu lang (Zeilenbegrenzung in CMD)..

Denno

8 Monaten zuvor
Punktzahl 0++
Wie kann ich den Benutzern, die keine Leserechte haben, die Sichtbarkeit des entsprechenden Ordners verhindern?

BLinz

7 Monaten zuvor
Punktzahl 0++
Das ist ein Feature des Servers das du im Servermanager bei der Freigabe aktivieren kannst, siehe z.B. hier: https://thei…server-2016/

FlammenwerferHanz

7 Monaten zuvor
Punktzahl 0++

@Denno

Das nennt sich zugriffsbasierte Aufzählung und ein Feature der Dateiserverrolle.

r.haemmerli@platit.com

6 Monaten zuvor
Punktzahl 0++

Hallo

wie kann ich "Jeder" aus einem Share entfernen ? C:\WINDOWS\system32>icacls "\\192.168.10.100\Users$\*.*" /remove Jeder:(OI)(CI)(F)

funktioniert nicht
Kommentar hinzufügen
znilwiki freut sich über alle Kommentare. Sofern du nicht anonym bleiben möchtest, trage deinen Namen oder deine Email-Adresse ein oder melde dich an. Du kannst das Feld auch einfach leer lassen.