Verwenden von ICACLS zum Festlegen von Berechtigungen für Benutzerverzeichnisse


16

Ich versuche, die Berechtigungen für Benutzerverzeichnisse zurückzusetzen, und habe einige Probleme mit dem letzten Schritt meines Skripts. Mein Skript übernimmt im Grunde genommen den Besitz des gesamten Benutzerverzeichnisses, setzt die Berechtigungen für alle Dateien und Ordner für das Verzeichnis zurück, gewährt explizit die von mir benötigten Berechtigungen, stoppt die Vererbung von Berechtigungen aus übergeordneten Ordnern und legt den rechtmäßigen Eigentümer (angegebenen Benutzer) für alle Dateien fest und Ordner und entfernt dann die Erlaubnis, die ich mir selbst gegeben habe, damit ich mit den Dateien arbeiten kann. Ich brauche diesen letzten Schritt, um mich aus ALLEN Dateien und Unterordnern zu entfernen, aber im Moment werden nur die% userDir% entfernt und alle geerbten Berechtigungen bleiben unten. Dies ist ein offensichtlicher Mangel bei ICACLS. Kennt jemand einen anderen Weg, um dies zu erreichen?

set /p userDir=Enter the login of the user's directory you're modifying permissions for. (i.e. jDoe)
TAKEOWN /f "E:\Home Directories\%userDir%" /r /d y
ICACLS "E:\Home Directories\%userDir%" /reset /T
ICACLS "E:\Home Directories\%userDir%" /grant:r "MYDOMAIN\%userDir%":(OI)(CI)F /grant:r "SYSTEM":(OI)(CI)F /grant:r "MYDOMAIN\%username%":(OI)(CI)F
ICACLS "E:\Home Directories\%userDir%" /inheritance:r
ICACLS "E:\Home Directories\%userDir%" /setowner "MYDOMAIN\%userDir%" /T
ICACLS "E:\Home Directories\%userDir%" /remove "MYDOMAIN\%username%"

Ich spiele mit dem nicht unterstützten Skript XCACLS.vbs, das von Microsoft erstellt wurde, und ich hatte Glück, es für die letzte Zeile meines Skripts zu verwenden. Anstelle dieser ICACLS-Datei "E: \ Home Directories \% userDir%" / remove "MYDOMAIN \% username%" habe ich sie durch cscript.exe xcacls.vbs "e: \ Test" / E / R "MYDOMAIN \% ersetzt. username% "Dies funktioniert, aber ich möchte die Verwendung von XCACLS.vbs wirklich vermeiden, da es schwerwiegende Leistungsprobleme gibt. Irgendwelche anderen Ideen?
pk.

Antworten:


18

Eine Beobachtung zuerst: Jedes Mal, wenn Sie die Vererbung blockieren, können Sie die zukünftige Flexibilität nicht mehr nutzen. Ich vermeide es, die Vererbung um jeden Preis zu blockieren.

Wenn Sie möchten, dass Benutzer den Inhalt des Ordners "E: \ Home Directories" der obersten Ebene auflisten können, ziehen Sie beispielsweise die folgende Berechtigung in Betracht:

  • SYSTEM - Vollzugriff - Wird auf diesen Ordner, Unterordner und Dateien angewendet
  • BUILTIN \ Administratoren - Vollzugriff - Wird auf diesen Ordner, Unterordner und Dateien angewendet
  • BUILTIN \ Authentifizierte Benutzer - Lesen und Ausführen - Wird nur auf diesen Ordner angewendet

Die letzte Berechtigung wird nicht in die Unterordner übernommen. In jedem Unterordner bleibt die Vererbung aktiviert und Sie geben einfach den Benutzer mit den Rechten "Ändern" oder "Vollzugriff" an (je nachdem, wie Sie der Meinung sind, dass Benutzer Berechtigungen in ihrem Basisverzeichnis festlegen können). (Normalerweise habe ich diese letzte Berechtigung festgelegt, indem ich "Authentifizierte Benutzer" im nicht "Erweiterten" Sicherheitseigenschaftenblatt hinzufügte und die Kontrollkästchen "Lesen" und "Lesen und Ausführen" deaktivierte. Anschließend gehe ich zum Dialogfeld "Erweitert" und ändere das Kontrollkästchen "Übernehmen auf" -Einstellung für diesen ACE auf "Nur dieser Ordner". Dies ist in Bezug auf die Anzahl der Klicks der einfachste Weg, ihn festzulegen.)

Dann wird Ihr Skript:

set /p userDir=Enter the login of the user's directory you're modifying permissions for. (i.e. jDoe)
TAKEOWN /f "E:\Home Directories\%userDir%" /r /d y
ICACLS "E:\Home Directories\%userDir%" /reset /T
ICACLS "E:\Home Directories\%userDir%" /grant:r "MYDOMAIN\%userDir%":(OI)(CI)F
ICACLS "E:\Home Directories\%userDir%" /setowner "MYDOMAIN\%userDir%" /T

Ich bin der festen Überzeugung, dass das Hinzufügen der oben beschriebenen Berechtigung "Authentifizierte Benutzer" mit der Vererbung "Nur dieser Ordner" Ihnen das bietet, wonach Sie suchen, und Ihnen künftige Flexibilität bietet, wenn Sie dies herausfinden dass Sie eine Berechtigung festlegen müssen, die möglicherweise in Zukunft in allen Benutzer-Basisverzeichnissen vererbt werden muss.

Dies ist meine SOP für Benutzer-Ausgangsverzeichnisse, umgeleitete Ordner "Eigene Dateien", "Desktop" usw. und für Roaming-Benutzerprofilverzeichnisse. Es funktioniert super

Bearbeiten

Betreff: Ihr Kommentar zum Zugriff auf BUILTIN \ Administratoren

Ich habe im Laufe der Jahre verschiedene Auseinandersetzungen mit Leuten darüber geführt, wie ich BUILTIN \ Administrators Zugriff gewähren soll.

  • Es ist einfacher, eine bestimmte Klasse von Benutzerproblemen zu lösen, wenn Sie an ihre Dateien gelangen. Es ist ein Schmerz, "Besitz zu übernehmen" und kann recht langsam sein, wenn auch eine große Anzahl von Dateien vorhanden ist.

  • Wie Sie bei ICACLS gesehen haben, können BUILTIN \ Administratoren den Besitz "zuweisen" (abgesehen davon, dass sie ihn "übernehmen"), sodass keine "Sicherheit" hinzugefügt wird, wenn die Dateien nicht an erster Stelle für BUILTIN \ Administratoren zugänglich sind.

  • Wenn Sie nicht die Überwachung verwenden (und eine potenziell große Anzahl falsch positiver Einträge durchsuchen), wird kein Prüfpfad erstellt, wenn ein BUILTIN \ Administrators-Benutzer den Besitz von Dateien übernimmt, auf die er nicht zugreifen sollte, und diese kopiert und dann Gibt die Dateien an ihren "richtigen" Besitzer und ihre Berechtigung zurück.

  • In der Microsoft-Welt soll das Verschlüsseln von Dateisystemen (Encrypting Filesystem, EFS) das Problem lösen, dass nicht autorisierter BUILTIN \ Administrators-Zugriff verhindert wird. NTFS-ACLs lösen dieses Problem nicht. (Offensichtlich ist EFS nicht die einzige Show in der Stadt. Die Verschlüsselung ist die eigentliche Antwort auf das Problem, den Zugriff des Netzwerkadministrators einzuschränken, unabhängig davon, wie Sie es aufteilen.)

Wenn Sie BUILTIN \ Administrators nicht mit dem Zugriff auf Benutzer-Ausgangsverzeichnisse (und in der Tat auf jeden Ordner) angeben, erhöhen Sie meines Erachtens die Komplexität und die Zeit, die zur Behebung von Problemen erforderlich sind, während Sie weniger als keine echte Sicherheit bieten ("less than none") "weil es ein falsches Gefühl der Sicherheit vermittelt, wo es keines gibt".

Ich habe es aufgegeben, mich mit Menschen logisch auseinanderzusetzen. Bei manchen Menschen scheint es ein emotionales Problem zu sein. Es ist wie mit dem albernen ACE "Verweigern / Empfangen als", der am Stamm einer Exchange-Organisation platziert wird, um zu verhindern, dass bestimmte privilegierte Gruppen Benutzerpostfächer öffnen. Es bietet keine wirkliche Sicherheit (da ohne Prüfung der ACE bei Bedarf entfernt / erneut angewendet werden könnte), ein falsches Sicherheitsgefühl und behindert die Lösung wirklicher Probleme.

Auch wenn Sie BUILTIN nicht wie mein Argument tun \ Administratoren Zugriff haben Sie wollen die Vererbungshierarchie intakt halten , indem Sie „Nur diesen Ordner“ Vererbung , wo angemessen. Das Blockieren der Vererbung in Berechtigungshierarchien ist ein sicheres Zeichen dafür, dass etwas am Entwurf "kaputt" ist (invertiert usw.).


1
Empfehlen Sie, BUILTIN \ Administrators vollen Zugriff auf die gesamte Verzeichnisstruktur zu gewähren? Ich bin der Meinung, dass wir (Administratoren) wirklich keinen uneingeschränkten Zugriff auf die Benutzerverzeichnisse / -profile aller haben sollten, ohne die Verantwortung zu übernehmen.
pk.

+1, liebe die Punkte über falsches Gefühl der Sicherheit ...
DCookie

1

Zunächst einmal vielen Dank für Ihren Skriptauszug. Ich habe an der gleichen Sache gearbeitet, aber war an einem anderen Ort fest. Auf meiner SBS 2008-Box funktioniert der folgende Code für mich (vorausgesetzt, er wird natürlich erhöht ausgeführt). Ich habe ein icacls% userdir% / t eines brandneuen (Standard-) Benutzerordners erstellt und es mit dem icacls% userdir% / t eines Ordners verglichen, nachdem dieses Skript ausgeführt wurde, und es sieht aus wie alle "O's und Ich bin "richtig. Hoffentlich funktioniert es auch für Sie.

set /p userDir=Enter the login of the user's directory you're modifying permissions for. (i.e. jDoe)
TAKEOWN /f "E:\Home Directories\%userDir%" /r /d y
ICACLS "E:\Home Directories\%userDir%" /reset /T
ICACLS "E:\Home Directories\%userDir%" /grant:r "MYDOMAIN\%userDir%":(oi)(ci)f
ICACLS "E:\Home Directories\%userDir%\*.*" /grant:r "SYSTEM":(OI)(CI)F /grant:r "MYDOMAIN\%userDir%":(OI)(CI)F /grant:r "MYDOMAIN\%username%":(OI)(CI)F
ICACLS "E:\Home Directories\%userDir%\*.*" /inheritance:r
ICACLS "E:\Home Directories\%userDir%\*.*" /setowner "MYDOMAIN\%userDir%" /T
ICACLS "E:\Home Directories\%userDir%" /remove "MYDOMAIN\%username%" /t

Freundliche Grüße,

 -d

Stellen Sie sicher, dass Sie die letzte Zeile Ihres Skripts überprüfen. Ich habe die Erfahrung gemacht, dass ICACLS geerbte Berechtigungen nicht erfolgreich entfernt. Der Eintrag im Ordner "MYDOMAIN \% username%" wird entfernt, die Berechtigungen der Unterordner bleiben jedoch unberührt. Daher hat "MYDOMAIN \% username%" bei direktem Zugriff weiterhin Zugriff auf die Unterordner. Sie können einfach nicht zu diesen navigieren. XCACLS.vbs hat das für mich gelöst. cscript.exe xcacls.vbs "e: \ Test" / E / R "MYDOMAIN \% username%"
pk.

Das ist, wo die . Teil kam bei meiner Bearbeitung rein. doing / inheritance: r auf dem übergeordneten Ordner hatte ich das gleiche Problem. aber mach es weiter . im übergeordneten Ordner schien den Trick zu tun. Nach dem Ausführen des oben genannten Befehls hat% userdir%% username%, system und administratoren, aber alles darunter ist nur% username% und system, und so hat der Server sie ursprünglich eingerichtet - genau das, was ich wollte.

-1

Ich benötige Ihre Hilfe, um diesen Befehl gemäß meinen Anforderungen zu ändern, sofern dies technisch möglich ist.

Hier ist die Struktur

\ Server \ Parent \ UserA \ unix

\ Server \ Parent \ UserB \ unix

\ Server \ Parent \ UserC \ unix .... und so weiter

Unter jedem Ordner von User $ befindet sich ein Ordner mit dem Namen "unix".

Ich möchte einen Benutzer oder eine Gruppe mit vollständigen Berechtigungen für alle Benutzer $ -Ordner hinzufügen, die im Ordner "Parent" aufgeführt sind (Namen wie in der obigen Struktur angegeben), aber Berechtigungen nur für den Ordner "Unix" ausschließen.

Ich habe diesen Befehl, der für mich im Hinblick auf die Anwendbarkeit der erforderlichen Berechtigungen gut funktioniert, aber ich kann keine Ausschlussfunktion hinzufügen.

icacls "\\ Server \ Parent \ UserA" / Domäne \ Gruppe gewähren: (OI) (CI) F / T

Können Sie in diesem Szenario eine Anleitung geben?


1
Hallo und willkommen bei Server Fault! Bitte stellen Sie keine Fragen per Antwort. Verwenden Sie die Schaltfläche Frage stellen , um Ihre Anfrage zu posten.
Herr Shunz
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.