powershell ntfs permission otomasyonu
PowerShell ile File Server ve NTFS Permission otomasyonu, klasör oluşturma, izin atama, departman klasörlerini standartlaştırma, kullanıcı home folder süreçleri ve ACL raporlama gibi tekrarlanan işlemleri daha kontrollü hale getirir.
Bu rehberde temel NTFS izin yapısını, PowerShell ile ACL okuma ve uygulama mantığını ve yaygın File Server otomasyon senaryolarını adım adım ele alıyorum.
Amaç, File Server üzerinde tekrar eden klasör ve yetki işlemlerini tek tek GUI üzerinden yapmak yerine standart PowerShell akışlarına dönüştürmektir. Örnekler departman klasörleri, kullanıcı home folder’ları ve ACL raporlama senaryolarına odaklanır.
NTFS izinleri temel olarak şu başlıklarda değerlendirilir:
PowerShell tarafında temel araçlar Get-Acl ve Set-Acl cmdlet’leridir.
$path = 'D:DepartmanlarIT'
$acl = Get-Acl -Path $path
$acl.Access | Select-Object IdentityReference, FileSystemRights, AccessControlType, IsInherited Değişiklik yapmadan önce mevcut ACL’yi görmek, kalıtım ve mevcut yetkileri anlamak açısından önemlidir.
Aşağıdaki örnek yeni bir departman klasörü oluşturur ve üç farklı güvenlik grubuna farklı erişim seviyeleri tanımlar.
$path = 'D:DepartmanlarIT'
$groupFull = 'DOMAINIT-Full'
$groupModify = 'DOMAINIT-Modify'
$groupRead = 'DOMAINIT-Read'
if (-not (Test-Path $path)) {
New-Item -Path $path -ItemType Directory | Out-Null
}
$acl = Get-Acl -Path $path
$ruleFull = New-Object System.Security.AccessControl.FileSystemAccessRule(
$groupFull,
'FullControl',
'ContainerInherit,ObjectInherit',
'None',
'Allow'
)
$ruleModify = New-Object System.Security.AccessControl.FileSystemAccessRule(
$groupModify,
'Modify',
'ContainerInherit,ObjectInherit',
'None',
'Allow'
)
$ruleRead = New-Object System.Security.AccessControl.FileSystemAccessRule(
$groupRead,
'ReadAndExecute',
'ContainerInherit,ObjectInherit',
'None',
'Allow'
)
$acl.SetAccessRule($ruleFull)
$acl.SetAccessRule($ruleModify)
$acl.SetAccessRule($ruleRead)
Set-Acl -Path $path -AclObject $acl İzin uygulamasından sonra ACL’yi tekrar okuyarak beklenen grupların doğru izinlerle geldiğini kontrol edin:
Get-Acl -Path $path |
Select-Object -ExpandProperty Access |
Select-Object IdentityReference, FileSystemRights, AccessControlType, IsInherited Benzer klasör yapıları tekrar tekrar oluşturulacaksa departman listesi üzerinden standart bir döngü kurulabilir.
$basePath = 'D:Departmanlar'
$departments = @('IT', 'Finance', 'HR', 'Production')
foreach ($department in $departments) {
$folder = Join-Path $basePath $department
$group = "DOMAIN$department-Modify"
if (-not (Test-Path $folder)) {
New-Item -Path $folder -ItemType Directory | Out-Null
}
$acl = Get-Acl -Path $folder
$rule = New-Object System.Security.AccessControl.FileSystemAccessRule(
$group,
'Modify',
'ContainerInherit,ObjectInherit',
'None',
'Allow'
)
$acl.SetAccessRule($rule)
Set-Acl -Path $folder -AclObject $acl
} Burada grup adlandırma standardının Active Directory tarafındaki gerçek grup yapınızla aynı olması gerekir.
Yeni bir kullanıcı için home folder oluşturma işlemi de aynı yaklaşımla otomatikleştirilebilir.
$user = 'user01'
$homeRoot = 'D:HomeFolders'
$homeDir = Join-Path $homeRoot $user
if (-not (Test-Path $homeDir)) {
New-Item -Path $homeDir -ItemType Directory | Out-Null
}
$acl = Get-Acl -Path $homeDir
$rule = New-Object System.Security.AccessControl.FileSystemAccessRule(
"DOMAIN$user",
'Modify',
'ContainerInherit,ObjectInherit',
'None',
'Allow'
)
$acl.SetAccessRule($rule)
Set-Acl -Path $homeDir -AclObject $acl Bu örnek temel mantığı gösterir. Gerçek ortamda inheritance, yöneticilerin erişimi, sahiplik ve grup tabanlı yetkilendirme modeli ayrıca tasarlanmalıdır.
Migration veya yetki analizi öncesinde klasörlerin ACL bilgilerini raporlamak yararlıdır.
$root = 'D:Departmanlar'
$reportPath = 'C:ACL_Reports'
$reportFile = Join-Path $reportPath "ACL_$(Get-Date -Format yyyyMMdd_HHmm).csv"
if (-not (Test-Path $reportPath)) {
New-Item -Path $reportPath -ItemType Directory -Force | Out-Null
}
$report = foreach ($folder in Get-ChildItem -Path $root -Directory) {
$acl = Get-Acl -Path $folder.FullName
foreach ($entry in $acl.Access) {
[PSCustomObject]@{
Folder = $folder.FullName
Identity = $entry.IdentityReference
Rights = $entry.FileSystemRights
Type = $entry.AccessControlType
IsInherited = $entry.IsInherited
InheritanceFlags = $entry.InheritanceFlags
PropagationFlags = $entry.PropagationFlags
}
}
}
$report | Export-Csv -Path $reportFile -NoTypeInformation -Encoding UTF8 Bu çıktı ACL yapısının denetlenmesi ve migration öncesi karşılaştırma için kullanılabilir. CSV raporu doğrudan bir ACL geri yükleme dosyası değildir; geri yükleme senaryosu ayrıca planlanmalıdır.
Script’i çalıştıran hesabın hedef klasör üzerinde izin değiştirme yetkisine sahip olduğunu kontrol edin. Gerekirse mevcut owner ve advanced permission yapısını inceleyin.
DOMAINGroupName biçimindeki güvenlik grubunun gerçekten var olduğunu ve yazımının doğru olduğunu doğrulayın.
ACL çıktısındaki IsInherited, InheritanceFlags ve PropagationFlags alanlarını kontrol edin. Üst klasörden gelen izinler, doğrudan atanan izinlerle birlikte değerlendirilmelidir.
Değişiklikten sonra Get-Acl ile gerçek sonucu yeniden okuyun. Script’te hedef klasör ve grup değişkenlerinin doğru olduğundan emin olun.
PowerShell ile NTFS Permission otomasyonu, File Server yönetiminde tekrar eden işleri standartlaştırmak için güçlü bir yöntemdir. Klasör oluşturma, grup bazlı izin atama, home folder oluşturma ve ACL raporlama gibi işlemler tek bir yönetim yaklaşımı altında toplanabilir.
Asıl hedef yalnızca işlemi hızlandırmak değil; yetki modelini tekrar edilebilir, denetlenebilir ve daha az hataya açık hale getirmektir.
PowerShell komutlarını cmdlet, pipeline, nesne, raporlama ve uzaktan yönetim mantığıyla öğrenin. Sistem yöneticileri için uygulanabilir…
Kurumsal IT altyapılarında zamanla depolama ihtiyaçlarının artması, eski sunucuların performansının yetersiz kalması veya yeni mimariye…
NTFS Permission Tasarımı: AGDLP Modeli ile Kurumsal Yetkilendirme Rehberi Kurumsal ortamlarda NTFS permission tasarımı, dosya…
Kurumsal yapılarda Windows File Server güvenliği, veri bütünlüğü ve iş sürekliliği açısından kritik öneme sahiptir.…
Blockchain Log Bütünlüğü Bu yazımızda blockchain log bütünlüğü üzerine incelemelerde bulunacağız. Günümüz kurumsal sistemlerinde en…
A PowerShell SQL Server backup script is a practical way to standardize SQL backups across…
This website uses cookies.
Read More