Comment gérer les listes de contrôle d’accès (ACL) au système de fichiers avec les scripts PowerShell

De nombreuses entreprises s’appuyant sur un environnement Microsoft Windows utilisent NTFS comme système de fichiers principal pour leurs périphériques de stockage qui contiennent des données sensibles. Ce système est le plus facile pour travailler avec des fichiers. Pour pouvoir mettre en œuvre un modèle de moindre privilège (une bonne pratique pour la sécurité du système), les spécialistes de la sécurité informatique et les administrateurs système configurent des listes de contrôle d’accès (ACL) NTFS en ajoutant des entrées de contrôle d’accès (ACE) sur les serveurs de fichiers NTFS.

Dans cet article de blog, vous en apprendrez plus sur :

Les types d’autorisations NTFS pour les fichiers et dossiers

Il existe des autorisations NTFS élémentaires et avancées. Pour chaque autorisation, vous pouvez choisir « Autoriser » ou « Refuser ». Voici les autorisations élémentaires :

  • Contrôle total : les utilisateurs peuvent modifier, ajouter, déplacer et supprimer des fichiers et répertoires, ainsi que leurs propriétés associées. De plus, les utilisateurs peuvent modifier les paramètres des autorisations pour tous les fichiers et sous-répertoires.
  • Modification : les utilisateurs peuvent afficher et modifier des fichiers et des propriétés de fichier, et supprimer ou ajouter des fichiers à un répertoire ou des propriétés de fichier à un fichier.
  • Lecture et exécution : les utilisateurs peuvent exécuter des fichiers exécutables, y compris des scripts.
  • Lecture : les utilisateurs peuvent voir les fichiers, leurs propriétés et leurs répertoires.
  • Écriture : les utilisateurs peuvent écrire dans un fichier et ajouter des fichiers dans des répertoires.

Et voici la liste des autorisations avancées :

  • Parcours du dossier/Exécution du fichier : les utilisateurs peuvent naviguer dans les dossiers, même s’ils n’ont pas les autorisations nécessaires, pour accéder à d’autres fichiers ou dossiers. Les utilisateurs peuvent également exécuter des fichiers exécutables. L’autorisation « Parcours du dossier » n’entre en vigueur que lorsque le groupe ou l’utilisateur ne dispose pas du droit « Contourner la vérification de parcours » dans le composant logiciel enfichable Stratégie de groupe.
  • Liste des dossiers/Lecture de données : les utilisateurs peuvent consulter une liste de fichiers et de sous-dossiers dans le dossier ainsi que le contenu des fichiers.
  • Lire les attributs : les utilisateurs peuvent consulter les attributs d’un fichier ou d’un dossier, par exemple s’il est en lecture seule ou masqué.
  • Écrire les attributs : les utilisateurs peuvent modifier les attributs d’un fichier ou d’un dossier.
  • Lecture des attributs étendus : les utilisateurs peuvent consulter les attributs étendus d’un fichier ou d’un dossier, par exemple les autorisations et les dates/heures de création et de modification.
  • Écriture des attributs étendus : les utilisateurs peuvent modifier les attributs étendus d’un fichier ou d’un dossier.
  • Création de fichiers/Écriture de données : l’autorisation « Création de fichiers » permet aux utilisateurs de créer des fichiers dans le dossier. (Cette autorisation ne s’applique qu’aux dossiers.) L’autorisation « Écriture de données » permet aux utilisateurs d’apporter des modifications au fichier et d’en écraser le contenu existant. (Cette autorisation ne s’applique qu’aux fichiers.)
  • Création de dossiers/Ajout de données : l’autorisation « Création de dossiers » permet aux utilisateurs de créer des dossiers dans un autre dossier. (Cette autorisation ne s’applique qu’aux dossiers.) L’autorisation « Ajout de données » permet aux utilisateurs d’apporter des modifications à la fin du fichier, mais ils ne peuvent pas modifier, supprimer ni écraser des données existantes. (Cette autorisation ne s’applique qu’aux fichiers.)
  • Suppression : les utilisateurs peuvent supprimer le fichier ou le dossier. (Si les utilisateurs ne disposent pas de l’autorisation « Suppression » pour un fichier ou un dossier, ils peuvent quand même le supprimer s’ils disposent de l’autorisation « Suppression des sous-dossiers et des fichiers » pour le dossier parent).
  • Autorisations de lecture : les utilisateurs peuvent lire les autorisations d’un fichier ou d’un dossier, par exemple « Contrôle total », « Lecture » et « Écriture ».
  • Modifier les autorisations : les utilisateurs peuvent modifier les autorisations d’un fichier ou d’un dossier.
  • Appropriation : les utilisateurs peuvent s’approprier le fichier ou le dossier. Le propriétaire d’un fichier ou d’un dossier peut à tout moment modifier les autorisations de ce fichier ou de ce dossier, quelles que soient les autorisations existantes qui protègent le fichier ou le dossier.
  • Synchronisation : les utilisateurs peuvent utiliser l’objet aux fins de synchronisation. Ceci permet à un thread d’attendre que l’objet soit dans l’état indiqué. Ce droit n’est pas présenté dans ACL Editor. Pour en savoir plus à ce sujet, cliquez ici.

Vous pouvez trouver toutes ces autorisations d’utilisateur en exécutant le script PowerShell suivant :

[system.enum]::getnames([System.Security.AccessControl.FileSystemRights])

Les autorisations NTFS peuvent être explicites ou héritées. Les autorisations explicites sont configurées individuellement, tandis que les autorisations héritées sont issues du dossier parent. La hiérarchie des autorisations est la suivante :

  • Refus explicite
  • Autorisation explicite
  • Refus hérité
  • Autorisation héritée

Maintenant que nous savons ce que sont les autorisations NTFS, apprenons à les gérer.

Obtenir une ACL pour les fichiers et dossiers

Le premier cmdlet PowerShell qui permet de gérer les autorisations des fichiers et des dossiers est « get-acl » : il établit la liste de toutes les autorisations des objets. Par exemple, demandons la liste de toutes les autorisations pour le dossier dont le chemin d’objet est « \\fs1\shared\sales » :

get-acl \\fs1\shared\sales | fl

Si vous souhaitez obtenir un rapport complet sur les autorisations NTFS en passant par PowerShell, vous pouvez suivre ces instructions simples pour exporter les autorisations NTFS vers un fichier CSV.

Copier les autorisations pour les fichiers et dossiers

Pour pouvoir copier les autorisations, l’utilisateur doit être propriétaire des dossiers source et cible. La commande suivante copie les autorisations du dossier « Accounting » (Comptabilité) dans le dossier « Sales » (Ventes) :

get-acl \\fs1\shared\accounting | Set-Acl \\fs1\shared\sales

Comme nous pouvons le constater en observant le résultat des commandes « get-acl » avant et après la copie des autorisations, les autorisations du dossier partagé « Sales » ont été modifiées.

Définir les autorisations pour les fichiers et dossiers

Le cmdlet PowerShell « set-acl » sert à modifier le descripteur de sécurité d’un élément spécifié, par exemple un fichier, un dossier ou une clé de registre ; en d’autres termes, il sert à modifier les autorisations des fichiers ou dossiers. Le script suivant règle l’autorisation « Contrôle total » sur « Autoriser » pour l’utilisateur « ENTERPRISE\T.Simpson » sur le dossier « Sales » :

$acl = Get-Acl \\fs1\shared\sales

$AccessRule = New-Object System.Security.AccessControl.FileSystemAccessRule("ENTERPRISE\T.Simpson","FullControl","Allow")

$acl.SetAccessRule($AccessRule)

$acl | Set-Acl \\fs1\shared\sales

Si vous souhaitez définir d’autres autorisations pour les utilisateurs ou les groupes de sécurité, sélectionnez-les dans le tableau ci-dessous :

Des ensembles de droits d’accès élémentaires peuvent également être appliqués :

Supprimer des autorisations d’utilisateur

Pour supprimer une autorisation, utilisez le paramètre « RemoveAccessRule ». Supprimons l’autorisation « Contrôle total » de T.Simpson pour le dossier « Sales » :

$acl = Get-Acl \\fs1\shared\sales

$AccessRule = New-Object System.Security.AccessControl.FileSystemAccessRule("ENTERPRISE\T.Simpson","FullControl","Allow")

$acl.RemoveAccessRule($AccessRule)

$acl | Set-Acl \\fs1\shared\sales

Remarquez que T.Simpson dispose toujours de l’autorisation « Refuser Contrôle total ». Pour la supprimer, utilisons la commande « PurgeAccessRules », qui effacera complètement les autorisations de T.Simpson pour le dossier « Sales » :

$acl = Get-Acl \\fs1\shared\sales

$usersid = New-Object System.Security.Principal.Ntaccount ("ENTERPRISE\T.Simpson")

$acl.PurgeAccessRules($usersid)

$acl | Set-Acl \\fs1\shared\sales

Remarquez que « PurgeAccessRules » ne fonctionne pas avec un nom d’utilisateur en chaîne, elle fonctionne uniquement avec des SID. Pour cette raison, nous avons utilisé la classe « Ntaccount » pour convertir le nom de compte d’utilisateur de chaîne en SID. Remarquez également que « PurgeAccessRules » ne fonctionne qu’avec des autorisations explicites ; elle ne purge pas les droits hérités.

Désactiver ou activer l’héritage des autorisations

Pour gérer l’héritage, nous utilisons la méthode « SetAccessRuleProtection ». Celle-ci a deux paramètres :

  • Le premier paramètre permet de bloquer l’héritage du dossier parent. Il possède deux états : « $true » et « $false ».
  • Le deuxième paramètre détermine si les autorisations héritées courantes doivent être conservées ou supprimées. Il possède les deux mêmes états : « $true » et « $false ».

Désactivons l’héritage pour le dossier « Sales » (Ventes) et supprimons également toutes les autorisations héritées :

$acl = Get-Acl \\fs1\shared\sales

$acl.SetAccessRuleProtection($true,$false)

$acl | Set-Acl \\fs1\shared\sales

Il ne nous reste plus qu’une autorisation d’accès (car celle-ci a été ajoutée explicitement) ; toutes les autorisations héritées ont été supprimées.

Annulons cette modification et réactivons l’héritage pour le dossier « Sales » :

$acl = Get-Acl \\fs1\shared\sales

$acl.SetAccessRuleProtection($false,$true)

$acl | Set-Acl \\fs1\shared\sales

Modifier la propriété des fichiers et dossiers

Pour définir le propriétaire d’un dossier, vous devez exécuter la méthode « SetOwner ». Faisons de « ENTERPRISE\J.Carter » le propriétaire du dossier « Sales » :

$acl = Get-Acl \\fs1\shared\sales

$object = New-Object System.Security.Principal.Ntaccount("ENTERPRISE\J.Carter")

$acl.SetOwner($object)

$acl | Set-Acl \\fs1\shared\sales

Remarquez que nous avons à nouveau utilisé la classe « Ntaccount » pour convertir le nom de compte d’utilisateur de chaîne en SID.

La méthode « SetOwner » ne permet pas de changer le propriétaire d’un compte ; le compte doit disposer des droits « Appropriation », « Lecture » et « Modifier les autorisations ».

 

Comme vous pouvez le constater, il est très facile de gérer les autorisations NTFS avec PowerShell. Mais n’oubliez pas d’auditer également les autorisations NTFS – il est primordial pour la sécurité d’assurer le suivi de toutes les modifications apportées à vos serveurs de fichiers, afin de limiter les fuites de données et de contrer les utilisateurs internes malveillants et les autres risques de sécurité informatique. Voici un guide élémentaire qui explique comment auditer les autorisations NTFS avec PowerShell.

Tutoriel de Windows PowerShell pour débutants