Bagaimana cara memberikan izin kepada pengguna untuk direktori yang menggunakan baris perintah di Windows?

277

Bagaimana saya bisa memberikan izin kepada pengguna di direktori (Baca, Tulis, Ubah) menggunakan baris perintah Windows?

Amitabh
sumber

Jawaban:

420

Pada Vista, caclssudah usang. Inilah beberapa garis bantuan pertama:

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

Displays or modifies access control lists (ACLs) of files

Anda harus menggunakannya icaclssebagai gantinya. Ini adalah bagaimana Anda memberi John kendali penuh atas D:\testfolder dan semua subfoldernya:

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

Menurut lakukan dokumentasi MS:

  • F = Kontrol Penuh
  • CI = Container Inherit - Bendera ini menunjukkan bahwa kontainer bawahan akan mewarisi ACE ini.
  • OI = Object Inherit - Bendera ini menunjukkan bahwa file bawahan akan mewarisi ACE.
  • /T= Berlaku secara rekursif ke file dan sub-folder yang ada. ( OIdan CIhanya berlaku untuk file dan sub-folder baru). Kredit: komentar oleh @AlexSpence.

Untuk dokumentasi yang lengkap, Anda dapat menjalankan " icacls" tanpa argumen atau melihat dokumentasi Microsoft di sini dan di sini

Călin Darie
sumber
4
Felipe: Parameter (OI) dan (CI) menjadikan ini rekursif
Chris Miller
22
Saya punya masalah dengan akses ditolak mencoba mengubah izin di UI windows explorer. Menambahkan bendera / T ke ujung menggantikan objek yang ada dan mampu memecahkan masalah bagi saya. C:> icacls "D: \ test" / berikan John: (OI) (CI) F / T
Alex Spence
9
@AlexSpence Poin bagus! The / T diperlukan untuk memperbarui izin dari file dan folder yang ada . (OI) dan (CI) hanya berlaku untuk file dan folder yang dibuat di masa depan.
Jesse
5
Berasal dari dunia * nix dan digunakan untuk 'chown / chmod' untuk memberikan akses dan mengatur izin melalui CLI, utas ini sangat membantu.
bgarlock
5
Jika Anda menjalankan ini di Powershell di Windows 10, Anda akan mendapatkan kesalahan tentang "OI tidak dikenali". Solusi: Tempatkan argumen pengguna + perms dalam tanda kutip. Misalnya:C:\>icacls "D:\test" /grant "John:(OI)(CI)F" /T
JDS
78

Anda juga dapat menggunakan ICACLS.

Untuk memberikan grup Pengguna Kontrol Penuh ke folder:

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

Untuk memberikan izin Ubah kepada pengguna IIS untuk C:\MyFolder(jika Anda memerlukan IIS Anda memiliki kemampuan untuk R / W file ke folder tertentu):

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

Jika Anda melakukan ICACLS /? Anda akan dapat melihat semua opsi yang tersedia.

Vin.X
sumber
Dan mengingat itu caclssudah hilang, itu bahkan lebih banyak alasan untuk menggunakan icacls .
Ian Boyd
2
Menambahkan kontrol penuh tidak berhasil untuk saya sampai /grant Users:(OI)(CI)Fdigunakan
Jan Zahradník
Apakah saya perlu mengganti Usersdengan sesuatu yang lain atau TIDAK? Menuruticacls "C:\MyFolder" /grant Users:F
iori
Jika pengguna saat ini adalah anggota grup pengguna yang bernama "Pengguna" (yang, pada Windows 7, biasanya demikian), maka pemberian izin kepada grup tersebut akan memengaruhi hak akses pengguna saat ini. Dalam kasus lain, ganti nama Pengguna dengan nama sebenarnya dari pengguna saat ini (mis. John), dengan demikian: /
beri
24

Buka Prompt Perintah, kemudian jalankan perintah ini:

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

F memberikan Akses Penuh.

/q /c /t berlaku izin untuk subfolder.

Catatan: Terkadang "Jalankan sebagai Administrator" akan membantu.

Sireesh Yarlagadda
sumber
"Run as Admin" diperlukan, cukup jawaban terbaik!
Jeb50
20

Gunakan caclsperintah. Lihat informasi di sini .

File CACLS / e / p {USERNAME}: {PERMISSION}

Dimana,

/ p: Tetapkan izin baru

/ e: Edit izin dan simpan izin lama seperti itu yaitu mengedit ACL bukannya menggantinya.

{USERNAME}: Nama pengguna

{PERMISSION}: Izin bisa:

R - Baca

W - Tulis

C - Ubah (tulis)

F - Kontrol penuh

Misalnya berikan kendali Rocky Full (F) dengan perintah berikut (ketik pada prompt perintah Windows):

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

Baca bantuan lengkap dengan mengetik perintah berikut:

C:> cacls /?

Jorge Ferreira
sumber
Jawaban bagus! Satu-satunya hal yang perlu diperhatikan, adalah bahwa file adalah file aktual yang ingin Anda ubah izinnya. Mungkin [file] atau {file} akan menjadi penjelasan yang lebih baik.
Connor Ross
14
Cacl sudah usang!
Hardik Thaker
caclsrelevan; masih tersedia di Windows 10; Microsoft akan menolak cmd.exemendukung Powershell juga.
1
@ Chinggis6 Menjadi "masih tersedia" tidak berarti sesuatu adalah ide yang baik untuk digunakan atau merekomendasikan orang lain untuk menggunakannya. Juga, cmd.exetidak usang dan tidak mungkin, jadi itu bukan poin yang mendukung icaclssama sekali, justru sebaliknya.
underscore_d
1
Aku tahu. Saya tidak menyatakan apakah itu ide yang baik untuk digunakan atau direkomendasikan cacls.exe. Saya juga tidak menyebutkan bahwa cmd.exeitu sudah usang. Saya pikir orang setidaknya harus menyadari ketersediaannya dalam versi yang lebih tinggi bahkan hanya untuk kompatibilitas mundur atau alasan lain.
12

Saya mencoba cara di bawah ini dan itu berfungsi untuk saya:
1. buka cmd.exe
2. takeown /R /F *.*
3. icacls * /T /grant [username]:(D)
4.del *.* /S /Q

Sehingga file dapat menjadi akses saya sendiri dan menetapkan untuk "Hapus" dan kemudian saya bisa menghapus file dan folder.

Ray Huang
sumber
7

Izin Rusak: Mendapatkan kembali akses ke folder dan sub-objeknya

Meskipun sebagian besar jawaban yang diposting dalam menjawab pertanyaan memiliki beberapa kelebihan, IMHO tidak satupun dari mereka memberikan solusi yang lengkap. Berikut ini (mungkin) solusi sempurna untuk Windows 7 jika Anda dikunci dari folder dengan pengaturan izin yang rusak:

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

Untuk Windows 10 , pengguna / SID harus ditentukan setelah /remove:dopsi:

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

.
Catatan :

  1. Perintah diterapkan ke direktori yang ditentukan.

  2. Menentukan pengguna "Semua Orang" menetapkan izin seluas mungkin, karena mencakup setiap pengguna yang memungkinkan.

  3. Opsi "/ hapus: d" menghapus pengaturan DENY eksplisit yang mungkin ada, seperti yang menimpa pengaturan TUNGGU eksplisit: pendahuluan yang diperlukan untuk membuat pengaturan ALLOW yang baru. Ini hanya tindakan pencegahan, karena seringkali tidak ada pengaturan DENY yang ada, tetapi lebih baik aman daripada menyesal.

  4. Opsi "/ berikan" membuat pengaturan ALLOW baru, izin eksplisit yang menggantikan (": r") semua dan semua pengaturan ALLOW eksplisit yang mungkin ada.

  5. Parameter "F" (yaitu izin yang dibuat) menjadikan ini sebagai hibah kontrol FULL.

  6. The "/ T" parameter menambahkan rekursi, menerapkan perubahan ini ke semua saat ini sub-objek dalam direktori tertentu (yaitu file dan subfolder), serta folder itu sendiri.

  7. Parameter "(OI)" dan "(CI)" juga menambahkan rekursi, menerapkan perubahan ini pada sub-objek yang dibuat selanjutnya.
    .

ADDENDUM (2019/02/10) -

Baris perintah Windows 10 di atas disarankan kepada saya hari ini, jadi ini dia. Saya belum punya Windows 10 untuk mengujinya, tetapi silakan coba jika Anda punya (dan kemudian tolong posting komentar di bawah).

Perubahan hanya menyangkut penghapusan pengaturan DENY sebagai langkah pertama. Mungkin tidak ada pengaturan MENYANGKAL yang hadir, sehingga opsi mungkin tidak membuat perbedaan. Pemahaman saya adalah, pada Windows 7, bahwa Anda tidak perlu menentukan pengguna setelah / menghapus: d tapi saya mungkin salah tentang itu!

.

ADDENDUM (2019/11/21) -

Pengguna astark merekomendasikan untuk mengganti Semua Orang dengan istilah * S-1-1-0 agar perintah menjadi independen bahasa. Saya hanya menginstal Windows dalam Bahasa Inggris, jadi saya tidak dapat menguji proposal ini, tetapi tampaknya masuk akal.

Ed999
sumber
Tidak diperlukan ketentuan untuk izin INHERITED, karena izin EXPLICIT menimpanya. Jadi, pembuatan pengaturan eksplisit baru membatalkan semua pengaturan bawaan yang mungkin ada (karena pengaturan eksplisit baru mencakup rekursi).
Ed999
Invalid parameter "/remove:d"
DFSFOT
Saya menjalankan (hanya dapat menjalankan) icacls.exe pada Windows 7. Saya tidak dapat mengomentari, atau menguji, setiap perubahan yang mungkin ada pada Windows 8 atau 10. Seperti yang saya uji pada Windows 7 64-bit, penghapusan Opsi ini efektif untuk menghapus pengaturan DENY. Penggunaannya dapat menghasilkan pesan kesalahan jika TIDAK ada pengaturan menolak hadir, tetapi jika tidak ada maka tidak dapat menghapusnya pula.
Ed999
Kegagalan untuk mereproduksi persis baris perintah di jawaban asli saya (simpan untuk jalur direktori) akan mengakibatkan kegagalan perintah. Secara khusus, JANGAN menambahkan tanda kutip yang tidak ditampilkan dalam jawaban saya. Jika Anda membungkus (misalnya) opsi / remove: d dalam tanda kutip, perintah tentu saja akan gagal.
Ed999
1
@ DFSFOT Yah, saya bersimpati. Tapi saya menggunakan Windows 7. Dengan rahmat Tuhan, saya tidak akan pernah menggunakan Windows 10. Saya lebih suka bermigrasi ke Ubuntu! Saya menduga bahwa / remove: g mungkin akan menghapus semua hak, baik entri ALLOW dan DENY (walaupun dengan kemungkinan bahwa 'diberikan' dalam konteks ini hanya berarti MEMUNGKINKAN dan karenanya tidak akan memproses entri DENY); sedangkan / remove: d mungkin hanya akan menghapus entri DENY, membiarkan SEMUA entri MENGIZINKAN tidak berubah. Tapi tentu saja saya tidak yakin.
Ed999
5

Aku berjuang dengan ini untuk sementara waktu dan hanya menggabungkan jawaban di thread ini bekerja untuk saya (pada Windows 10):
1. Buka cmd atau PowerShell dan pergi ke folder dengan file
2. takeown / R / F .
3. icacls * / T / grant dan: F

Semoga berhasil!

Daniil Shevelev
sumber
3

Kalau-kalau ada orang lain yang tersandung di halaman ini, jika Anda ingin merangkai berbagai izin bersama dalam satu perintah, saya menggunakan ini:

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

Perhatikan string csv untuk berbagai izin.

Iklan
sumber
Terima kasih banyak. Itu membantu saya untuk mengatur izin untuk RX & RD. Dalam sebagian besar contoh yang diberikan di Internet dijelaskan dengan / F izin penuh, Yang seharusnya tidak terjadi.
Mani
2

Dengan skrip Excel vba untuk menyediakan dan membuat akun. Saya perlu memberikan izin hak penuh ke folder dan subfolder yang dibuat oleh alat menggunakan akun 'x' administrator kami untuk pengguna baru kami.

cacls terlihat seperti ini: cacls \ FileServer \ Users \ Username / e / g Domain \ Username: C

Saya perlu memigrasi kode ini ke Windows 7 dan seterusnya. Solusi saya ternyata:

icacls \ FileServer \ Users \ Username / grant: r Domain \ Username: (OI) (CI) F / t

/ grant: r - Memberikan hak akses pengguna yang ditentukan. Izin menggantikan izin eksplisit yang sebelumnya diberikan. Tanpa: r, izin ditambahkan ke izin eksplisit yang sebelumnya diberikan

(OI) (CI) - Folder, subfolder, dan file ini.

F - Akses Penuh

/ t - Traverse semua subfolder untuk mencocokkan file / direktori.

Apa ini memberi saya adalah folder di server ini bahwa pengguna hanya bisa melihat folder itu dan membuat subfolder, sehingga mereka bisa membaca dan menulis file. Serta membuat folder baru.

Gus
sumber
1

XCACLS.VBS adalah skrip yang sangat kuat yang akan mengubah / mengedit info ACL. c: \ windows \ system32 \ cscript.exe xcacls.vbs membantu mengembalikan semua sakelar dan opsi.

Anda bisa mendapatkan distribusi resmi dari Halaman Dukungan Microsoft

g222
sumber
3
Bisakah Anda memberikan referensi di mana XCACLS.VBSdapat ditemukan?
Jeremy J Starcher
1

Pembuatan folder massal dan izin izin berfungsi dengan menggunakan skrip powershell di bawah ini.

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
}

Catatan: Anda harus membuat nama pengguna domain yang sama dalam file csv jika tidak, Anda akan mendapatkan masalah izin

pengguna2934980
sumber
0
attrib +r +a +s +h <folder name> <file name> to hide
attrib -r -a -s -h <folder name> <file name> to unhide
Yashwanth
sumber
2
Itu adalah atribut file (hanya baca, arsip, sistem, tersembunyi) bukan izin, yang ditautkan ke akun pengguna.
Robin Bennett
0

titik bagus Călin Darie

Saya punya banyak skrip untuk menggunakan cacl. Saya memindahkannya ke icacls, namun saya tidak dapat menemukan skrip untuk mengubah volume root mount contoh: d: \ datafolder. Saya akhirnya membuat skrip di bawah ini, yang me-mount volume sebagai drive sementara kemudian berlaku detik. kemudian lepaskan itu. Ini adalah satu-satunya cara saya menemukan bahwa Anda dapat memperbarui keamanan root mount.

1 membuat folder me-mount GUID ke file temp, lalu membaca GUID untuk me-mount volume sebagai drive temp X: berlaku dtk dan catat perubahan lalu lepaskan volume hanya dari drive X: sehingga folder yang terpasang tidak diubah atau terganggu. kemudian detik diterapkan.

berikut ini contoh skrip saya:

**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
sumber
0

Saya Administrator dan beberapa skrip menempatkan izin "Tolak" pada nama saya di semua file dan subfolder dalam direktori. Menjalankan icacls "D:\test" /grant John:(OI)(CI)F /Tperintah tidak berhasil, karena sepertinya tidak menghapus hak "Tolak" dari nama saya dari daftar ini.

Satu-satunya hal yang berhasil bagi saya adalah mengatur ulang semua izin dengan icacls "D:\test" /reset /Tperintah.

B. Zoli
sumber
Dimungkinkan untuk mengatasi masalah tanpa menggunakan perintah reset, dengan menentukan '' / hapus: d '' untuk menghapus pengaturan DENY eksplisit yang mungkin ada - lihat solusi sempurna saya (di atas).
Ed999
-1

di windows 10 bekerja tanpa "c:>" dan ">"

Sebagai contoh:

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

cacls "path file atau folder" / e / p UserName: F

(juga ini memperbaiki kesalahan 2502 dan 2503)

cacls "C: \ Windows \ Temp" / e / p UserName: F

Dao1988
sumber
-5

Inilah yang bekerja untuk saya:

  1. Buka secara manual folder yang aksesnya ditolak.

  2. Pilih file Executable / application di folder itu.

  3. Klik kanan padanya dan pergi ke Properties->Compatibility

  4. Sekarang lihat Privilege Leveldan periksaRun As Administrator

  5. Klik pada Change Settings for all users.

Masalahnya terpecahkan sekarang.

MAYUR
sumber
Pertanyaannya adalah untuk melakukan hal di atas melalui baris perintah. Meskipun saran Anda mungkin berfungsi dengan baik, itu tidak berlaku jika Anda hanya memiliki akses terminal (ssh) ke server yang perlu diatur, sehingga Anda harus menggunakan skrip cmd
Ivaylo Slavov