153 lines
8.3 KiB
PowerShell
153 lines
8.3 KiB
PowerShell
# ============================================================
|
||
# 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 = "bytetrail.local"
|
||
$NetBIOSDom = "BYTE" # NetBIOS Name für Rechtevergabe
|
||
$DomainDN = "DC=bytetrail,DC=local"
|
||
$FreigabePfad = "D:\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 "" |