PowerShell

PowerShell File Server Yönetimi ve 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ç ve Kapsam

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.

Ön Koşullar

  • NTFS izinlerini değiştirebilecek yetkili bir hesap
  • PowerShell erişimi
  • Hedef klasör yapısının ve kullanılacak güvenlik gruplarının önceden belirlenmesi
  • Üretim ortamına geçmeden önce test klasöründe doğrulama yapılması
  • Mevcut ACL yapısının değişiklik öncesinde raporlanması veya yedeklenmesi

NTFS Permission Yapısı

NTFS izinleri temel olarak şu başlıklarda değerlendirilir:

  • Basic Permissions: Read, Write, Modify ve Full Control
  • Advanced Permissions: Change Permissions, Take Ownership ve ayrıntılı nesne izinleri
  • Inheritance: Üst klasörden alt klasörlere aktarılan izinler

PowerShell tarafında temel araçlar Get-Acl ve Set-Acl cmdlet’leridir.

Mevcut ACL Yapısını Görüntüleme

$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.

PowerShell ile Klasör Oluşturma ve NTFS İzin Atama

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

Doğrulama

İ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

Departman Klasörlerini Tek Script ile Oluşturma

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.

Kullanıcı Home Folder Otomasyonu

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.

ACL Raporlama

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.

Troubleshooting

Access Denied Hatası

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.

Grup Bulunamıyor

DOMAINGroupName biçimindeki güvenlik grubunun gerçekten var olduğunu ve yazımının doğru olduğunu doğrulayın.

Beklenmeyen Kalıtım Davranışı

ACL çıktısındaki IsInherited, InheritanceFlags ve PropagationFlags alanlarını kontrol edin. Üst klasörden gelen izinler, doğrudan atanan izinlerle birlikte değerlendirilmelidir.

Set-Acl Sonrası Beklenen Sonuç Oluşmuyor

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.

Güvenlik ve Best Practice

  • Doğrudan kullanıcı yerine mümkün olduğunca güvenlik grupları üzerinden yetkilendirme yapın.
  • Full Control yetkisini yalnızca gerçekten gerekli gruplara verin.
  • Üretim klasörlerinde değişiklik öncesi mevcut ACL yapısını raporlayın.
  • Inheritance davranışını bilinçli yönetin.
  • Scriptleri önce test klasörü üzerinde doğrulayın.
  • Gerçek domain, kullanıcı ve grup adlarını genel dokümantasyonlarda örnek değerlerle değiştirin.

Sonuç

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.

İlgili Rehberler

Microsoft Dokümantasyonu

Tolga CEYHAN

Tolga CEYHAN, bilgi teknolojilerini severek takip eder ve BT üzerine hali hazırda aktif olarak çalışmaktadır. 2006 yılından 2017 yılına kadar web tasarım yazılım üzerine çalışmalar yaptım. Şuan ise Windows Sistem ve Sistem Güvenliği alanında çalışmalarımı sürdürmekteyim.

Recent Posts

PowerShell Komutları (Profesyonel Rehber)

PowerShell komutlarını cmdlet, pipeline, nesne, raporlama ve uzaktan yönetim mantığıyla öğrenin. Sistem yöneticileri için uygulanabilir…

6 ay ago

Windows File Server Migration Rehberi (Adım Adım Veri Taşıma)

Kurumsal IT altyapılarında zamanla depolama ihtiyaçlarının artması, eski sunucuların performansının yetersiz kalması veya yeni mimariye…

6 ay ago

NTFS Permission Tasarımı ve AGDLP Modeli Rehberi

NTFS Permission Tasarımı: AGDLP Modeli ile Kurumsal Yetkilendirme Rehberi Kurumsal ortamlarda NTFS permission tasarımı, dosya…

6 ay ago

Windows File Server Güvenliği Rehberi

Kurumsal yapılarda Windows File Server güvenliği, veri bütünlüğü ve iş sürekliliği açısından kritik öneme sahiptir.…

6 ay ago

Blockchain Mantığı ile PowerShell Log Bütünlüğü

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…

7 ay ago

PowerShell SQL Backup Script – Automated Full Database Backup

A PowerShell SQL Server backup script is a practical way to standardize SQL backups across…

8 ay ago

This website uses cookies.

Read More