Untuk mengontrol akses ke file dan folder di Windows, ACL khusus (Daftar Kontrol Akses, Daftar Kontrol Akses) ditugaskan untuk setiap objek sistem file NTFS (direktori atau file). Objek ACL mendefinisikan operasi yang tersedia (izin) yang dapat dilakukan pengguna dan / atau grup dengan objek ini. Dalam kebanyakan kasus, administrator Window menggunakan File Explorer GUI (properti folder / file -> tab Security) atau utilitas konsol icacls untuk mengelola izin file dan folder NFTS. Pada artikel ini, kita akan melihat cara-cara untuk mengelola izin pada objek sistem file NTFS dari PowerShell. Anda dapat menggunakan perintah ini dalam skrip dan untuk mengotomatisasi pengelolaan izin NTFS pada server file Windows.
Konten:
- Cmdlet bawaan untuk mengelola ACL di NTFS: Get-Acl dan Set-Acl
- Kami menggunakan modul NTFSSecurity untuk mengelola izin dari PowerShell
- Memeriksa Izin NTFS yang Efektif pada Objek dari PowerShell
Cmdlet bawaan untuk mengelola ACL di NTFS: Get-Acl dan Set-Acl
Di PowerShell v5 (Windows 10 / Windows Server 2016), ada dua cmdlet internal yang terpisah untuk mengelola ACL (termasuk dalam modul Microsoft.PowerShell.Security):
- Dapatkan-acl - memungkinkan Anda untuk mendapatkan ACL saat ini untuk objek tertentu pada sistem file NTFS;
- Set-acl - digunakan untuk menambah / memodifikasi objek ACL saat ini.
Kami tidak akan membahas cmdlet bawaan ini secara terperinci, seperti fungsi mereka dalam kebanyakan kasus tidak cukup untuk mengelola izin NTFS dalam tugas nyata. Mari kita perhatikan hanya beberapa contoh khas penggunaannya..
Daftar pemilik folder (file) saat ini dan daftar izin yang diberikan untuk NTFS:
get-acl C: \ Drivers \ | fl
Path: Microsoft.PowerShell.Core \ FileSystem :: C: \ Drivers \
Pemilik: WORKSTAT1 \ root
Grup: WORKSTAT1 \ Hilang
Akses: NT AUTHORITY \ Authenticated Users Allow Modify, Synchronize
NT AUTHORITY \ SYSTEM Memungkinkan Kontrol Lengkap
BUILTIN \ Administrator Mengizinkan Kontrol Penuh
BUILTIN \ Pengguna Mengizinkan ReadAndExecute, Sinkronisasi
WORKSTAT1 \ root Izinkan Ubah, Sinkronisasi
Audit:
Sddl: O: S-1-5-21-3650440056-3766451173-3310994491-1001G: S-1-5-21-3650440056-766451173-3310994491-513D: PAI (A; OICI; 0x 1301bf ;;; AU) (AU) ( A; OICI; FA ;;; SY) (A; OICI; FA ;;; BA) (A; OICI; 0x1200a9 ;; BU) (A; OICI; 0x1301bf ;;; S-1-5-21-3650440056 -37664 51173-3310994491-1001)
Anda hanya bisa mendaftar izin NTFS dalam format yang lebih mudah dimengerti:
(dapatkan-acl C: \ Drivers \). akses
Menggunakan perintah berikut, Anda dapat menyalin izin NTFS dari satu folder dan menerapkannya ke yang lain:
Get-Acl C: \ Drivers | Set-Acl C: \ Distr
Masalah utama dengan menggunakan Set-ACL adalah bahwa cmdlet selalu mencoba untuk mengubah pemilik sumber daya, bahkan jika Anda hanya ingin mengubah izin NTFS. Akibatnya, untuk menambahkan hak ke objek, Anda perlu menggunakan konstruksi berikut:
$ path = "c: \ drivers"
$ user = "WORKSTAT1 \ user1"
$ Rights = "Baca, ReadAndExecute, ListDirectory"
$ InheritSettings = "Containerinherit, ObjectInherit"
$ PropogationSettings = "Tidak Ada"
$ RuleType = "Izinkan"
$ acl = Dapatkan-Acl $ path
$ perm = $ user, $ Rights, $ InheritSettings, $ PropogationSettings, $ RuleType
$ rule = New-Object -TypeName System.Security.AccessControl.FileSystemAccessRule -ArgumentList $ perm
$ acl.SetAccessRule ($ rule)
$ acl | Set-Acl -Path $ path
Untuk menghapus akses folder NTFS untuk pengguna atau grup:
$ path = "c: \ drivers"
$ acl = Dapatkan-Acl $ path
$ rules = $ acl.Access | di mana IsInherited -eq $ false
$ targetrule = $ rules | di mana IdentityReference -eq "WORKSTAT1 \ user1"
$ acl.RemoveAccessRule ($ targetrule)
$ acl | Set-Acl -Path $ path
Untuk menonaktifkan pewarisan folder dari PowerShell:
$ path = 'C: \ dist'
$ acl = Dapatkan-ACL -Path $ path
$ acl.SetAccessRuleProtection ($ True, $ True) # the pertama $ True menunjukkan apakah direktori ini dilindungi, $ True kedua - apakah akan menyalin izin NTFS saat ini
Set-Acl -Path $ path -AclObject $ acl
Kami menggunakan modul NTFSSecurity untuk mengelola izin dari PowerShell
Seperti yang saya katakan, modul bawaan untuk mengelola ACL pada objek di PowerShell bukan yang paling nyaman. Untuk mengelola hak file dan folder NTFS pada Windows, lebih baik menggunakan modul galeri PowerShell yang terpisah - Keamanan NTFS. Versi terbaru dari modul NTFSSecurity (4.2.4 saat ini) dapat diinstal dengan perintah Instal-Modul -Nama NTFSSecurity
, atau unduh secara manual (tautan). Untuk pemasangan manual, cukup membuka ritsleting isi arsip modul ke dalam C: \ Windows \ System32 \ WindowsPowerShell \ v1.0 \ Modules \ NTFSSecurity direktori (jangan lupa membuka kunci file yang diunduh).
Impor modul NTFSSecurity ke dalam sesi PowerShell:
Modul Impor NTFSSecurity
Mari kita buat daftar perintah yang tersedia di modul (tersedia 36 cmdlet):
Dapatkan-Perintah -Module NTFSSecurity
Daftar izin direktori NTFS saat ini:Dapatkan-Barang 'c: \ distr' | Dapatkan-NTFSAccess
Seperti yang Anda lihat, izin saat ini disajikan dalam bentuk yang lebih nyaman..
Untuk memberikan pengguna tertentu dan grup hak penuh grup ke folder, jalankan perintah:Tambah-NTFSAccess -Path C: \ distr -Akun 'WORKSTAT1 \ confroom', 'BUILTIN \ Administrator' -AccessRights 'Fullcontrol' -PassThru
Untuk memberikan hak hanya di tingkat atas dan tidak mengubah izin pada objek bersarang (hanya pada folder), gunakan perintah:
Tambah-NTFSAccess c: \ data \ public -Account corp \ aaivanov -AccessRights Ubah -AplikasiUntukFolder Ini Saja
Hapus izin yang diberikan untuk NTFS:
Hapus-NTFSAccess -Path C: \ distr -Akun 'WORKSTAT1 \ confroom' -AccessRights FullControl -PassThru
Perintah berikut dapat menghilangkan hak akun yang ditentukan untuk semua objek bersarang di folder yang ditentukan (izin yang diwarisi akan dilewati):
Dapatkan-ChildItem -Path C: \ distr -Recurse | Dapatkan-NTFSAccess -Akun 'WORKSTAT1 \ confroom' -KecualikanInherited | Hapus-NTFSAccess -PassThru
Perintah berikut ini dapat menjadikan akun Administrator sebagai pemilik semua objek bersarang di direktori:
Dapatkan-ChildItem -Path C: \ distr -Recurse -Force | Set-NTFSOwner -Account 'Administrator'
Untuk menghapus semua izin yang ditetapkan ke objek direktori secara manual (izin yang diwarisi tidak akan dihapus):
Dapatkan-ChildItem -Path C: \ distr -Recurse -Force | Hapus-NTFSAccess
Aktifkan warisan NTFS untuk semua objek di direktori:
Dapatkan-ChildItem -Path C: \ distr -Recurse -Force | Aktifkan-NTFSAccessInheritance
Untuk menampilkan semua izin yang ditetapkan secara manual, tidak termasuk izin yang diwarisi:
dir C: \ distr | Dapatkan-NTFSAccess -ExcludeInherited
Anda dapat menampilkan izin yang diberikan ke akun tertentu (jangan bingung dengan izin yang efektif, kami akan membicarakannya di bawah):
dir C: \ distr | Dapatkan-NTFSAccess -Account corp \ aaivanov
Memeriksa Izin NTFS yang Efektif pada Objek dari PowerShell
Anda bisa mengeceknya izin NTFS yang efektif ke file atau folder tertentu menggunakan cmdlet Dapatkan-EffectiveAccess
. Misalkan Anda telah memberikan akses ke folder tertentu ke beberapa grup keamanan AD dan sekarang Anda ingin memahami apakah akun tertentu (SID) memiliki akses ke folder ini atau tidak. Bagaimana melakukan ini tanpa mendaftar grup AD yang memasukkan akunnya? Dalam situasi ini, fungsi memeriksa izin NTFS yang efektif akan membantu. Katakanlah Anda perlu memeriksa hak efektif semua subfolder di direktori untuk ruang pengguna.
Dapatkan-ChildItem -Path c: \ distr -Recurse -Directory | Dapatkan-NTFSEffectiveAccess -Akun 'WORKSTAT1 \ confroom' | pilih Akun, AccessControlType, AccessRights, FullName
Atau Anda dapat memeriksa izin efektif pada file tertentu:
Dapatkan-Item -Path 'C: \ distr \ mstsc.exe.manifest' | Dapatkan-NTFSEffectiveAccess -Akun 'WORKSTAT1 \ confroom' | Format-daftar