latino
Goto Top

Wie setze ich Berechtigung -Nicht Ändern- -Nicht Ausführen- mit ICACLS auf Dateien? (Rechteverweigerung in Windows 7)

Habe in Windows 7 Professional im GUI-Dialog allen Benutzern das Recht 'Datei anhängen' und 'Datei ausführen' verweigert.

Nun kann kein Benutzer eine Datei (versehentlich) anklicken und diese läuft los, es kann auch keiner eine Datei ändern. Sehr wohl aber Lesen, Kopieren, Löschen, usw.

Nun möchte ich dies zu automatisierungszwecken in einer BAT/CMD nachbilden. Das müsste mit ICACLS gehen, aber da ich aus der Beschreibung nicht schlau werde bitte ich hier um Hilfe.

Der Dialog sieht im Detail so aus:

Im Windows-Explorer Rechtsklick auf 'D:\Verzeichnis'
-- Menüpunkt Eigenschaften
-- Reiter Sicherheit
-- Button Erweitert
-- Button Berechtigungen ändern
-- Button Hinzufügen
-- Eingabe Objektname 'JEDER'
-- Button 'OK'
-- Listen-Auswahl: 'Nur Dateien'
-- Haken setzen bei 'Datei ausführen' 'Verweigern'
-- Haken setzen bei 'Datei anhängen' 'Verweigern'
-- Button 'OK'
-- Haken setzen bei 'Alle Berechtigungen für untergeordnete Objekte ...'
-- Windows Sicherheit Nachfrage (nach Vererbung) mit 'OK' bestätigen
-- Windows Sicherheit Nachfrage (nach Verweigerung) mit 'OK' bestätigen
(in der Anzeige erscheint nun 'JEDER' mit speziellen Berechtigungen), mit 'OK' bestätigen,
(in der Anzeige erscheint nun 'JEDER' unter Gruppen oder Benutzernamen), mit 'OK' bestätigen.

Nun kann kein Benutzer (auch kein Admin) eine Datei (versehentlich) anklicken und diese läuft los, es kann auch keiner eine Datei ändern (kurz mal reinschauen, abspeichern). Sehr wohl aber lesen, Kopieren, löschen, usw.

Meine bisherigen Forschungen nach ICACLS ergaben etwas in der Art ...

ICACLS D:\Verzeichnis /DENY /T ... AD,X ...

Bei den ... würde ich mich sehr über die Hilfe eines hier fachkundigen Menschen freuen.

Herausbekommen habe ich des Weiteren noch, dass (OI)(CI) soviel heißt wie 'Dieser Ordner, Unterordner und Dateien' ... aber was nun das für meinen Fall wichtige 'Nur Dateien' heißt, da bin ich auch auf Eure Hilfe hier angewiesen.

Besten Dank und freundlicher Gruß

PS: Sollte ich diese Frage an der falschen Stelle hier gestellt haben bitte ich um zweckdienliche Verbesserungsvorschläge face-wink

Content-ID: 235040

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

Ausgedruckt am: 22.11.2024 um 11:11 Uhr

Sheogorath
Sheogorath 09.04.2014 um 21:11:37 Uhr
Goto Top
Latino
Latino 11.04.2014 um 09:58:09 Uhr
Goto Top
Hallo Chris,

Besten Dank für Deine schnelle Antwort. Habe eine Weile gebraucht und mir alles, was Du geschickt hast, genau angeschaut.

Zitat von @Sheogorath:

Moin,

am besten schaust du bei systemanwendungen wie ICACLS immer bei MSDN nach:
Meine Suche:
http://social.msdn.microsoft.com/Search/en-US?query=icacls&emptyWat ...

Leider hat es mir nicht sehr geholfen, dass Du einfach nach dem Befehl suchst und mir die Ergebnisliste (ich möchte fast meinen - unbesehen) hier her linkst.


Dein bestes Ergebnis ist die Beschreibung des Befehls, aber wie ich schon sagte, da ich aus der Beschreibung nicht schlau werde, gab es für mich keine neue hilfreiche Information.


Auch da habe ich hineingeschaut, aber da hat einer nur ein Problem mit einem IF (der hatte wohl nur eine Klammer vergessen), aber keine Details über ICACLS


Eine wirklich gute allgemeine Einführung, sehr informativ. Danke Dir sehr für den guten Link. Habe den für alle Fälle in meinen Favoriten gespeichert.


Nun zu meinem Problem, da bin ich inzwischen etwas weiter. Der ICACLS müsste heißen:

ICACLS D:\Verzeichnis /DENY (OI)(IO)(AD,X) /T

Dies setzt alle Dateien in allen Unterverzeichnissen auf 'Nicht modifizierbar' und 'Nicht ausführbar', was das Gewünschte war.

Zwei Fragen sind in diesem Zusammenhang noch offen:

Frage 1:

ICACLS setzt, wie oben aufgerufen, zusätzlich noch (ganz eigeninitiativ) die Verweigerung auf Synchronisieren (S,AD,X), ... das stört mich jetzt noch nicht, könnte mir aber in Zukunft Schwierigkeiten machen, weswegen ich hier noch nach einer Lösung suche.

Frage 2:

Leider werden diese Rechte aber (trotz Option /T) nicht an unter D:\Verzeichnis gemountete Platten gehängt, so dass ich nun die Frage habe, wie ich Rechte an einen gesamten 'bereitgestellten Datenträger' in der Kommando-Zeile vergebe.

Im Dialog geht das, indem man nach einem Rechtsklick auf den Bereitstellungspunkt die Sicherheitsoptionen für den 'Bereitgestellten Datenträger' entsprechend setzt.

Da es viele mehrere 'Bereitgestellte Datenträger' sind, bleibt die Frage nach einer Kommandozeilen-/Batch-Lösung offen.

Mit freundlichen Grüßen
Latino
Sheogorath
Lösung Sheogorath 11.04.2014, aktualisiert am 13.04.2014 um 11:54:29 Uhr
Goto Top
Moin,

ich glaube der Fehler ist recht leicht:

dir fehlt die Aussage, wer gesperrt werden soll. (allerdings ist "jeder") nicht wirklich zu empfehlen. Sperren geht vor erlauben, das bedeutet, das JEDER der in der Gruppe jeder drin ist, auch Admins, geblockt werden. Korrigiert für "Jeder" würde deine Zeile so aussehen:

ICACLS D:\Verzeichnis /DENY jeder:(OI)(IO)(AD,X) /T

Sollte es bei dir nicht funktionieren, scheint bei dir etwas anders sein, als bei mir, denn bei mir funktioniert der Aufruf (Schau mal ob das Filesystem auch überall NTFS ist)

Die "Monted Drives" stören nicht, solange das Filesystem passt und der Aufruf als Admin läuft (fiel mir beim Aufruf auf).

Warum S auch gesetzt wird, kann ich dir sagen: Du verweigerst ja das Anfügen von Daten, folglich kannst du nichts neues Hinzufügen, wie willst du da sauber synchronisieren? Synchronisieren ist immer in 2 Richtungen, alles andere ist ein einfacher Kopiervorgang.

Gruß
Chris
Latino
Latino 12.04.2014 um 11:13:55 Uhr
Goto Top
Hallo Chris,

Danke für Deine Anregung. Ja, ich glaube, so funktioniert es.

Und das mit 'Jeder' habe ich mit Absicht so gemacht. Möchte auch gerade zB mich als Administrator davor bewahren, einfach mal schnell auf eine ausführbare Datei zu klicken ...

Oder mal schnell in ein Dokument hineinschauen und dann wie üblich 'Speichern' ... statt 'Schließen'

Wenn ein Administrator etwas ändern will, dann kann er die entsprechende Datei ja irgendwo hin kopieren, wo er alle Rechte hat, dort nach Lust und Laune 'Ändern' oder 'Ausführen', und/oder die geänderte Datei dann zurück speichern. Klingt auf den ersten Blick etwas umständlich, die kleine Sicherheit ist es mir aber durchaus wert.

Nur eben das Problem muss ich noch lösen: Wie setze ich Berechtigungen auf einem 'bereitgestellten Datenträger' ? ... GUI-Terminologie für ein gemountetes Laufwerk.

Der ICACLS setzt alle Berechtigungen ober- und unterhalb der Platte am Mountpunkt, aber eben die entsprechend gemountete Platte nicht. Das hat zur Konsequenz, dass neue Ordner auf dieser Platte ohne die Berechtigungen/Verweigerungen erstellt werden, und nicht von der Platte erben. In der GUI ist das anders, was man da im Dialog 'Sicherheit' an den 'bereitgestellten Datenträger' an Rechten vergibt, das erbt dann auch jedes neu angelegte Objekt, jedes Verzeichnis.

Vielleicht formuliere ich die Frage noch anders? Wie bringe ich ICACLS dazu, Berechtigungen auf den Root einer gemounteten Platte zu vergeben?

Das Problem habe ich übrigens bei jedem ICACLS, nicht nur bei dem, der Gegenstand der Frage war.

Mit freundlichem Gruß und den besten Wünschen für ein schönes Wochenende.
Latino

PS: Auch wenn ich jetzt meine Berechtigungen mit ICACLS schon ziemlich gut vergeben kann und damit auch recht zufrieden bin, bin ich auf etwas gestoßen, was ich für einen Fehler halte:

Sowohl RoboCopy als auch XCopy laufen beim Kopieren eines Verzeichnisses in ein so geschützes Verzeichnis bei der ersten zu kopierenden Datei auf einen Fehler: Keine Zugriffsberechtigung. Der gleiche Vorgang über die GUI läuft problemlos ...

Kannst Du Dir das erklären ?
Sheogorath
Sheogorath 12.04.2014 um 13:09:36 Uhr
Goto Top
Moin,

Führst du X bzw. Robocopy als Admin aus? Ist der User wirklich Besitzer des Ordners oder darf ändern? (Die GUI holt sich da teilweise Rechte ohne Bescheid zu sagen.) nunja, was den Mount-Point angeht, halte ich es für wahrscheinlich, dass dein Benutzer nicht die passenden Rechte hat, denn bei mir klappte es. Wenn es wirklich nicht geht, markiere einfach die Ordner, rechtsklick Berechtigungen setzten, fertig. Per cmd hier auch wieder der Hinweis, dass du als Administrator unterwegs sein musst, also eine per Win+R aufgerufene CMD läuft nicht, wenn deine UAC aktiv ist.

Eine Admin-CMD erkennst du am "Administrator: " im Titel, falls du dass noch nicht wusstest.

Gruß
Chris
Latino
Latino 12.04.2014 um 13:35:54 Uhr
Goto Top
Hallo Chris,

Zu Deiner Frage: Ja, sicher.

Es klappt ja nur die erste Datei nicht. Daraus Schließe ich, dass ich alles richtig gemacht/berechtigt habe. Am Wochenende ist so ein eigenlobender Satz erlaubt, oder face-wink

Habe in meiner CMD sogar schon einen Workaround: Eine Datei mit Namen !!!!!!!!.!!! in einem Ordner mit Namen !!!!!!!! im Quellverzeichnis anlegen (die !!!... ordnen sie ganz oben in der Sortierreihenfolge ein).

Dann läuft Xcopy bzw RoboCopy mit dieser Datei auf den oben genannten Berechtigungsfehler, und alle anderen Dateien (inklusive der, welche vorher - ohne Workaround - nicht wollte) wird nun anstandslos kopiert.

Grüße mit Stirnefalten wegen Nachgrübeln face-wink

PS: Kannst Du (falls DU Zeit hast, schildern, was DU genau gemacht hast - vielleicht kann ich es ja dann bei mir nachstellen und merke dann, wo mein Fehler war ...)?
Latino
Latino 12.04.2014 um 13:37:33 Uhr
Goto Top
PS: Zur zweiten Frage von Dir: Ja, alles als Administrator gemacht.

Wobei ich nicht glaube, dass es notwendigerweise der Administrator sein muss, es muss eigentlich nur der Besitzer der entsprechenden Verzeichnisse sein.

Gruß
Latino
Latino 12.04.2014 um 15:14:10 Uhr
Goto Top
Hallo Chris,

für den Fall, dass Du (oder jemand anderer) noch nicht Interesse/Lust verloren hast an dieser Aufgabe, hier im Detail, was ich gemacht habe. Habe versucht, es auf das wichtigste zu reduzieren, hoffentlich ist es noch verständlich geblieben face-wink

Im Ordner C:\HDDs sind alle Mount-Points der in Frage kommenden Platten (HDDs):

C:\HDDs\1\ ... Verzeichnis, in das HDD 1 gemounted wurde
C:\HDDs\2\ ... Verzeichnis, in das HDD 2 gemounted wurde, usw

Ein Verzeichnis "Verz1vHDD1" wurde im Root der Platte 'HDD 1' angelegt,
eine Datei "Datei1vHDD1.TXT" wurde im Verzeichnis "Verz1vHDD1" angelegt:

C:\HDDs\1\Verz1vHDD1\Datei1vHDD1.TXT

Nun vergebe ich "MeineRechte" mit ICACLS von dem Verzeichnis C:\HDDs ausgehend, also

CD /D C:\HDDs
C:\HDDs> ICACLS * SID:MeineRechte /T

das setzt bei mir Rechte auf folgende Objekte:

auf C:\HDDs\1 ... Verzeichnis, in das HDD 1 gemounted wurde

auf Verz1vHDD1
auf Datei1vHDD1.TXT

Wenn ich nun eine weitere Datei anlege, zB

C:\HDDs\1\Verz1vHDD1\Datei2vHDD1.TXT

dann erbt diese MeineRechte von Verz1vHDD1 ... das ist so OK und gewünscht

Auch ein Unterverzeichnis, zB

C:\HDDs\1\Verz1vHDD1\UnterVerz\

erbt MeineRechte von Verz1AufHDD1 ... auch OK, auch gewünscht.

Aber ein jetzt neu angelegtes Verzeichnis im Root von HDD 1

C:\HDDs\1\VerzNEUvHDD1\

hat von "MeineRechte" keine Ahnung, und vererbt somit auch nichts an UnterObjekte

Meine Vermutung (oder mein Fehler):
ICACLS setzt "MeineRechte" nicht ins Root-Verzeichnis,
sehr wohl aber auf das davor liegende Mountverzeichnis ("1") und in die nachfolgenden Objekte ...

Mit der GUI kann ich das beheben, indem ich dem 'bereitgestellten Datenträger' MeineRechte verpasse, ...

da es aber nicht nur HDD 1 ist, sondern HDD 01 bis 94, wird man verstehen, dass ich das nicht so gern mit der GUI machen wollte.

Freundliche Grüße und ein schönes Wochenende face-wink
Latino
Latino 13.04.2014 um 11:53:46 Uhr
Goto Top
Zitat von @Sheogorath:

ICACLS D:\Verzeichnis /DENY jeder:(OI)(IO)(AD,X) /T

Du hast mit Deiner Code-Zeile eigentlich meine eingangs gestellte Frage beantwortet. Besten Dank, da hast Du mir sehr geholfen. Wenn ich mir die Zeile anschaue, dann sieht die eigentlich recht einfach aus, und ich frag' mich, warum ich damit so ein Problem hatte face-wink

Die hier schon von mir angesprochenen Folge-Schwierigkeiten kann ich ja demnächst noch deutlich herausarbeiten und als eigene Frage hier einstellen.

Diese Frage jedenfalls markiere ich als (von Dir) gelöst.

Mit freundlichem Gruß
Latino