Bagaimana cara mengganti izin dan semua yang ada di dalamnya dengan icacls di Windows Server 2012?

15

Menggunakan Windows Server 2012 R2 DAN Windows Server 2008 R2.

Saya memiliki folder yang dipanggil C:\temp\testdan saya ingin memberikan akses kepada SYSTEMdan pengguna serta semua file dan subdirektori, dan menghapus semua yang lainnya. Saya sudah mencoba perintah ini tetapi semua izin yang ada tetap:

Izin yang ada adalah:

Access : NT AUTHORITY\SYSTEM Allow  FullControl
         BUILTIN\Administrators Allow  FullControl
         BUILTIN\Users Allow  ReadAndExecute, Synchronize
         BUILTIN\Users Allow  AppendData
         BUILTIN\Users Allow  CreateFiles
         CREATOR OWNER Allow  268435456

Saya ingin menghapus semua ACL kecuali SYSTEM, dan menambahkan<DOMAIN>\<USER>

Saya mencoba perintah ini:

icacls c:\temp\test /grant:r <DOMAIN>\<USER>:(OI)(CI)F /t

processed file: c:\temp\test
Successfully processed 1 files; Failed processing 0 files

Ketika saya melihat izin setelah itu, <DOMAIN>\<USER>memiliki izin yang benar tetapi yang lainnya tetap. Saya pikir /grant:rmengganti semua izin? Apakah Anda tahu perintah apa yang perlu saya jalankan untuk menghapus semua izin lainnya?

Mark Allison
sumber
Perintah ini melakukan persis apa yang saya inginkan cacls c:\temp\test /t /g <DOMAIN>\<USER>:Ftetapi saya pernah mendengar bahwa icacls telah menggantikannya, dapatkah seseorang menunjukkan versi icacls yang setara untuk menghasilkan perilaku yang sama?
Mark Allison
3
/grant:rhanya menghapus izin eksplisit yang ada, bukan yang diwariskan dari folder di atas. Anda harus memasukkan /inheritance:rjuga.
TheCleaner
1
Jika CACLS melakukan pekerjaan, maka tidak ada alasan Anda tidak dapat menggunakannya, apakah sudah usang atau belum.
joeqwerty
@joeqwerty benar tetapi rasanya sangat kotor. cacls sendiri bahkan mengembalikan pesan untuk menggunakan icacls, jadi pasti ada alasan yang sangat bagus. NOTE: Cacls is now deprecated, please use Icacls.
Mark Allison
2
@ joeqwerty cacls.exedapat mengatur ACL dalam urutan yang salah, berpotensi menyebabkan masalah (saya akan meninggalkan ini sebagai latihan untuk pembaca).
Craig

Jawaban:

16

Seperti disebutkan adalah komentar, Anda juga harus menggunakan /inheritance:rsakelar untuk menghapus izin yang diwarisi.

/grant:r hanya menghapus izin eksplisit.

icacls c:\temp\test /inheritance:r /grant:r <DOMAIN>\<USER>:(OI)(CI)F /T

Juga memberikan SYSTEM:

icacls c:\temp\test /inheritance:r /grant:r <DOMAIN>\<USER>:(OI)(CI)F /grant:r SYSTEM:(OI)(CI)F /T
KRFFR
sumber
7

Parameter /grant:rtidak berfungsi untuk saya. Saya harus menggunakan /resetuntuk mengembalikan izin ke pewarisan saja dan kemudian menghapus izin yang diwarisi. Jangan lupa untuk mengubah subdirektori dengan /tbendera.

Jan Zahradník
sumber