NTFSSecurity est un module PowerShell qui facilite grandement la gestion des permissions NTFS, notamment l’application massive de droits sur des arborescences complètes.
📦 Installation du module
💻 Installation automatique
Install-Module NTFSSecurity
Import-Module NTFSSecurity
📥 Installation manuelle
# Vérifier l'emplacement des modules
$env:PSModulePath
# Télécharger depuis PowerShell Gallery puis copier dans :
# C:\Windows\System32\WindowsPowerShell\v1.0\Modules
# Puis importer
Import-Module NTFSSecurity
🔍 Consultation des permissions
📌 Action | 🧠 Commande NTFSSecurity |
---|---|
📋 Lister permissions dossier | Get-NTFSAccess -Path "D:\Compta" |
👁️ Permissions héritées | Get-NTFSAccess -Path "D:\Compta" -ExcludeInherited |
👤 Permissions utilisateur | Get-NTFSAccess -Path "D:\Compta" -Account "jdupont" |
📊 Propriétaire du dossier | Get-NTFSOwner -Path "D:\Compta" |
🔍 Audit récursif | Get-ChildItem -Recurse "D:\Compta" | Get-NTFSAccess |
➕ Ajout de permissions
📌 Action | 🧠 Commande NTFSSecurity |
---|---|
✏️ Ajouter Modify | Add-NTFSAccess -Path "D:\Compta" -Account "GRP-Compta" -AccessRights Modify |
📖 Ajouter lecture seule | Add-NTFSAccess -Path "D:\Compta" -Account "GRP-Stagiaires" -AccessRights Read |
👑 Ajouter contrôle total | Add-NTFSAccess -Path "D:\Compta" -Account "GRP-Direction" -AccessRights FullControl |
🎯 Application sélective | Add-NTFSAccess -Path "D:\Compta" -Account "jdupont" -AccessRights Write -AppliesTo FilesOnly |
🗑️ Suppression de permissions
📌 Action | 🧠 Commande NTFSSecurity |
---|---|
❌ Supprimer utilisateur | Remove-NTFSAccess -Path "D:\Compta" -Account "ancien_employe" |
🧹 Nettoyer permissions | Remove-NTFSAccess -Path "D:\Compta" -Account "GRP-Temp" -AccessRights All |
🔒 Désactiver héritage | Disable-NTFSAccessInheritance -Path "D:\Compta" -RemoveInheritedAccessRules |
✅ Activer héritage | Enable-NTFSAccessInheritance -Path "D:\Compta" |
🛠️ Exemples de scripts
📁 Appliquer des permissions sur une arborescence complète
# Variables de configuration
$group1 = "ENTREPRISE\GRP-Compta"
$group2 = "ENTREPRISE\GRP-Direction"
$targetPath = "D:\Partage\Comptabilite"
$logPath = "C:\temp\permissions_$(Get-Date -Format 'yyyyMMdd').log"
# Fonction pour appliquer les permissions
function Set-FolderPermissions {
param (
[string]$Path,
[string[]]$Groups
)
try {
foreach ($group in $Groups) {
Add-NTFSAccess -Path $Path -Account $group -AccessRights Modify -AppliesTo ThisFolderSubfoldersAndFiles
Write-Host "✅ Permissions appliquées : $group sur $Path" -ForegroundColor Green
"$(Get-Date) - SUCCESS : $group -> $Path" | Out-File -Append $logPath
}
} catch {
Write-Host "❌ Erreur sur $Path : $_" -ForegroundColor Red
"$(Get-Date) - ERROR : $Path - $_" | Out-File -Append $logPath
}
}
# Application récursive
Write-Host "🚀 Début de l'application des permissions..." -ForegroundColor Cyan
Get-ChildItem -Recurse -Path $targetPath -Directory | ForEach-Object {
Set-FolderPermissions -Path $_.FullName -Groups @($group1, $group2)
}
Write-Host "✅ Terminé ! Log disponible : $logPath" -ForegroundColor Green
🔍 Rapport complet des permissions
# Génère un rapport détaillé des permissions
function Get-DetailedPermissionsReport {
param ([string]$Path)
$report = @()
Get-ChildItem -Recurse $Path | ForEach-Object {
$permissions = Get-NTFSAccess -Path $_.FullName
$owner = Get-NTFSOwner -Path $_.FullName
foreach ($perm in $permissions) {
$report += [PSCustomObject]@{
Path = $_.FullName
Type = if($_.PSIsContainer){"Dossier"}else{"Fichier"}
Owner = $owner.Owner
Account = $perm.Account
Rights = $perm.AccessRights
Inherited = $perm.IsInherited
}
}
}
return $report
}
# Utilisation
$reportPath = "C:\temp\audit_permissions_$(Get-Date -Format 'yyyyMMdd').csv"
Get-DetailedPermissionsReport -Path "D:\Compta" | Export-Csv $reportPath -NoTypeInformation
Write-Host "Rapport généré : $reportPath"
⚠️ Audit des permissions problématiques
# Recherche les permissions suspectes
function Find-ProblematicPermissions {
param ([string]$BasePath)
$suspicious = @()
Get-ChildItem -Recurse $BasePath | ForEach-Object {
$acl = Get-NTFSAccess -Path $_.FullName
# Rechercher permissions Everyone ou Users
$badPerms = $acl | Where-Object {
$_.Account -match "Everyone|Users|Tout le monde" -and
$_.AccessRights -match "FullControl|Modify"
}
if ($badPerms) {
$suspicious += [PSCustomObject]@{
Path = $_.FullName
Account = $badPerms.Account
Rights = $badPerms.AccessRights
Risk = "HIGH"
}
}
}
return $suspicious
}
# Utilisation
Find-ProblematicPermissions -BasePath "D:\Partage" |
Export-Csv "C:\temp\permissions_suspectes.csv" -NoTypeInformation
📁 Setup nouveau partage équipe
# Création d'un partage avec permissions par équipe
$sharePath = "D:\Partages\Equipe-Commercial"
$groups = @{
"ENTREPRISE\GRP-Commercial" = "Modify"
"ENTREPRISE\GRP-Direction" = "FullControl"
"ENTREPRISE\GRP-Stagiaires" = "Read"
}
# Créer le dossier si inexistant
if (!(Test-Path $sharePath)) { New-Item -Path $sharePath -ItemType Directory }
# Appliquer les permissions
foreach ($group in $groups.Keys) {
Add-NTFSAccess -Path $sharePath -Account $group -AccessRights $groups[$group]
Write-Host "✅ $group -> $($groups[$group])"
}
🔄 Migration/Synchronisation permissions
# Copier les permissions d'un dossier vers un autre
$sourcePath = "D:\Ancien\Compta"
$targetPath = "D:\Nouveau\Comptabilite"
# Récupérer permissions source
$sourcePerms = Get-NTFSAccess -Path $sourcePath
# Appliquer au nouveau dossier
foreach ($perm in $sourcePerms) {
if (-not $perm.IsInherited) { # Ignorer les permissions héritées
Add-NTFSAccess -Path $targetPath -Account $perm.Account -AccessRights $perm.AccessRights
Write-Host "Copié : $($perm.Account) -> $($perm.AccessRights)"
}
}
🚨 Dépannage
🆘 Problème | 🧠 Solution |
---|---|
Module non trouvé | Install-Module NTFSSecurity -Force |
Permissions insuffisantes | Exécuter PowerShell en admin |
Erreur “Access denied” | Vérifier propriété du dossier |
Permissions non appliquées | Vérifier héritage avec Get-NTFSInheritance |
Script lent sur gros volumes | Traiter par lots avec Get-ChildItem -Depth |
💡 Bonnes pratiques
- Toujours tester sur un petit échantillon avant une application massive
- Générer des logs pour une traçabilité des modifications
- Sauvegarder les permissions actuelles avant des modifications importantes
- Utiliser des groupes plutôt que des utilisateurs individuels
- Vérifier l’héritage avant désactivation