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

276

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

Amitabh
quelle

Antworten:

419

Ab Vista caclsist veraltet. Hier sind die ersten paar Hotlines:

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

Displays or modifies access control lists (ACLs) of files

Sie sollten icaclsstattdessen verwenden. So gewähren Sie John die volle Kontrolle über den D:\testOrdner und alle seine Unterordner:

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

Laut MS-Dokumentation:

  • F = Volle Kontrolle
  • 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. ( OIund CIgelten nur für neue Dateien und Unterordner). Bildnachweis: Kommentar von @AlexSpence.

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

Călin Darie
quelle
4
Felipe: Die Parameter (OI) und (CI) machen dies rekursiv
Chris Miller
22
Ich hatte Probleme mit dem Zugriff verweigert, als ich versuchte, die Berechtigungen in der Windows Explorer-Benutzeroberfläche zu ändern. Das Hinzufügen des / T-Flags am Ende ersetzte vorhandene Objekte und konnte das Problem für mich lösen. C:> icacls "D: \ test" / Grant John: (OI) (CI) F / T
Alex Spence
9
@AlexSpence Toller Punkt! Das / T wird benötigt, um die Berechtigungen von zu aktualisieren vorhandener Dateien und Ordner . Die (OI) und (CI) gelten nur für Dateien und Ordner, die in Zukunft erstellt werden.
Jesse
5
Dieser Thread stammt aus der * nix-Welt und ist an 'chown / chmod' gewöhnt, um Zugriff zu gewähren und Berechtigungen über die CLI festzulegen. Er war sehr hilfreich.
Bgarlock
5
Wenn Sie dies in Powershell unter Windows 10 ausführen, wird die Fehlermeldung "OI nicht erkannt" angezeigt. Lösung: Setzen Sie das Argument user + perms in Anführungszeichen. Zum Beispiel:C:\>icacls "D:\test" /grant "John:(OI)(CI)F" /T
JDS
78

Sie können auch ICACLS verwenden.

Um die gewähren Benutzergruppe Vollzugriff auf einen Ordner:

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

So erteilen Ändern Erlaubnis IIS Benutzer für C:\MyFolder(wenn Sie benötigen , um Ihre IIS Fähigkeit zu R / W - Dateien in bestimmten Ordner hat):

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

Wenn Sie tun ICACLS /? Sie können alle verfügbaren Optionen anzeigen.

Vin.X.
quelle
Und da dies caclsweg ist, ist es noch mehr Grund, icacls zu verwenden .
Ian Boyd
2
Volle Kontrolle Hinzufügen nicht für mich gearbeitet , bis /grant Users:(OI)(CI)Fverwendet
Jan Zahradník
Muss ich durch Usersetwas anderes ersetzen oder NEIN? Lauticacls "C:\MyFolder" /grant Users:F
iori
Wenn der aktuelle Benutzer Mitglied der Benutzergruppe "Benutzer" ist (was unter Windows 7 normalerweise der Fall ist), wirkt sich das Erteilen einer Berechtigung für diese Gruppe auf die Zugriffsrechte des aktuellen Benutzers aus. In jedem anderen Fall ersetzen Sie den Namen Benutzer durch den tatsächlichen Namen des aktuellen Benutzers (z. B. John), also: / gewähren Sie John: (OI) (CI) F
Ed999
23

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

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

F gibt vollen Zugriff.

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

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

Sireesh Yarlagadda
quelle
"Run as Admin" wird benötigt, einfach die beste Antwort!
Jeb50
20

Verwenden caclsBefehl. Informationen finden Sie hier .

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

Wo,

/ p: Neue Berechtigung festlegen

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

{USERNAME}: Name des Benutzers

{ERLAUBNIS}: Die Erlaubnis kann sein:

R - Lesen

W - Schreiben

C - Ändern (schreiben)

F - Volle Kontrolle

Gewähren Sie beispielsweise Rocky Full (F) die 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 /?

Jorge Ferreira
quelle
Gute Antwort! Zu beachten ist nur, dass Dateien die tatsächlichen Dateien sind, für die Sie die Berechtigungen ändern möchten. Vielleicht wäre [Dateien] oder {Dateien} eine bessere Erklärung.
Connor Ross
14
Cacls ist veraltet!
Hardik Thaker
caclsist relevant; es ist noch verfügbar in Windows 10; Microsoft würde auch cmd.exezugunsten von Powershell ablehnen.
1
@ Chinggis6 "noch verfügbar" zu sein bedeutet nicht, dass etwas eine gute Idee ist, es zu verwenden oder anderen zu empfehlen. Auch cmd.exeist nicht veraltet und ist wahrscheinlich nicht, so dass das überhaupt kein Punkt für icaclsdas Gegenteil ist.
underscore_d
1
Ich weiß. Ich habe nicht angegeben, ob es eine gute Idee ist, zu verwenden oder zu empfehlen cacls.exe. Ich habe auch nicht erwähnt, dass dies cmd.exebereits veraltet ist. Ich denke, die Leute sollten sich zumindest der Verfügbarkeit in höheren Versionen bewusst sein, auch nur aus Gründen der Abwärtskompatibilität oder aus anderen Gründen.
12

Ich versuche den folgenden Weg und es funktioniert für mich:
1. Öffnen 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 "Löschen" zugewiesen werden und ich dann die Dateien und Ordner löschen kann.

Ray Huang
quelle
7

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

Obwohl die meisten Antworten auf die Frage einen gewissen Wert haben, bietet meiner Meinung nach keine vollständige Lösung. Die folgende (möglicherweise) perfekte Lösung für Windows 7, wenn Sie durch beschädigte Berechtigungseinstellungen aus einem Ordner ausgeschlossen werden:

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

Für Windows 10 muss der Benutzer / die SID nach der /remove:dOption angegeben werden:

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

.
Anmerkungen :

  1. Der Befehl wird auf das angegebene Verzeichnis angewendet.

  2. Wenn Sie den Benutzer "Jeder" angeben, wird die größtmögliche Berechtigung festgelegt, da jeder mögliche Benutzer eingeschlossen ist.

  3. Die Option "/ remove: d" löscht alle möglicherweise vorhandenen 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, aber besser sicher als leid.

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

  5. Der "F" -Parameter (dh die erstellte Berechtigung) gewährt eine vollständige Kontrolle.

  6. Der Parameter "/ T" fügt eine Rekursion hinzu und wendet diese Änderungen auf alle aktuellen Unterobjekte im angegebenen Verzeichnis (dh 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 nachfolgend erstellte Unterobjekte an.
    .

ADDENDUM (10.02.2019) -

Die obige Windows 10-Befehlszeile wurde mir heute freundlicherweise vorgeschlagen, also hier ist sie. Ich habe Windows 10 nicht zum Testen, aber probieren Sie es bitte aus, wenn Sie es haben (und dann werden Sie bitte unten einen Kommentar posten ).

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. Mein Verständnis ist, dass Sie unter Windows 7 keinen Benutzer nach / remove angeben müssen : d, aber ich könnte mich darin irren!

.

ADDENDUM (21.11.2019) -

Benutzer astark empfiehlt, Jeder durch den Begriff * S-1-1-0 zu ersetzen, damit der Befehl sprachunabhängig ist. Ich habe nur eine englische Installation von Windows, daher kann ich diesen Vorschlag nicht testen, aber es scheint vernünftig.

Ed999
quelle
Für ERBTE Berechtigungen ist keine Bereitstellung erforderlich, da EXPLICIT-Berechtigungen diese überschreiben. Durch das Erstellen der neuen expliziten Einstellung werden möglicherweise vorhandene geerbte Einstellungen ungültig (da die neue explizite Einstellung eine Rekursion enthält).
Ed999
Invalid parameter "/remove:d"
DFSFOT
Ich führe icacls.exe unter Windows 7 aus (kann nur ausgeführt werden). Ich kann keine Änderungen daran kommentieren oder testen, die unter Windows 8 oder 10 vorhanden sein könnten. Wie von mir unter Windows 7 64-Bit getestet, wird das Entfernen ausgeführt Option ist wirksam, um DENY-Einstellungen zu entfernen. Die Verwendung kann zu einer Fehlermeldung führen, wenn KEINE Verweigerungseinstellungen vorhanden sind. Wenn jedoch keine vorhanden sind, können sie ohnehin nicht entfernt werden.
Ed999
Wenn die Befehlszeile in meiner ursprünglichen Antwort nicht genau reproduziert wird (außer im Verzeichnispfad), schlägt der Befehl fehl. Fügen Sie insbesondere KEINE Anführungszeichen hinzu, die in meiner Antwort nicht enthalten sind. Wenn Sie (zum Beispiel) die Option / remove: d in Anführungszeichen setzen, schlägt der Befehl natürlich fehl.
Ed999
1
@ DFSFOT Nun, ich sympathisiere. Aber ich benutze Windows 7. Mit der Gnade Gottes werde ich niemals Windows 10 benutzen. Ich würde lieber auf Ubuntu migrieren! Ich vermute, dass / remove: g wahrscheinlich alle Rechte entfernen wird, sowohl die ALLOW- als auch die DENY-Einträge (obwohl mit der Möglichkeit, dass "gewährt" in diesem Kontext nur ALLOW bedeutet und daher keine DENY-Einträge verarbeitet werden); wohingegen / remove: d vermutlich nur die DENY-Einträge entfernt, wobei alle ALLOW-Einträge unverändert bleiben. Aber natürlich kann ich nicht sicher sein.
Ed999
5

Ich kämpfte mit diesem für eine Weile , und nur die Antworten in diesem Thread die Kombination funktionierte für mich (unter Windows 10):
1. Öffnen Sie cmd oder Powershell und mit Dateien in den Ordner
2. takeown / R / F .
3. icacls * / T / grant dan: F.

Viel Glück!

Daniil Shevelev
quelle
3

Nur für den Fall, dass jemand auf dieser Seite stolpert, wenn Sie verschiedene Berechtigungen in einem Befehl aneinanderreihen 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.

Anzeigen
quelle
Vielen Dank. Es hat mir geholfen, die Berechtigung für RX & RD festzulegen. In den meisten Beispielen im Internet wurde mit / F die volle Erlaubnis erklärt, was nicht der Fall sein sollte.
Mani
2

Mit einem Excel-VBA-Skript zum Bereitstellen und Erstellen von Konten. Ich musste dem Ordner und den Unterordnern, die vom Tool mithilfe des x-Kontos unseres Administrators erstellt wurden, unserem neuen Benutzer die Berechtigungen für alle Rechte erteilen.

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

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

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

/ grant: r - Gewährt bestimmte Benutzerzugriffsrechte. Berechtigungen ersetzen zuvor erteilte explizite Berechtigungen. Ohne: r werden Berechtigungen zu zuvor erteilten expliziten Berechtigungen hinzugefügt

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

F - Vollzugriff

/ t - Durchlaufe alle Unterordner, um Dateien / Verzeichnisse abzugleichen.

Dies gab mir einen Ordner auf diesem Server, in dem der Benutzer nur diesen Ordner sehen und Unterordner erstellen konnte, in dem er Dateien lesen und schreiben konnte. Sowie neue Ordner erstellen.

Gus
quelle
1

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

Sie können die offizielle Verteilung von der Microsoft Support-Seite erhalten

g222
quelle
3
Können Sie eine Referenz angeben, wo XCACLS.VBSsie zu finden ist?
Jeremy J Starcher
1

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

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

    # 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

user2934980
quelle
0
attrib +r +a +s +h <folder name> <file name> to hide
attrib -r -a -s -h <folder name> <file name> to unhide
Yashwanth
quelle
2
Dies sind Attribute der Datei (schreibgeschützt, Archiv, System, versteckt), keine Berechtigungen, die mit Benutzerkonten verknüpft sind.
Robin Bennett
0

ausgezeichneter Punkt Călin Darie

Ich hatte viele Skripte, um cacls zu verwenden. Ich verschiebe sie zu icacls, 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 bereitstellt und dann sec anwendet. dann wird es abmontiert. Nur so habe ich festgestellt, dass Sie die Root-Mount-Sicherheit aktualisieren können.

1 ruft die Ordner-Mount-GUID in eine temporäre Datei ab und liest dann die GUID, um das Volume als temporäres Laufwerk zu mounten dann wird die angewendete sek.

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**
HandyMannyHE
quelle
0

Ich bin Administrator und ein Skript hat meinem Namen die Berechtigung "Verweigern" für alle Dateien und Unterordner in einem Verzeichnis erteilt. Ausführen dericacls "D:\test" /grant John:(OI)(CI)F /T Befehls hat nicht funktioniert, da das "Verweigern" anscheinend nicht direkt aus meinem Namen aus dieser Liste entfernt wurde.

Das einzige, was für mich funktioniert hat, ist das Zurücksetzen aller Berechtigungen mit dem icacls "D:\test" /reset /TBefehl.

B. Zoli
quelle
Es ist möglich, das Problem zu lösen, ohne den Befehl reset zu verwenden, indem Sie '' / remove: d '' angeben, um eventuell vorhandene explizite DENY-Einstellungen zu löschen - siehe meine perfekte Lösung (oben).
Ed999
-1

in Windows 10 ohne "c:>" und ">"

Beispielsweise:

F = Full Control
/e : Edit permission and kept old permission
/p : Set new permission

cacls "Datei- oder Ordnerpfad" / e / p Benutzername: F.

(Auch dies behebt die Fehler 2502 und 2503)

cacls "C: \ Windows \ Temp" / e / p Benutzername: F.

Dao1988
quelle
-5

Das hat bei mir funktioniert:

  1. Öffnen Sie manuell den Ordner, für den der Zugriff verweigert wird.

  2. Wählen Sie die ausführbare Datei / Anwendungsdatei in diesem Ordner aus.

  3. Klicken Sie mit der rechten Maustaste darauf und gehen Sie zu Properties->Compatibility

  4. Jetzt sehen Sie das Privilege Levelund überprüfen Sie es fürRun As Administrator

  5. Klicken Sie auf Change Settings for all users.

Das Problem ist jetzt gelöst.

MAYUR
quelle
Die Frage ist, ob Sie die obigen Schritte über die Befehlszeile ausführen. Obwohl Ihr Vorschlag möglicherweise gut funktioniert, gilt er nicht, wenn Sie nur Terminalzugriff (ssh) auf einen Server haben, der eingerichtet werden muss. Daher müssen Sie ein Cmd-Skript verwenden
Ivaylo Slavov