Batch cacls und icacls richtige Syntax

Zhen

Lt. Junior Grade
Registriert
Aug. 2009
Beiträge
299
Hallo CBler,

Ich hätte da ne Frage bezüglich icacls und cacls. Die Commandline Befehle von Windows!
Ich versuche verzweifelt mit cacls/icacls die Rechte für eine Netzwerkfreigabe zu setzen.

Unter Windows XP funktionierts bei mir mit folgendem Befehl:
Code:
cacls.exe "C:\Ordner" /G Jeder:C /E /T

Unter Windows 7 funktioniert es jedoch nicht. Ich hab dann keinen Vollzugriff auf den gewählten Ordner. Ich habe auch schon "icacls" versucht, aber irgendwie bin ich wohl zu dämlich um es zu bedienen :freak:

Hab da auch folgendes probiert, aber leider ohne erfolg:
Code:
icacls "C:\Ordner" /grant Jeder:F //wird erfolgreich ausgeführt, aber ohne Ergebnis
icacls \\Server\Freigabe /grant Jeder:F //wird erfolgreich ausgeführt, aber ohne Ergebnis
icacls "C:\Ordner" /t /c /e /g Jeder:F //Fehler... ungültiger Parameter /e

Hoffe ihr könnt mir da die richtige Reihenfolge mit den richtigen Befehlen für icacls verraten. Hab irgendwie große Schwierigkeiten wenns darum geht die Syntax aus der Hilfe von icacls /? zu verstehen.
 
Zuletzt bearbeitet:
Nur um sicher zu gehen mal allgemein:

cacls.exe xcacls.exe und xcacls.vbs sind veraltet und nicht mehr von MS supported. Aktuell ist icacls.exe.

Mit icacls.exe setzt du Rechte auf NTFS Objekte, also Ordner und Dateien.
Rechte auf Freigaben setzt du mit net share (Hilfe über net help share)


Du musst also wissen ob du Rechte auf Freigaben, oder im NTFS Filesystem setzen musst.

icacls \\Server\Freigabe setzt also nur Rechte im Dateisystem, falls du Berechtigungen für die Freigabe brauchst bist du mit icacls.exe falsch

icacls "C:\Ordner" /t /c /e /g Jeder:F kann nicht klappen, weil die Syntax veraltet ist
 
Zuletzt bearbeitet:
Das cacls.exe etc. veraltet sind weiß ich ja bereits. Ich komme nur mit der Syntax von dem verdammten icacls nicht zu recht bzw. auch nicht mit den Befehlen davon.
 
Bei meinem Windows 7 gibt es keine Gruppe "Jeder" ;) Probier es mal mit "Benutzer".
 
"Jeder" ist ein allgemeines Sicherheitsprinzipal, dass es in jedem Windows gibt. Es ist keine Benutzergruppe, daher siehst du es nicht in der Userverwaltung.

Mit icacls C:\meinordner werden Berechtigungen für "Jeder" sichtbar.
Ergänzung ()

Zhen schrieb:
Das cacls.exe etc. veraltet sind weiß ich ja bereits. Ich komme nur mit der Syntax von dem verdammten icacls nicht zu recht bzw. auch nicht mit den Befehlen davon.

Bist du denn sicher Rechte für NTFS setzen zu müssen? Du sprichst im Ursprungspost von Freigaben. Freigaben werden mit net share verwaltet.
 
Kann mir den jemand sagen wie ich die Rechte bei Freigaben setze?
Soweit ich das nun verstanden habe, bewirkt der folgende Befehl lediglich, dass ich die Rechte im NTFS Dateisystem bekomme, aber nicht auf die Netzwerkfreigabe selbst.

Code:
icacls "C:\Ordner" /c /grant:r Jeder:f
Ergänzung ()

Also jetzt raff ich nichts mehr...

Mit cacls konnte ich doch auch die Rechte für die Freigabe setzen.
Wieso mit icacls auf einmal nicht mehr?
 
Yuuri... deine Kommentare helfen mir wirklich sehr viel weiter... :o

Soweit ich es mitbekommen habe, kann man mit "net share" lediglich die Freigabe setzen, aber nicht die Rechte dazu. Deswegen hab ich ja auch bei Windows XP immer cacls als Ergänzung gebraucht...

Korrigiert mich bitte wenn ich falsch liege :)
 
Wenn du auch nur ein Mal in die Hilfe gesehen hättest, wären meine Kommentare doch schon hilfreich. icacls /? sagt dir, dass es keinen /e Parameter gibt. net share /? sagt dir folgendes:
Code:
Die Syntax dieses Befehls lautet:

NET SHARE
Freigabename
      Freigabename=Laufwerk:Pfad [/GRANT:Benutzer,[READ | CHANGE | FULL]]
                                 [/USERS:Nummer | /UNLIMITED]
                                 [/REMARK:"Text"]
                                 [/CACHE:Manual | Documents | Programs | BranchCache | None]
      Freigabename [/USERS:Anzahl | /UNLIMITED]
                   [/REMARK:"Text"]
                   [/CACHE:Manual | Documents | Programs | BranchCache | None]
      {Freigabename | Gerätename | Laufwerk:Pfad} /DELETE
      Freigabename \\Computername /DELETE
Die Berechtigungen auf dem Server selbst für den User, musst du auch auf dem Server mittels icacls setzen.
 
net help share gibt folgendes zurück:

NET SHARE Freigabename=Laufwerk:Pfad /GRANT:Benutzer,[READ | CHANGE | FULL]



Wenn du mit cacls Rechte gesetzt hast, dann waren das NTFS-Rechte auf den freigegebenen Ordner.

Um Zugriff übers Netzwerk zu haben brauchst du ja auf beiden Ebenen Rechte. Erst auf Freigabeebene, dann auf Filesystem Ebene.


Um die Verwirrung jetzt mal zu komplettieren: Wenn du Objekte manipulieren willst, die als high privilege integrity gespeichert sind, dann geht das nur in einer Command Box mit high integrity Rechten, zu deutsch in einer administrativen Command Box, die per Rechtsklick - "Ausführen als Admin" gestartet wurde.

Wie erkenne ich ein Objekt mit high privilege?
Code:
C:\>icacls c:\
c:\ VORDEFINIERT\Administratoren:(F)
    VORDEFINIERT\Administratoren:(OI)(CI)(IO)(F)
    NT-AUTORITÄT\SYSTEM:(F)
    NT-AUTORITÄT\SYSTEM:(OI)(CI)(IO)(F)
    VORDEFINIERT\Benutzer:(OI)(CI)(RX)
    NT-AUTORITÄT\Authentifizierte Benutzer:(OI)(CI)(IO)(M)
    NT-AUTORITÄT\Authentifizierte Benutzer:(AD)
    Verbindliche Beschriftung\[B]Hohe Verbindlichkeitsstufe[/B]:(OI)(NP)(IO)(NW)

Auf deutsch ist das mit "Hohe Verbindlichkeitsstufe" übersetzt. Objekte unter C:\ brauchen also eine Adminbox zum Rechte setzen, während selbst angelegte Ordner medium sind und von überall aus manipulierbar sind.

Sollte im Hinterkopf behalten werden, wenn du an System Ordnern Änderungen vornehmen willst. Ist kompliziert, sollte aber mal erwähnt werden weil die Technik nunmal eben komplexer geworden ist als das 11 Jahre alte XP.
 
Zuletzt bearbeitet:
Na gut danke euch beiden für die Hilfe. Werds gleich mal ausprobieren und gucken ob ichs doch noch hinbekomme! ;) :)


EDIT:
Also für alle die ebenfalls so auf dem Schlauch stehen wie ich, poste ich mal den Befehl für Freigaben mit Vollzugriff.

Unter Windows XP:
Code:
net share freigabename="OrdnerPfad" // Freigabe
cacls "OrdnerPfad" /G Jeder:C /E /T // Vollzugriff darauf

Unter Windows 7:
Code:
net share freigabename="OrdnerPfad" /grant:Jeder,Full // Freigabe + Vollzugriff darauf

Diese Befehle bewirken, dass das Sicherheitsprinzipal "Jeder" VOLLZUGRIFF auf die Freigabe bekommt.

Wenn jemand bessere Vorschläge, Tipps oder Ratschläge hat, dann bin ich immer offen dafür :)
Und falls ich hier mit irgendwas falsch liege, dann bitte berichtigen, will ja keinen Unsinn erzählen :D
 
Zuletzt bearbeitet:
Zurück
Oben