skip to content

Recherche

NTFSSecurity

Gestion des permissions NTFS avec le module PowerShell NTFSSecurity - application massive de droits !

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 dossierGet-NTFSAccess -Path "D:\Compta"
👁️ Permissions héritéesGet-NTFSAccess -Path "D:\Compta" -ExcludeInherited
👤 Permissions utilisateurGet-NTFSAccess -Path "D:\Compta" -Account "jdupont"
📊 Propriétaire du dossierGet-NTFSOwner -Path "D:\Compta"
🔍 Audit récursifGet-ChildItem -Recurse "D:\Compta" | Get-NTFSAccess

➕ Ajout de permissions

📌 Action🧠 Commande NTFSSecurity
✏️ Ajouter ModifyAdd-NTFSAccess -Path "D:\Compta" -Account "GRP-Compta" -AccessRights Modify
📖 Ajouter lecture seuleAdd-NTFSAccess -Path "D:\Compta" -Account "GRP-Stagiaires" -AccessRights Read
👑 Ajouter contrôle totalAdd-NTFSAccess -Path "D:\Compta" -Account "GRP-Direction" -AccessRights FullControl
🎯 Application sélectiveAdd-NTFSAccess -Path "D:\Compta" -Account "jdupont" -AccessRights Write -AppliesTo FilesOnly

🗑️ Suppression de permissions

📌 Action🧠 Commande NTFSSecurity
❌ Supprimer utilisateurRemove-NTFSAccess -Path "D:\Compta" -Account "ancien_employe"
🧹 Nettoyer permissionsRemove-NTFSAccess -Path "D:\Compta" -Account "GRP-Temp" -AccessRights All
🔒 Désactiver héritageDisable-NTFSAccessInheritance -Path "D:\Compta" -RemoveInheritedAccessRules
✅ Activer héritageEnable-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 insuffisantesExécuter PowerShell en admin
Erreur “Access denied”Vérifier propriété du dossier
Permissions non appliquéesVérifier héritage avec Get-NTFSInheritance
Script lent sur gros volumesTraiter 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