Appliquer les ACL
Introduction
Nous en arrivons à la dernière étape, nous avons créé les répertoires, créé les GDL, et mis en place leur hiérarchie, ne reste plus qu'à appliquer des droits à nos GDL sur leur dossiers respectifs.
Application des droits
Voici le script qui permet d'appliquer les droits à chaque GDL homonymique de son répertoire, ainsi que l'héritage des groupes RW à l'ensemble des enfants :
Import-Module ActiveDirectory
# Racine des dossiers
$SourcePath = "chemin\vers\Partage"
# Comptes à toujours en Full Control
$alwaysRW = @("Administrateurs", "SYSTEM")
# Fonction pour récupérer les tokens (premier mot de chaque dossier)
function Get-Tokens($parts) {
$tokens = @()
foreach ($p in $parts) {
$tokens += ($p -split " ")[0]
}
return $tokens
}
# Fonction pour générer le nom de groupe
function Get-GroupName($tokens, $type) {
return "GDL_" + ($tokens -join "-") + "_$type"
}
# --- Réinitialiser les droits sur la racine et appliquer Full Control aux comptes admin ---
try {
# --- Partie reset des droits ! ---
# --- A désactiver si vous ne partez pas de zéro ! ---
Write-Host "Réinitialisation des droits sur la racine $SourcePath ..."
icacls $SourcePath /reset /T /C
# --- Partie droits totals pour les admins et system ---
foreach ($account in $alwaysRW) {
icacls $SourcePath /grant "${account}:(OI)(CI)F" /T /C
Write-Host "Full Control appliqué à $account sur $SourcePath (hérité sur tous les sous-dossiers)"
}
} catch {
Write-Warning "Erreur sur la racine : $_"
}
# Parcours récursif des dossiers
Get-ChildItem -Path $SourcePath -Directory -Recurse | ForEach-Object {
$fullPath = $_.FullName
$relativePath = $fullPath.Substring($SourcePath.Length).Trim("\")
$parts = $relativePath -split "\\"
if ($parts.Count -gt 0) {
$tokens = Get-Tokens $parts
$groupRO = Get-GroupName $tokens "RO"
$groupRW = Get-GroupName $tokens "RW"
# Vérifier que les groupes existent
$adRO = Get-ADGroup -Filter "Name -eq '$groupRO'" -ErrorAction SilentlyContinue
$adRW = Get-ADGroup -Filter "Name -eq '$groupRW'" -ErrorAction SilentlyContinue
if (-not $adRO -or -not $adRW) {
Write-Warning "Groupes manquants pour $fullPath : $groupRO / $groupRW"
return
}
try {
# RO → lecture minimale
icacls $fullPath /grant "${groupRO}:(OI)(CI)(RX)" /C
Write-Host "Droits RO appliqués : $groupRO → $fullPath"
# RW → modification complète
icacls $fullPath /grant "${groupRW}:(OI)(CI)(M)" /C
Write-Host "Droits RW appliqués : $groupRW → $fullPath"
} catch {
Write-Warning "Erreur application droits sur $fullPath : $_"
}
}
}
Parfait ! Nous avons à présent mise en place l'AGDLP pour une gestion des droits beaucoup plus fine, facile, et modulable dans le temps.
De plus, ce script s'appuie sur un répertoire racine qui peut etre modifié, si jamais une nouvelle branche devait être créé dans le partage.
No comments to display
No comments to display