it-swarm.com.de

Wie erteile ich Benutzern die Berechtigung für ein Verzeichnis über die Befehlszeile in Windows?

Wie kann ich einem Benutzer Berechtigungen für ein Verzeichnis (Lesen, Schreiben, Ändern) über die Windows-Befehlszeile erteilen?

244
Amitabh

Ab Vista ist cacls veraltet. Hier sind die ersten paar Hilfetexte:

C:\>cacls
NOTE: Cacls is now deprecated, please use Icacls.

Displays or modifies access control lists (ACLs) of files

Sie sollten stattdessen icacls verwenden. So gewähren Sie John die volle Kontrolle über den Ordner D:\test und alle seine Unterordner:

C:\>icacls "D:\test" /grant John:(OI)(CI)F /T

Laut MS-Dokumentation:

  • F = Vollzugriff
  • CI = Container Inherit - Dieses Flag gibt an, dass untergeordnete Container diesen ACE erben.
  • OI = Object Inherit - Dieses Flag gibt an, dass untergeordnete Dateien den ACE erben.
  • /T = Rekursiv auf vorhandene Dateien und Unterordner anwenden. (OI und CI gelten nur für neue Dateien und Unterordner). Gutschrift: Kommentar von @AlexSpence.

Für eine vollständige Dokumentation können Sie "icacls" ohne Argumente ausführen oder die Microsoft-Dokumentation lesen hier und hier

371
Călin Darie

Sie können auch ICACLS verwenden.

So gewähren Sie einem Ordner die Gruppe BenutzerVollzugriff:

>icacls "C:\MyFolder" /grant Users:F

Um Benutzern von IIS die Berechtigung Ändern für C:\MyFolder zu erteilen (wenn Sie Ihr IIS benötigen, können Sie R/W-Dateien in einem bestimmten Ordner ablegen):

>icacls "C:\MyFolder" /grant IIS_IUSRS:M

Wenn Sie ICACLS /? eingeben, werden alle verfügbaren Optionen angezeigt.

71
Vin.X

Verwenden Sie den Befehl cacls. Siehe Informationen hier .

CACLS-Dateien/e/p {USERNAME}: {PERMISSION}

Wo,

/ p: Neue Berechtigung festlegen

/ e: Berechtigung bearbeiten und alte Berechtigung beibehalten, d. h. ACL bearbeiten, anstatt sie zu ersetzen.

{USERNAME}: Name des Benutzers

{PERMISSION}: Die Erlaubnis kann sein:

R - Lesen

W - Schreiben

C - Ändern (schreiben)

F - Volle Kontrolle

Gewähren Sie beispielsweise Rocky Full (F) -Steuerung mit folgendem Befehl (geben Sie an der Windows-Eingabeaufforderung ein):

C:> CACLS-Dateien/e/p rocky: f

Lesen Sie die vollständige Hilfe, indem Sie den folgenden Befehl eingeben:

C:> cacls /?

19
Jorge Ferreira

Öffnen Sie eine Eingabeaufforderung und führen Sie den folgenden Befehl aus:

icacls "c:\somelocation\of\path" /q /c /t /grant Users:F

F gewährt vollen Zugriff.

/q /c /t wendet die Berechtigungen auf Unterordner an.

Hinweis: Manchmal hilft "Als Administrator ausführen".

19

Ich versuche den folgenden Weg und es funktioniert für mich:
1. Öffne cmd.exe
2. takeown /R /F *.*
3. icacls * /T /grant [username]:(D)
4. del *.* /S /Q

Damit die Dateien zu meinem eigenen Zugriff werden und es "Löschen" zuweisen und ich dann die Dateien und Ordner löschen kann.

11
Ray Huang

Beschädigte Berechtigungen: Wiederherstellen des Zugriffs auf einen Ordner und seine Unterobjekte

Obwohl die meisten Antworten, die als Antwort auf die Frage veröffentlicht wurden, einen gewissen Wert haben, gibt IMHO keine von ihnen eine vollständige Lösung. Die folgende (möglicherweise) perfekte Lösung für Windows 7, wenn Sie durch beschädigte Berechtigungseinstellungen aus einem Ordner ausgesperrt sind:

icacls "c:\folder" /remove:d /grant:r Everyone:(OI)(CI)F /T  

Für Windows 1 muss die Benutzer-/SID nach der Option /remove:d angegeben werden:

icacls "c:\folder" /remove:d Everyone /grant:r Everyone:(OI)(CI)F /T  

.
Notizen:

  1. Der Befehl wird auf das angegebene Verzeichnis angewendet.

  2. Wenn Sie den Benutzer "Jeder" angeben, wird die größtmögliche Berechtigung festgelegt, da sie jeder mögliche Benutzer enthält.

  3. Die Option "/ remove: d" löscht alle expliziten DENY-Einstellungen, da diese explizite ALLOW-Einstellungen überschreiben: eine notwendige Voraussetzung für die Erstellung einer neuen ALLOW-Einstellung. Dies ist nur eine Vorsichtsmaßnahme, da häufig keine DENY-Einstellung vorhanden ist, sondern eine bessere Sicherheit als Entschuldigung.

  4. Die Option "/ grant" erstellt eine neue ALLOW-Einstellung, eine explizite Berechtigung, die alle möglicherweise vorhandenen expliziten ALLOW-Einstellungen ersetzt (": r").

  5. Der "F" -Parameter (d. H. Die erstellte Berechtigung) gewährt die volle Kontrolle.

  6. Der Parameter "/ T" fügt eine Rekursion hinzu und wendet diese Änderungen auf alle current ​​-Unterobjekte im angegebenen Verzeichnis (d. H. Dateien und Unterordner) sowie auf den Ordner selbst an.

  7. Die Parameter "(OI)" und "(CI)" fügen ebenfalls eine Rekursion hinzu und wenden diese Änderungen auf später erstellte Unterobjekte an.
    .

ADDENDUM (2019/02/10) -

Die Windows 10 Kommandozeile oben wurde mir heute freundlicherweise vorgeschlagen, also hier ist es. Ich habe kein Windows 10 zum Testen, aber bitte probieren Sie es aus, wenn Sie haben (und dann bitte Kommentar schreiben unten).

Die Änderung betrifft nur das Entfernen der DENY-Einstellung als ersten Schritt. Möglicherweise ist keine DENY-Einstellung vorhanden, sodass diese Option möglicherweise keinen Unterschied macht. Nach meinem Verständnis müssen Sie unter Windows 7 nach / remove: d keinen Benutzer angeben, aber diesbezüglich liege ich möglicherweise falsch!

5
Ed999

Ich hatte eine Weile damit zu kämpfen und nur die Antworten in diesem Thread zu kombinieren hat bei mir funktioniert (unter Windows 10):
1. Öffnen Sie cmd oder PowerShell und wechseln Sie in den Ordner mit den Dateien
2. takeown/R/F .
3. icacls */T/grant dan: F

Viel Glück!

4
Daniil Shevelev

Nur für den Fall, dass jemand anderes auf dieser Seite stolpert, wenn Sie verschiedene Berechtigungen in einem Befehl zusammenfassen möchten, habe ich Folgendes verwendet:

icacls "c:\TestFolder" /grant:r Test_User:(OI)(CI)(RC,RD,RX)

Beachten Sie die CSV-Zeichenfolge für die verschiedenen Berechtigungen.

3
Ads

Mit einem Excel-VBA-Skript zum Bereitstellen und Erstellen von Konten. Ich musste den Ordnern und Unterordnern, die mit dem Tool unter Verwendung des Administratorkontos "x" für unseren neuen Benutzer erstellt wurden, vollständige Rechte erteilen.

cacls sah ungefähr so ​​aus: cacls\FileServer\Users\Benutzername/e/g Domäne\Benutzername: C

Ich musste diesen Code auf Windows 7 und höher migrieren. Meine Lösung stellte sich heraus als:

icacls\FileServer\Users\Benutzername/Grant: r Domäne\Benutzername: (OI) (CI) F/t

/ grant: r - Gewährt den angegebenen Benutzern Zugriffsrechte. Berechtigungen ersetzen zuvor gewährte explizite Berechtigungen. Ohne: r werden Berechtigungen zu zuvor gewährten expliziten Berechtigungen hinzugefügt

(OI) (CI) - Dieser Ordner, Unterordner und Dateien.

F - Voller Zugriff

/ t - Durchsucht alle Unterordner nach Dateien/Verzeichnissen.

Das gab mir einen Ordner auf diesem Server, den der Benutzer nur sehen und Unterordner erstellen konnte, die er lesen und schreiben konnte. Sowie neue Ordner erstellen.

2
Gus

XCACLS.VBS ist ein sehr leistungsfähiges Skript, das ACL-Informationen ändert/bearbeitet. c:\windows\system32\cscript.exe Die xcacls.vbs-Hilfe gibt alle Schalter und Optionen zurück.

Sie können die offizielle Distribution von Microsoft Support Page erhalten

1
g222

Die Erstellung von Massenordnern und die Erteilung von Berechtigungen funktionieren mit dem folgenden Powershell-Skript.

Import-Csv "D:\Scripts\foldernames.csv" | foreach-object {$ username = $ _. ordnername

# foldername is the header of csv file

$domain = “example.com”

$folder= "D:\Users"

$domainusername = $domain+“\”+$username

New-Item $folder\$username –Type Directory

Get-Acl $folder\$username  

$acl = Get-Acl $folder\$username

$acl.SetAccessRuleProtection($True, $False)

$rule = New-Object System.Security.AccessControl.FileSystemAccessRule("Administrators","FullControl", "ContainerInherit, ObjectInherit", "None", "Allow")
$acl.AddAccessRule($rule)

$rule = New-Object System.Security.AccessControl.FileSystemAccessRule("SYSTEM","FullControl", "ContainerInherit, ObjectInherit", "None", "Allow")
$acl.AddAccessRule($rule)

$rule = New-Object System.Security.AccessControl.FileSystemAccessRule("$domain\Domain Admins","Read", "ContainerInherit, ObjectInherit", "None", "Allow")
$acl.AddAccessRule($rule)

$rule = New-Object System.Security.AccessControl.FileSystemAccessRule($domainusername,"Modify", "ContainerInherit, ObjectInherit", "None", "Allow")
$acl.AddAccessRule($rule)

Set-Acl $folder\$username $acl

}

Hinweis: Sie müssen denselben Domänenbenutzernamen in der CSV-Datei erstellen, da sonst Berechtigungsprobleme auftreten

1
user2934980

Ich bin Administrator und ein Skript hat die Berechtigung "Verweigern" für meinen Namen für alle Dateien und Unterordner in einem Verzeichnis festgelegt. Die Ausführung des Befehls icacls "D:\test" /grant John:(OI)(CI)F /T funktionierte nicht, da anscheinend das Recht "Verweigern" von meinem Namen aus dieser Liste nicht entfernt wurde.

Das einzige, was bei mir funktioniert hat, ist das Zurücksetzen aller Berechtigungen mit dem Befehl icacls "D:\test" /reset /T.

0
B. Zoli
attrib +r +a +s +h <folder name> <file name> to hide
attrib -r -a -s -h <folder name> <file name> to unhide
0
Yashwanth

ausgezeichneter Punkt Călin Darie

Ich hatte eine Menge Skripte, um cacls zu verwenden. Ich habe sie in icacls verschoben, aber ich konnte kein Skript finden, um die Root-Mount-Volumes zu ändern. Beispiel: d:\datafolder. Ich habe schließlich das folgende Skript erstellt, das das Volume als temporäres Laufwerk einbindet und dann sec anwendet. dann steigt es aus. Dies ist die einzige Möglichkeit, mit der Sie die Root-Mount-Sicherheit aktualisieren können.

1 ruft den Ordner mount GUID in eine temporäre Datei ab und liest dann den GUID, um das Volume als temporäres Laufwerk einzubinden : Laufwerk, damit der gemountete Ordner nicht verändert oder unterbrochen wird.

hier ist ein Beispiel meines Skripts:

**mountvol "d:\%1" /L >tempDrive.temp && FOR /f "tokens=*" %%I IN (tempDrive.temp) DO mountvol X: %%I 
D:\tools\security\icacls.exe  %~2 /grant domain\group:(OI)(CI)F /T /C >>%~1LUNsec-%TDWEEK%-%TMONTH%-%TDAY%-%TYEAR%-%THOUR%-%TMINUTE%-%TAM%.txt
if exist x:\*.* mountvol X: /d**
0
HandyMannyHE