Jak przyznać użytkownikom uprawnienia do katalogu przy użyciu wiersza polecenia w systemie Windows?

276

Jak mogę przyznać uprawnienia użytkownikowi w katalogu (odczyt, zapis, modyfikacja) przy użyciu wiersza polecenia systemu Windows?

Amitabh
źródło

Odpowiedzi:

419

Od wersji Vista caclsjest przestarzały. Oto kilka pierwszych linii pomocy:

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

Displays or modifies access control lists (ACLs) of files

Zamiast tego powinieneś użyć icacls. W ten sposób zapewniasz Johnowi pełną kontrolę nad D:\testfolderem i wszystkimi jego podfolderami:

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

Zgodnie z dokumentacją MS:

  • F = Pełna kontrola
  • CI = Dziedziczenie kontenera - ta flaga wskazuje, że podrzędne kontenery odziedziczą to ACE.
  • OI = Object Inherit - ta flaga wskazuje, że pliki podrzędne odziedziczą ACE.
  • /T= Zastosuj rekurencyjnie do istniejących plików i podfolderów. ( OIi CIdotyczą tylko nowych plików i podfolderów). Źródło: komentarz @AlexSpence.

Aby uzyskać pełną dokumentację, możesz uruchomić „ icacls” bez argumentów lub przejrzeć dokumentację Microsoft tutaj i tutaj

Călin Darie
źródło
4
Felipe: Parametry (OI) i (CI) sprawiają, że jest to rekurencyjne
Chris Miller,
22
Miałem problemy z odmową dostępu podczas próby zmiany uprawnień w interfejsie Eksploratora Windows. Dodanie flagi / T na końcu zastąpiło istniejące obiekty i było w stanie rozwiązać problem. C:> icacls "D: \ test" / grant John: (OI) (CI) F / T
Alex Spence
9
@AlexSpence Świetny punkt! Opcja / T jest potrzebna do aktualizacji uprawnień do istniejących plików i folderów . (OI) i (CI) dotyczą tylko plików i folderów utworzonych w przyszłości.
Jesse
5
Wątek ten, pochodzący ze świata * nix i przyzwyczajony do „chown / chmod” w celu zapewnienia dostępu i ustawiania uprawnień za pośrednictwem interfejsu CLI, był bardzo pomocny.
bgarlock
5
Jeśli uruchomisz to w Powershell w Windows 10, pojawi się błąd dotyczący „OI nie rozpoznano”. Rozwiązanie: Umieść argument użytkownik + perm w cudzysłowach. Na przykład:C:\>icacls "D:\test" /grant "John:(OI)(CI)F" /T
JDS
78

Możesz także użyć ICACLS.

Aby przyznać grupie użytkowników pełną kontrolę nad folderem:

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

Aby udzielić uprawnień do modyfikacji użytkownikom IIS C:\MyFolder(jeśli potrzebujesz, IIS ma możliwość R / W plików do określonego folderu):

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

Jeśli robisz ICACLS /? będziesz mógł zobaczyć wszystkie dostępne opcje.

Vin.X
źródło
A biorąc pod uwagę, że caclsjuż go nie ma, jest jeszcze więcej powodów, aby używać icacl .
Ian Boyd
2
Dodanie pełnej kontroli nie działało dla mnie, dopóki nie zostało /grant Users:(OI)(CI)Fużyte
Jan Zahradník
Czy muszę zamienić na Userscoś innego lub NIE? Wedługicacls "C:\MyFolder" /grant Users:F
iori
Jeśli bieżący użytkownik jest członkiem grupy użytkowników o nazwie „Użytkownicy” (co zwykle ma miejsce w systemie Windows 7), to przyznanie uprawnień tej grupie wpłynie na prawa dostępu bieżącego użytkownika. W każdym innym przypadku należy zastąpić nazwę Użytkownicy rzeczywistą nazwą bieżącego użytkownika (np. Jan), a zatem: / grant John: (OI) (CI) F
Ed999
24

Otwórz wiersz polecenia, a następnie wykonaj następujące polecenie:

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

F daje pełny dostęp.

/q /c /t stosuje uprawnienia do podfolderów.

Uwaga: Czasami pomoże „Uruchom jako administrator”.

Sireesh Yarlagadda
źródło
Potrzebna jest opcja „Uruchom jako administrator”, po prostu najlepsza odpowiedź!
Jeb50,
20

Użyj caclspolecenia. Zobacz informacje tutaj .

Pliki CACLS / e / p {NAZWA UŻYTKOWNIKA}: {ZEZWOLENIE}

Gdzie,

/ p: ustaw nowe uprawnienia

/ e: edytuj uprawnienie i zachowałem stare pozwolenie, ponieważ jest to np. edycja ACL zamiast zastępowania.

{NAZWA UŻYTKOWNIKA}: nazwa użytkownika

{ZEZWOLENIE}: Zezwolenie może być:

R - Przeczytaj

W - Napisz

C - Zmień (zapisz)

F - Pełna kontrola

Na przykład udziel kontroli Rocky Full (F) za pomocą następującego polecenia (wpisz w wierszu polecenia systemu Windows):

C:> Pliki CACLS / e / p rocky: f

Przeczytaj całą pomoc, wpisując następujące polecenie:

C:> cacls /?

Jorge Ferreira
źródło
Świetna odpowiedź! Jedyną rzeczą do odnotowania jest to, że pliki to rzeczywiste pliki, na których chcesz zmienić uprawnienia. Może lepszym wyjaśnieniem byłoby [pliki] lub {pliki}.
Connor Ross,
14
Cacls jest przestarzały!
Hardik Thaker,
caclsJest istotna; jest nadal dostępny w Windows 10; Microsoft zrezygnowałby również cmd.exena rzecz Powershell.
1
@ Chinggis6 Bycie „wciąż dostępnym” nie oznacza, że ​​coś jest dobrym pomysłem do użycia lub polecam innym. Ponadto cmd.exenie jest przestarzałe i prawdopodobnie nie będzie, więc nie jest to wcale argument na korzyść icacls, wręcz przeciwnie.
underscore_d
1
Wiem. Nie podałem, czy warto go używać, czy polecać cacls.exe. Nie wspomniałem też, że cmd.exejest już przestarzałe. Myślę, że ludzie powinni przynajmniej być świadomi jego dostępności w wyższych wersjach, nawet tylko ze względu na kompatybilność wsteczną lub z jakiegokolwiek innego powodu.
12

Próbuję poniżej i to działa dla mnie:
1. otwórz cmd.exe
2. takeown /R /F *.*
3. icacls * /T /grant [username]:(D)
4.del *.* /S /Q

Aby pliki mogły stać się moim własnym dostępem i przypisać je do „Usuń”, a następnie mogę usunąć pliki i foldery.

Ray Huang
źródło
7

Uszkodzone uprawnienia: Odzyskiwanie dostępu do folderu i jego podobiektów

Chociaż większość odpowiedzi zamieszczonych w odpowiedzi na pytanie ma pewne zalety, żadna z nich IMHO nie daje kompletnego rozwiązania. Poniższe (być może) idealne rozwiązanie dla systemu Windows 7, jeśli folder jest zablokowany przez uszkodzone ustawienia uprawnień:

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

W przypadku systemu Windows 10 należy podać identyfikator użytkownika / SID po /remove:dopcji:

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

.
Uwagi :

  1. Polecenie stosuje się do określonego katalogu.

  2. Określenie użytkownika „Wszyscy” ustawia możliwie najszersze uprawnienia, ponieważ obejmuje ono każdego możliwego użytkownika.

  3. Opcja „/ remove: d” usuwa wszelkie jawne ustawienia ODMÓW, które mogą istnieć, ponieważ zastępują one jawne ustawienia ZEZWALAJĄ: konieczny wstęp do utworzenia nowego ustawienia ZEZWALAJ. Jest to tylko środek ostrożności, ponieważ często nie ma ustawienia ODMÓW, ale lepiej jest zabezpieczyć niż przepraszać.

  4. Opcja „/ grant” tworzy nowe ustawienie ZEZWOLENIA, wyraźne uprawnienie, które zastępuje („: r”) wszelkie istniejące jawne ustawienia ZEZWOLENIA.

  5. Parametr „F” (tzn. Utworzone uprawnienie) powoduje, że jest to kontrola PEŁNA.

  6. Parametr „/ T” dodaje rekurencję, stosując te zmiany do wszystkich bieżących podobiektów w określonym katalogu (tj. Plików i podfolderów), a także do samego folderu.

  7. Parametry „(OI)” i „(CI)” również dodają rekurencję, stosując te zmiany do później utworzonych podobiektów.
    .

DODATEK (2019/02/10) -

Wiersz poleceń systemu Windows 10 powyżej został mi dziś zasugerowany, więc oto proszę. Nie mam systemu Windows 10, aby go przetestować, ale proszę wypróbować, jeśli masz (a następnie czy możesz zamieścić komentarz poniżej).

Zmiana dotyczy tylko usunięcia ustawienia ODMÓW jako pierwszego kroku. Może nie być żadnego ustawienia ODMOWY, więc ta opcja nie ma znaczenia. Rozumiem, że w systemie Windows 7 nie musisz określać użytkownika po / usuń: d, ale mogę się mylić!

.

DODATEK (2019/11/21) -

Użytkownik z uwagą zaleca zastąpienie Wszyscy terminem * S-1-1-0, aby polecenie było niezależne od języka. Mam tylko angielską instalację systemu Windows, więc nie mogę przetestować tej propozycji, ale wydaje się rozsądna.

Ed999
źródło
Żadne postanowienie nie jest wymagane dla uprawnień NIEZGODNYCH, ponieważ uprawnienia WYJAŚNIAJĄ je zastępują. Tak więc utworzenie nowego jawnego ustawienia niweluje wszelkie odziedziczone ustawienia, które mogą istnieć (ponieważ nowe jawne ustawienie obejmuje rekurencję).
Ed999,
Invalid parameter "/remove:d"
DFSFOT,
Pracuję (mogę uruchomić) icacls.exe w systemie Windows 7. Nie mogę komentować ani testować żadnych zmian, które mogą istnieć w systemie Windows 8 lub 10. Jak przetestowałem w systemie Windows 7 64-bit, usunięcie opcja skutecznie usuwa ustawienia ODMÓW. Jego użycie może spowodować wyświetlenie komunikatu o błędzie, jeśli nie ma żadnych ustawień odmowy, ale jeśli nie ma takich ustawień, to i tak nie może ich usunąć.
Ed999,
Niezastosowanie się odtworzyć dokładnie z wiersza poleceń w moim oryginalnym odpowiedzi (oprócz ścieżki katalogów) spowoduje niedopełnienie poleceń. W szczególności NIE dodawaj cudzysłowów, które nie występują w mojej odpowiedzi. Jeśli w cudzysłowie umieścisz (na przykład) opcję / remove: d, polecenie oczywiście się nie powiedzie.
Ed999,
1
@DFSFOT Cóż, sympatyzuję. Ale używam Windows 7. Z łaską Boga, nigdy nie użyję Windows 10. Wolę migrację do Ubuntu! I podejrzewam , że / usuń: g prawdopodobnie usunąć wszelkie prawa, zarówno umożliwiają i ODMÓWIONO wpisy (choć z możliwością, że „udzielonej” oznacza w tym kontekście tylko umożliwiają i tak nie będzie przetwarzać każdy zaprzeczyć Wpisy); podczas gdy / remove: d prawdopodobnie usunie tylko DENY, pozostawiając wszelkie wpisy ALLOW bez zmian. Ale oczywiście nie jestem pewien.
Ed999,
5

Walczyłem z tym na chwilę i tylko łącząc odpowiedź w tym wątku pracował dla mnie (w systemie Windows 10):
1. Otwórz cmd lub PowerShell i przejdź do folderu z plikami
2. takeown / R / F .
3. icacls * / T / grant dan: F

Powodzenia!

Daniil Shevelev
źródło
3

Na wszelki wypadek, gdy ktoś potknie się na tej stronie, jeśli chcesz połączyć różne uprawnienia razem w jednym poleceniu, użyłem tego:

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

Zanotuj ciąg csv dla różnych uprawnień.

Reklamy
źródło
Dziękuję bardzo. Pomogło mi to ustawić uprawnienia dla RX i RD. W większości przykładów podanych w Internecie wyjaśniono pełne pozwolenie / F, co nie powinno mieć miejsca.
Mani,
2

Ze skryptem Excel vba do obsługi i tworzenia kont. Musiałem przyznać pełne uprawnienia do folderu i podfolderów, które zostały utworzone przez narzędzie przy użyciu konta x administratora naszego nowego użytkownika.

cacls wyglądał mniej więcej tak: cacls \ FileServer \ Users \ Nazwa użytkownika / e / g Domena \ Nazwa użytkownika: C

Musiałem migrować ten kod do systemu Windows 7 i nowszych wersji. Moje rozwiązanie okazało się:

icacls \ FileServer \ Users \ Nazwa użytkownika / grant: r Domena \ Nazwa użytkownika: (OI) (CI) F / t

/ grant: r - przyznaje określone prawa dostępu użytkownika. Uprawnienia zastępują wcześniej przyznane uprawnienia jawne. Bez: r uprawnienia są dodawane do wszelkich wcześniej przyznanych jawnych uprawnień

(OI) (CI) - ten folder, podfoldery i pliki.

F - Pełny dostęp

/ t - przeglądaj wszystkie podfoldery, aby dopasować pliki / katalogi.

To, co mi to dało, to folder na tym serwerze, który użytkownik widział tylko w tym folderze i tworzył podfoldery, aby mógł czytać i zapisywać pliki. Jak również tworzyć nowe foldery.

Gus
źródło
1

XCACLS.VBS to bardzo wydajny skrypt, który zmienia / edytuje informacje ACL. c: \ windows \ system32 \ cscript.exe xcacls.vbs pomaga zwrócić wszystkie przełączniki i opcje.

Oficjalną dystrybucję można uzyskać ze strony pomocy technicznej Microsoft

g222
źródło
3
Czy możesz podać odniesienie, gdzie XCACLS.VBSmożna znaleźć?
Jeremy J Starcher,
1

Zbiorowe tworzenie folderów i udzielanie uprawnień działa przy użyciu poniższego skryptu PowerShell.

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
}

Uwaga: musisz utworzyć tę samą nazwę użytkownika domeny w pliku csv, w przeciwnym razie wystąpią problemy z uprawnieniami

użytkownik2934980
źródło
0
attrib +r +a +s +h <folder name> <file name> to hide
attrib -r -a -s -h <folder name> <file name> to unhide
Yashwanth
źródło
2
Są to atrybuty pliku (tylko do odczytu, archiwalne, systemowe, ukryte), a nie uprawnienia, które są powiązane z kontami użytkowników.
Robin Bennett
0

ocena doskonała Călin Darie

Miałem wiele skryptów do użycia caclów. Przenoszę je do icaclów, jakkolwiek nigdy nie mogłem znaleźć skryptu, aby zmienić przykładowy wolumin montowania katalogu głównego: d: \ datafolder. W końcu stworzyłem poniższy skrypt, który montuje wolumin jako dysk tymczasowy, a następnie stosuje sek. następnie odmontowuje. Jest to jedyny sposób, w jaki odkryłem, że możesz zaktualizować zabezpieczenia montowania roota.

1 pobiera identyfikator GUID podłączenia folderu do pliku tymczasowego, a następnie odczytuje identyfikator GUID, aby zamontować wolumin jako dysk tymczasowy X: stosuje sec i rejestruje zmiany, a następnie odmontowuje wolumin tylko z dysku X: tak, aby zamontowany folder nie był zmieniany ani przerywany innym następnie zastosował ust.

oto przykład mojego skryptu:

**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
źródło
0

Jestem administratorem, a niektóre skrypty nadały mojej nazwie uprawnienia „Odmów” dla wszystkich plików i podfolderów w katalogu. Wykonanie icacls "D:\test" /grant John:(OI)(CI)F /Tpolecenia nie działało, ponieważ wydawało się, że nie usunęło ono „Odmów” bezpośrednio z mojego nazwiska z tej listy.

Jedyną rzeczą, która działała dla mnie, było zresetowanie wszystkich uprawnień za pomocą icacls "D:\test" /reset /Tpolecenia.

B. Zoli
źródło
Problem można rozwiązać bez użycia polecenia reset, określając „/ remove: d”, aby usunąć wszelkie jawne ustawienia ODMÓW, które mogą istnieć - patrz moje idealne rozwiązanie (powyżej).
Ed999,
-1

w systemie Windows 10 działającym bez „c:>” i „>”

Na przykład:

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

cacls „ścieżka pliku lub folderu” / e / p Nazwa użytkownika: F

(także to naprawia błąd 2502 i 2503)

cacls "C: \ Windows \ Temp" / e / p Nazwa użytkownika: F

Dao1988
źródło
-5

Oto, co zadziałało dla mnie:

  1. Ręcznie otwórz folder, do którego odmówiono dostępu.

  2. Wybierz plik wykonywalny / aplikacji w tym folderze.

  3. Kliknij go prawym przyciskiem myszy i przejdź do Properties->Compatibility

  4. Teraz zobacz Privilege Leveli sprawdźRun As Administrator

  5. Kliknij na Change Settings for all users.

Problem został rozwiązany teraz.

MAJUR
źródło
Pytanie dotyczy wykonania powyższego poprzez wiersz poleceń. Chociaż Twoja sugestia może działać dobrze, nie ma ona zastosowania, jeśli masz dostęp tylko do terminala (ssh) do serwera, który musi zostać skonfigurowany, dlatego będziesz musiał użyć skryptu cmd
Ivaylo Slavov