# ============================================================ # ByteTrail GmbH – GPO & File Server Setup Script # Domäne: bytetrail.local # Ausführen auf: SRV-DC01 (bzw. Fileserver) als Domain Admin # ============================================================ Import-Module GroupPolicy -ErrorAction Stop #region KONFIGURATION $Domain = "byte.trail" $NetBIOSDom = "BYTE" # NetBIOS Name für Rechtevergabe $DomainDN = "DC=byte,DC=trail" $FreigabePfad = "E:\Freigabe" #endregion Write-Host "`n=== ByteTrail GPO & Fileserver Setup gestartet ===" -ForegroundColor Cyan # ============================================================ # TEIL 1: GRUPPENRICHTLINIEN (GPOs) # ============================================================ Write-Host "`n[1/2] Konfiguriere Gruppenrichtlinien (GPOs)..." -ForegroundColor Yellow $GpoSecurityName = "ByteTrail_Base_Security" $GpoDrivesName = "ByteTrail_Mapped_Drives" # 1.1 Basis-Sicherheit (Domänenweit) if (!(Get-GPO -Name $GpoSecurityName -ErrorAction SilentlyContinue)) { try { $gpoSec = New-GPO -Name $GpoSecurityName -Comment "Basis-Sicherheitsrichtlinien (Bildschirmsperre etc.)" New-GPLink -Name $GpoSecurityName -Target $DomainDN -LinkEnabled Yes | Out-Null # ECHTE RICHTLINIEN SETZEN: Automatische Bildschirmsperre nach 15 Minuten (900 Sekunden) erzwingen Set-GPRegistryValue -Name $GpoSecurityName -Key "HKCU\Software\Policies\Microsoft\Windows\Control Panel\Desktop" -ValueName "ScreenSaveActive" -Type String -Value "1" | Out-Null Set-GPRegistryValue -Name $GpoSecurityName -Key "HKCU\Software\Policies\Microsoft\Windows\Control Panel\Desktop" -ValueName "ScreenSaverIsSecure" -Type String -Value "1" | Out-Null Set-GPRegistryValue -Name $GpoSecurityName -Key "HKCU\Software\Policies\Microsoft\Windows\Control Panel\Desktop" -ValueName "ScreenSaveTimeOut" -Type String -Value "900" | Out-Null Write-Host " [+] GPO '$GpoSecurityName' erstellt, konfiguriert und mit Domäne verknüpft." -ForegroundColor Green } catch { Write-Host " [!] Fehler bei GPO '$GpoSecurityName': $($_.Exception.Message)" -ForegroundColor Red } } else { Write-Host " [~] GPO '$GpoSecurityName' existiert bereits." -ForegroundColor Gray } # 1.2 Netzlaufwerke GPO-Hülle (Verknüpft mit allen relevanten OUs) if (!(Get-GPO -Name $GpoDrivesName -ErrorAction SilentlyContinue)) { try { New-GPO -Name $GpoDrivesName -Comment "Automatische Netzlaufwerk-Zuweisungen fuer Fachabteilungen" | Out-Null # Mit den OUs aus Skript 1 verknüpfen New-GPLink -Name $GpoDrivesName -Target "OU=Geschaeftsfuehrung,$DomainDN" -LinkEnabled Yes | Out-Null New-GPLink -Name $GpoDrivesName -Target "OU=Sales,$DomainDN" -LinkEnabled Yes | Out-Null New-GPLink -Name $GpoDrivesName -Target "OU=Marketing,$DomainDN" -LinkEnabled Yes | Out-Null New-GPLink -Name $GpoDrivesName -Target "OU=Service,$DomainDN" -LinkEnabled Yes | Out-Null Write-Host " [+] GPO '$GpoDrivesName' erstellt und mit OUs verknüpft." -ForegroundColor Green } catch { Write-Host " [!] Fehler bei GPO '$GpoDrivesName': $($_.Exception.Message)" -ForegroundColor Red } } else { Write-Host " [~] GPO '$GpoDrivesName' existiert bereits." -ForegroundColor Gray } # ============================================================ # TEIL 2: FILESERVER ORDNER & BERECHTIGUNGEN (NTFS) # ============================================================ Write-Host "`n[2/2] Konfiguriere Ordnerstruktur & NTFS-Berechtigungen auf $FreigabePfad..." -ForegroundColor Yellow # 2.1 Hauptordner erstellen und Freigabe (SMB) einrichten if (!(Test-Path $FreigabePfad)) { New-Item -Path $FreigabePfad -ItemType Directory -Force | Out-Null } try { Get-SmbShare -Name "Freigabe" -ErrorAction Stop | Out-Null Write-Host " [~] SMB-Freigabe 'Freigabe' existiert bereits." -ForegroundColor Gray } catch { New-SmbShare -Name "Freigabe" -Path $FreigabePfad -FullAccess "$NetBIOSDom\Domain Admins" -ChangeAccess "$NetBIOSDom\Domain Users" | Out-Null Write-Host " [+] SMB-Freigabe 'Freigabe' erstellt." -ForegroundColor Green } # Vererbung am Hauptordner deaktivieren $AclBase = Get-Acl $FreigabePfad $AclBase.SetAccessRuleProtection($true, $true) Set-Acl -Path $FreigabePfad -AclObject $AclBase # 2.2 Definition der Unterordner und zugehöriger Gruppen $Folders = @( @{ Name = "Geschaeftsfuehrung"; Group = "GRP-GF-VOLLZUGRIFF" } @{ Name = "Sales"; Group = "GRP-SALES-FILES" } @{ Name = "Marketing"; Group = "GRP-MKT-FILES" } @{ Name = "Service"; Group = "GRP-SVC-FILES" } ) $RightsModify = [System.Security.AccessControl.FileSystemRights]::Modify $RightsRead = [System.Security.AccessControl.FileSystemRights]::ReadAndExecute $RightsFull = [System.Security.AccessControl.FileSystemRights]::FullControl $Inheritance = [System.Security.AccessControl.InheritanceFlags]::ContainerInherit, [System.Security.AccessControl.InheritanceFlags]::ObjectInherit $Propagation = [System.Security.AccessControl.PropagationFlags]::None $Allow = [System.Security.AccessControl.AccessControlType]::Allow $RuleAdmin = New-Object System.Security.AccessControl.FileSystemAccessRule("$NetBIOSDom\GRP-ADMINS", $RightsFull, $Inheritance, $Propagation, $Allow) $RuleGFRead = New-Object System.Security.AccessControl.FileSystemAccessRule("$NetBIOSDom\GRP-GF-VOLLZUGRIFF", $RightsRead, $Inheritance, $Propagation, $Allow) # 2.3 Abteilungsordner anlegen und Rechte setzen foreach ($Folder in $Folders) { $FolderPath = "$FreigabePfad\$($Folder.Name)" if (!(Test-Path $FolderPath)) { New-Item -Path $FolderPath -ItemType Directory -Force | Out-Null } $Acl = Get-Acl -Path $FolderPath $Acl.SetAccessRuleProtection($true, $false) # Entfernt alte vererbte Rechte # Admins bekommen Vollzugriff $Acl.AddAccessRule($RuleAdmin) # Fachabteilung bekommt Ändern-Rechte $RuleDept = New-Object System.Security.AccessControl.FileSystemAccessRule("$NetBIOSDom\$($Folder.Group)", $RightsModify, $Inheritance, $Propagation, $Allow) $Acl.AddAccessRule($RuleDept) # GF bekommt Leserechte (außer in ihrem eigenen Ordner) if ($Folder.Name -ne "Geschaeftsfuehrung") { $Acl.AddAccessRule($RuleGFRead) } Set-Acl -Path $FolderPath -AclObject $Acl Write-Host " [+] Rechte für Ordner '$($Folder.Name)' erfolgreich gesetzt." -ForegroundColor Green } # 2.4 Öffentlicher Austausch-Ordner (Alle dürfen lesen/schreiben) $AustauschPath = "$FreigabePfad\Austausch" if (!(Test-Path $AustauschPath)) { New-Item -Path $AustauschPath -ItemType Directory -Force | Out-Null } $AclAustausch = Get-Acl -Path $AustauschPath $AclAustausch.SetAccessRuleProtection($true, $false) $RuleAll = New-Object System.Security.AccessControl.FileSystemAccessRule("$NetBIOSDom\Domain Users", $RightsModify, $Inheritance, $Propagation, $Allow) $AclAustausch.AddAccessRule($RuleAll) $AclAustausch.AddAccessRule($RuleAdmin) Set-Acl -Path $AustauschPath -AclObject $AclAustausch Write-Host " [+] Rechte für Ordner 'Austausch' erfolgreich gesetzt." -ForegroundColor Green # ============================================================ # ZUSAMMENFASSUNG # ============================================================ Write-Host "`n=== Setup abgeschlossen ===" -ForegroundColor Cyan Write-Host "GPOs:" -ForegroundColor White Write-Host "- Base_Security (mit aktivem Screenlock nach 15min) wurde auf die Domäne angewendet." Write-Host "- Mapped_Drives wurde erstellt und mit den OUs verknüpft." Write-Host "`nFileserver:" -ForegroundColor White Write-Host "- Ordnerstruktur unter $FreigabePfad wurde angelegt und SMB-Freigabe aktiviert." Write-Host "- NTFS-Berechtigungen (Sicherheit) wurden strikt nach dem AGDLP-Prinzip gesetzt." Write-Host "`nHINWEIS ZU NETZLAUFWERKEN:" -ForegroundColor Yellow Write-Host "Um die Laufwerke (z.B. Laufwerk S: für Sales) tatsächlich bei den Nutzern einzublenden, öffne nun 'gpmc.msc' (Gruppenrichtlinienverwaltung), bearbeite die GPO 'ByteTrail_Mapped_Drives' und füge unter Benutzerkonfiguration -> Einstellungen -> Windows-Einstellungen -> Laufwerkzuordnungen die Pfade (z.B. \\SRV-DC01\Freigabe\Sales) hinzu." Write-Host ""