PowerShell ile NTFS İzinleri Nasıl Yönetilir
Bir BT uzmanıysanız ve kuruluşlarınız için dosya sistemi izinlerini ayarlamakta zorlanıyorsanız şanslısınız. GUI kullanarak NTFS izinlerini yönetmek, özellikle çok sayıda kullanıcı veya grupla çalışırken zaman alıcıdır. Neyse ki, her şeyi daha iyi hale getirecek PowerShell'imiz var. Nasıl? Microsoft.PowerShell.Security modülü.
PowerShell'de ACL'lerle çalışmaya özel olarak Get-ACL ve Set-ACL adı verilen iki cmdlet bulunur. Bu iki cmdlet, bu eğitimde öğreneceğiniz herhangi bir sayıda NTFS iznini alabilir ve atayabilir. NTFS izinlerini yönetirken daha verimli ve anında kullanışlı olmak istiyorsanız okumaya devam edin.
Okumaya vaktiniz yok mu? Problem değil! TechSnips.io'dan Anthony Howell'ın hazırladığı bu yardımcı videoyu aşağıdan izleyin:
Önkoşullar
Bu eğitimdeki örnekleri takip etmek için şunlara ihtiyacınız vardır:
- PowerShell 7 veya Windows PowerShell 5.1
- NTFS dosya ve klasör izinlerine ilişkin temel anlayış
Test Edilecek Dosyalar/Klasörler Oluşturma
Bu eğitim basit bir "laboratuvar" veya tek bir klasör etrafında oluşturulacaktır. PowerShell'de NTFS izinleriyle nasıl çalışılacağını en baştan öğreneceksiniz; sizin açınızdan ekstra çalışmaya gerek yok.
- Başlamak için Yönetici olarak bir PowerShell oturumu açın.
- Dosya sisteminizde bir yerde Paylaş adında boş bir klasör oluşturun. Aşağıdaki örneklerde klasörün C:\Share konumunda olduğunu varsayalım. Bu, örneklerin daha kısa olmasını ve takip edilmesinin daha kolay olmasını sağlayacaktır. Aşağıdaki kodu kopyalayarak bu dizini oluşturabilirsiniz:
New-Item -ItemType Directory -Path 'C:\Share'
3. C:\Share\Assets adında bir klasör oluşturun.
New-Item -ItemType Directory -Path 'C:\Share\Assets'4. C:\Share klasöründe client_list.txt adında bir dosya oluşturun.
New-Item -ItemType File -Path 'C:\Share\Client_list.txt'5. C:\Share klasöründe client_projects.txt adında bir dosya oluşturun.
New-Item -ItemType File -Path 'C:\Share\Client_projects.txt'6. Daha sonra Paylaş klasör yolu için bir değişken atayın. Değişken oluşturmak, yazma işlemini azaltır ve yolun yeniden kullanılmasını kolaylaştırır. C:\Share kullandığınızı varsayarak aşağıdaki kod örneğini PowerShell oturumunuza kopyalayın:
$dir = 'C:\Share'7. Enter'a basın. Artık boş bir dizininiz var ve bu yolu değişken olarak kaydettiniz.
Get-Acl ile NTFS İzinlerini Görüntüleme
PowerShell, Get-Acl cmdlet'ini kullanarak NTFS izinlerini hızlı bir şekilde görüntülemenize olanak tanır. Aşağıdaki bölümlerde, bir dosya veya klasörün NTFS izinlerini görüntülemek için cmdlet'i nasıl kullanacağınızı öğreneceksiniz.
Bir erişim kontrol listesi (ACL, erişim kontrol girişlerinin (ACE) bir listesidir. Bir ACL'deki her ACE, bir güvenilen kişiyi tanımlar ve izin verilen, reddedilen veya denetlenen erişim haklarını belirtir. Güvenliği sağlanabilir bir nesnenin güvenlik tanımlayıcısı iki tane içerebilir ACL türleri: DACL ve SACL.
NTFS İzinlerini Görüntüleme
Geleneksel olarak, bir ACL'yi C:\Share klasörüne sağ tıklayarak, Özellikler'e tıklayarak, Güvenlik sekmesini seçerek ve Gelişmiş düğmesini tıklayın. GUI'nin izinleri nasıl görüntülediğine dair bir örneği aşağıda görebilirsiniz.
Yukarıdaki örnekte bazı izin girişleri ve numaralandırılmış özellikler bulunmaktadır. Karşılaştırmayı bu bölümün ilerleyen kısımlarında göreceğiniz için bunları yakından inceleyin.
Daha önce oluşturduğunuz dizini kullanarak, Get-Acl komutunu kullanarak dizinin geçerli NTFS izinlerini görüntüleyin.
Get-Acl -Path $dirArtık aşağıdaki ekran görüntüsünde yol, sahip ve erişim düzeyi ayrıntılarını görmelisiniz.
Yukarıdaki ekran görüntüsünde gösterilen Access özelliği, ACL ile ilgili ek bilgiler içerir, ancak yukarıdaki FullControl'ün sonundaki üçlü noktalarla gösterildiği gibi ekranın dışına kayar. Erişim nesne özelliklerini görüntülemek için önceki komutu yuvarlak parantez veya parantez içine alarak bu özelliği görüntülemenin daha iyi bir yolu vardır. Aşağıdaki kodu çalıştırarak yalnızca bu nesnede Access özelliğini arayın.
(Get-Acl -Path $dir).AccessYukarıdaki komut,
Accessnesnesi ve-ExpandPropertiesparametresi kullanılarak da ifade edilebilir:Get-Acl -Path $dir | Select-Object -ExpandProperty Erişimi
Aşağıdaki ekran görüntüsünde gösterildiği gibi, komutun bağımsız Erişim özelliklerini daha kolay görebilmesi için çıktı sarılmıştır:
Erişim özelliklerini yukarıdaki şekilde görüntülemek, çok sayıda Erişim Kontrol Varlığınıza (ACE) sahipseniz terminal çıktısının ekranda hızlı bir şekilde aşağı kaydırılmasını sağlayabilir. Her varlık, FileSystemRights, AccessControlType, IdentityReference, IsInherited, InheritenceFlags ve PropagationFlags özelliklerini içerir. Tüm bunları biraz daha okunabilir hale getirmek için nesneleri Format-Table -AutoSize'a aktarın. Aşağıdaki komutu çalıştırın.
(Get-Acl -Path $dir).Access | Format-Table -AutoSizeAşağıdaki ekran görüntüsünde görebileceğiniz gibi, Format-Table -AutoSize kullanıldığında erişim özellikleri daha temiz ve daha düzenlidir:
Özellikleri ve sütun numarasını inceleyin. Bunların, dersin başında GUI'de gördüğünüz özelliklerle aynı olduğuna dikkat edin.
Erişim Nesnelerini Filtreleme
NTFS izinlerini keşfederken daha kesin olmak isteyeceğiniz zamanlar vardır. Bunu yapmak için, belirli bir ACE'yi filtreleyebilir veya PowerShell'i kullanarak bir ACL'de devralınan veya açık NTFS izinlerine sahip belirli sonuçları bulabilirsiniz. Terminal penceresini gözlerinizle satır satır kaydırmak yerine, biraz filtreleme yapmak için Where-Object cmdlet'ini kullanabilirsiniz.
Aşağıdaki kod örneği, NTFS izinlerini devralmayan nesnelere filtre uygular. Bu, -Not işleneniyle birlikte Nerede-Nesne kullanılarak, $_ boru hattındaki geçerli nesneye bakılarak yapılır. <'nin üye nesne özelliği.IsInherited , ACE'nin mirasın sonucu olup olmadığını ve açıkça ayarlanmadığını belirtir:
(Get-Acl -Path $dir).Access | Where-Object {$_.IsInherited -eq $true} | Format-Table -AutoSizeNesneleri
Format-Table -AutoSize'a yönlendirmeyi unutmayın, aksi takdirde çıktı ekranda aşağı doğru kayar. Bunu yeni bir alışkanlık haline getirin; bana sonra teşekkür edeceksin!
Belirli sonuçları görmek için aşağıdaki kodu kullanarak 'USERNAME' değerini başka bir kullanıcı adıyla değiştirin:
(Get-Acl -Path $dir).Access | Where-Object {$_.IdentityReference -like 'USERNAME'} | Format-Table -AutoSizeAşağıda sonuçların nasıl görünebileceğine dair bir örnek verilmiştir:
Yukarıdaki örnek, IdentityReference özelliğinin kullanıcı veya güvenlik grubu tarafından atanan izinler olduğu tüm ACE'leri gösterir.
Devam edin ve şu ana kadar
Get-Aclhakkında öğrendiklerinizi uygulayın. Sisteminizdeki bazı farklı dosya ve klasörleri inceleyin. Bu, farklı bağlamlar için birçok farklı güvenlik tanımlayıcısını görmenize yardımcı olacaktır. Bu aynı zamanda kas hafızasının oluşmasına da yardımcı olacaktır.
İşleri bir adım öteye taşıyalım ve NTFS izinlerini atayalım.
Set-Acl ile NTFS NTFS İzinlerini Değiştirme
Artık NTFS izinlerini görüntüleyebildiğinize göre, PowerShell'i kullanarak NTFS izinlerini atama ve değiştirme zamanı geldi. Set-Acl cmdlet'i bunu mümkün kılar. Aşağıdaki bölümlerde, bir dosya veya klasörden NTFS izinlerini kopyalamak, değiştirmek ve kaldırmak için bu cmdlet'in Get-Acl ile birlikte nasıl kullanılacağı gösterilecektir.
NTFS İzinlerini Kopyalama
Yeni bir ACL için kullanmanız gereken uygun düzeyde NTFS izinlerini içeren bir dosya veya klasörünüz olabilir. İzinleri bir dosya veya klasörden diğerine kopyalayarak zamandan tasarruf edebilirsiniz.
Mevcut ACL'leri/ACE'leri kopyalamak, kopyalama yaptığınız güvenlik tanımlayıcısının ilk etapta hedef için doğru ve uygun olduğunu varsayarsak, NTFS izinlerini ayarlarken insan hatasını azaltabilir. Dediği gibi, "Büyük güç, büyük sorumluluk getirir." Bunu aklınızda bulundurun.
Aşağıdaki ekran görüntüsünü göz önünde bulundurun. Burada C:\Share içindeki Client_List.txt adlı bir dosya için ACL'ye bakıyorsunuz. ACL, istediğiniz NTFS izinlerinin doğru düzeyine sahiptir:
Şimdi bir sonraki ekran görüntüsünü düşünün. Bu sefer ACL'de C:\Share içindeki Client_Projects.txt adlı başka bir dosyaya bakıyorsunuz. Bu dosya istediğiniz NTFS izinlerine sahip değil:
NTFS izinlerini Client_List.txt dosyasından Client_Projects.txt dosyasına kopyalamanız gerekir. Bunu nasıl yapabilirsin? Client_List.txt'den ACL'yi alıp ardından Set-Acl cmdlet'ini -AclObject parametresiyle kullanarak izinleri değiştireceksiniz. Aşağıdaki kodu çalıştırdığınızda, Client_List.txt dosyasındaki ACL'nin tamamı Client_Projects.txt dosyasına kopyalanır:
# Copy Client_list.txt Security Descriptors to Client_Projects.txt
$Acl = Get-Acl -Path 'C:\Share\Client_list.txt'
Set-Acl -AclObject $Acl -Path 'C:\Share\Client_Projects.txt'Aşağıdaki numaralandırılmış ekran görüntüsünde görebileceğiniz gibi, Client_Projects.txt dosyası artık Client_list.txt ile aynı güvenlik tanımlayıcılarına sahiptir.
- Mevcut bir dosyadan mevcut bir ACL'yi alın.
- Kopyalanan ACL nesnesini dosya veya klasöre ayarlayın.
- ACL'nin dosyaya veya klasöre doğru şekilde kopyalandığını kontrol edin.
Artık Client_Projects.txt dosyası için ACL'nin, AccessControlType'a sahip IdentityReference sütunundaki Client_List.txt dosyasıyla aynı olduğunu görüyorsunuz. İzin Ver olarak ayarlandı. Klasörlere NTFS izinleri atamak için de aynı tekniği kullanırsınız.
NTFS İzinleri Ekleme
Son bölümde, mevcut NTFS izinlerini bir dosya nesnesinden diğerine kopyaladınız. Bu sefer NTFS izinlerini sıfırdan oluşturacaksınız. Bu, bir dosyaya veya klasöre atanacak NTFS izinlerini atamanıza olanak tanır.
Öncelikle Set-Acl tarafından kullanılan yeni bir nesne oluşturmak için kullanılacak bazı değişkenleri atamaya başlayın. Bunu bu şekilde yapmak, komutu çalıştırma zamanı geldiğinde işi biraz kolaylaştırır. Aşağıdaki kod, bir dosya veya klasöre atanan NTFS izinleri olacak bir ACE'nin özelliklerini oluşturur:
# Create the ACE
$identity = 'domain\user'
$rights = 'FullControl' #Other options: [enum]::GetValues('System.Security.AccessControl.FileSystemRights')
$inheritance = 'ContainerInherit, ObjectInherit' #Other options: [enum]::GetValues('System.Security.AccessControl.Inheritance')
$propagation = 'None' #Other options: [enum]::GetValues('System.Security.AccessControl.PropagationFlags')
$type = 'Allow' #Other options: [enum]::GetValues('System.Securit y.AccessControl.AccessControlType')
$ACE = New-Object System.Security.AccessControl.FileSystemAccessRule($identity,$rights,$inheritance,$propagation, $type)Daha sonra, Assets klasörü için başlangıç ACL'sini alacak bir değişken daha atayın. Ardından AddAccessRule yöntemi üye türünü kullanarak $ACE değişkenini kullanarak bir erişim kuralı ekleyin:
$Acl = Get-Acl -Path "$dir\Assets"
$Acl.AddAccessRule($ACE)Artık yeni oluşturulan ACE'yi C:\Share\Assets ACL'sine eklemeye hazırsınız. Şimdi bu yeni ACE'yi uygun dizine uygulamak için Set-Acl'i kullanın:
Set-Acl -Path "$dir\Assets" -AclObject $AclArdından, aşağıdaki kodu kullanarak seçtiğiniz kullanıcının gerekli dizini görüntüleme izinlerine sahip olduğunu doğrulayın:
(Get-Acl -Path "$dir\Assets").Access | Format-Table -AutosizeNTFS İzinlerini Kaldırma
Bir kaynaktan NTFS izinlerini kaldırmanız gereken bir zaman gelecektir.
NTFS izinlerini kaldırmak için dosya veya klasörün geçerli ACL'sini alarak başlayın. Bu örnekte bu dosya Client_Projects.txt'dir:
$Acl = Get-Acl -Path "$dir\Client_Projects.txt"Şimdi kaldırmak istediğiniz belirli ACE'yi filtreleyin. Bunu, $Acl üye nesnelerini çağırarak ve bu sonuçları Where-Object'e ve birkaç işlenene aktararak yaparsınız:
$Ace = $Acl.Access | Where-Object {($_.IdentityReference -eq 'domain\user') -and -not ($_.IsInherited)}Daha sonra, geçerli ACL güvenlik tanımlayıcılarını içeren $Acl değişkenini kullanın, RemoveAccessRule yöntemini çağırın ve yukarıda oluşturulan ACE nesnesini New-Object kullanarak iletin cmdlet'ini RemoveAccessRule() yöntemine ekleyin. Bu, girişi kaldıracaktır:
$Acl.RemoveAccessRule($Ace)Mevcut bir ACL'yi burada değiştirdiğinizi ve değişiklikleri henüz gerçekleştirmediğinizi unutmamanız önemlidir.
Şimdi bu değişikliklerin kalıcı olmasını sağlamak için -Path ve -AclObject parametrelerini uygun değerleriyle sağlayarak ve Set-Acl cmdlet'ini çalıştırın. "$dir\Client_Projects.txt"$Acl . Aşağıdaki komutu girdikten sonra Enter'a basın:
Set-Acl -Path "$dir\Client_Projects.txt" -AclObject $AclÖzet
Bu makalede, PowerShell ile NTFS izinlerini yönetmeyi öğrendiniz. Get-Acl ve Set-Acl cmdlet'lerini ve NTFS izinleriyle ne yaptıklarını öğrendiniz.
Ayrıca yukarıdaki cmdlet'lerde kullanılmak üzere bir ACL'deki belirli bir ACE'yi hedeflemek için filtreleri nasıl kullanacağınızı da öğrendiniz. Biraz pratik yaparak, her zamankinden daha fazla NTFS izin isteğini kolayca yönetebileceksiniz.
Daha fazla okuma
- Get-Acl
- Set-Acl
- FileSystemRights Numaralandırması
- [Erişim Kontrol Listeleri](https://docs.microsoft.com/en-us/windows/win32/secauthz/access-control-lists#:~:text=Erişim kontrol listesi (ACL), türlerin bir listesidir. ACL%3A, DACL ve SACL.)
- Kopya-Acl








