Si vous êtes un professionnel de l’informatique et que vous avez du mal à définir les autorisations du système de fichiers pour votre organisation, vous êtes chanceux. La gestion des autorisations NTFS à l’aide d’une interface graphique est chronophage, notamment lorsqu’il s’agit de travailler avec de nombreux utilisateurs ou groupes. Heureusement, nous avons PowerShell pour améliorer tout cela. Comment ? Grâce au module Microsoft.PowerShell.Security.
PowerShell dispose de deux cmdlets spécifiquement conçus pour travailler avec les listes de contrôle d’accès (ACL) appelés Get-ACL
et Set-ACL
. Ces deux cmdlets peuvent récupérer et attribuer un nombre quelconque d’autorisations NTFS, que vous apprendrez tout au long de ce tutoriel. Si vous souhaitez devenir plus efficace et immédiatement opérationnel dans la gestion des autorisations NTFS, continuez à lire.
Pas le temps de lire ? Pas de problème ! Regardez cette vidéo d’accompagnement de TechSnips.io avec Anthony Howell :
Gérez et générez des rapports sur Active Directory, Exchange et Microsoft 365 avec ManageEngine ADManager Plus. Téléchargez l’essai gratuit !
Prérequis
Pour suivre les exemples de ce tutoriel, vous avez besoin de :
- PowerShell 7 ou Windows PowerShell 5.1
- A basic understanding of NTFS file and folder permissions
Création de fichiers/dossiers pour tester.
Ce tutoriel sera construit autour d’un simple « laboratoire » ou d’un seul dossier. Vous apprendrez comment travailler avec les autorisations NTFS dans PowerShell, du début à la fin ; aucun travail supplémentaire n’est nécessaire de votre part.
- Pour commencer, ouvrez une session PowerShell en tant qu’administrateur.
- Créez un dossier vide appelé Share quelque part sur votre système de fichiers. Dans les exemples suivants, supposons que ce dossier soit situé à C:\Share. Cela permettra de raccourcir les exemples et de les rendre plus faciles à suivre. Vous pouvez créer ce répertoire en copiant le code ci-dessous :
3. Créez un dossier appelé C:\Share\Assets.
4. Créez un fichier appelé client_list.txt dans le dossier C:\Share.
5. Créez un fichier appelé client_projects.txt dans le dossier C:\Share.
6. Ensuite, affectez une variable au chemin du dossier Share. La création de variables réduit la saisie et facilite la réutilisation du chemin. En supposant que vous utilisez C:\Share, copiez l’exemple de code suivant dans votre session PowerShell :
7. Appuyez sur Entrée. Vous disposez maintenant d’un répertoire vide et avez enregistré ce chemin en tant que variable.
Affichage des autorisations NTFS avec Get-Acl
PowerShell vous permet de visualiser rapidement les autorisations NTFS à l’aide de la cmdlet Get-Acl
. Dans les sections suivantes, vous apprendrez comment utiliser la cmdlet pour afficher les autorisations NTFS d’un fichier ou d’un dossier.
Une liste de contrôle d’accès (ACL est une liste d’entrées de contrôle d’accès (ACE). Chaque ACE dans une ACL identifie un bénéficiaire et spécifie les droits d’accès autorisés, refusés ou audités. Le descripteur de sécurité pour un objet pouvant être sécurisé peut contenir deux types d’ACL : une DACL et une SACL.
Affichage des autorisations NTFS
Traditionnellement, vous afficheriez une ACL en cliquant avec le bouton droit sur le dossier C:\Share, en cliquant sur Propriétés, en sélectionnant l’onglet Sécurité et en cliquant sur le bouton Avancé. Vous pouvez voir un exemple de la façon dont l’interface graphique affiche les autorisations ci-dessous.

L’exemple ci-dessus comporte quelques entrées d’autorisation et des propriétés numérotées. Examinez-les attentivement car vous verrez la comparaison plus tard dans cette section.
En utilisant le répertoire que vous avez créé précédemment, affichez les autorisations NTFS actuelles pour le répertoire en utilisant Get-Acl
.
Vous devriez maintenant voir le chemin, le propriétaire et les détails du niveau d’accès dans la capture d’écran suivante.

La propriété Access
affichée dans la capture d’écran ci-dessus contient des informations supplémentaires concernant la liste de contrôle d’accès (ACL), mais elle défile hors de l’écran comme indiqué par les trois points à la fin de FullControl ci-dessus. Il existe une meilleure façon de visualiser cette propriété en encadrant la commande précédente entre parenthèses pour afficher Access
les propriétés de l’objet. Recherchez uniquement la propriété Access
sur cet objet en exécutant le code suivant.
La commande ci-dessus peut également s’exprimer en utilisant l’objet
Access
et en utilisant le paramètre-ExpandProperties
:Get-Acl -Path $dir | Select-Object -ExpandProperty Access
Comme le montre la capture d’écran suivante, la sortie est enveloppée pour rendre la commande plus facile à lire pour les propriétés individuelles de Access
:

La visualisation des propriétés d’accès de la manière décrite ci-dessus peut faire défiler rapidement la sortie du terminal si vous avez de nombreuses entités de contrôle d’accès (ACE). Chaque entité contient les propriétés FileSystemRights, AccessControlType, IdentityReference, IsInherited, InheritanceFlags et PropagationFlags. Pour rendre le tout un peu plus lisible, redirigez les objets vers Format-Table -AutoSize
. Exécutez la commande suivante.
Comme vous pouvez le voir dans la capture d’écran ci-dessous, les propriétés d’accès sont plus propres et mieux organisées lors de l’utilisation de Format-Table -AutoSize
:

Examinez les propriétés et le numéro de colonne. Remarquez que ce sont les mêmes propriétés que vous avez vues dans l’interface graphique au début du tutoriel.

Filtrage des objets d’accès
Il arrive que vous souhaitiez être plus précis lors de la découverte des autorisations NTFS. Pour ce faire, vous pouvez filtrer un ACE spécifique ou trouver des résultats particuliers qui ont des autorisations NTFS héritées ou explicites dans une liste de contrôle d’accès à l’aide de PowerShell. Au lieu de faire défiler la fenêtre du terminal ligne par ligne, vous pouvez utiliser la commande Where-Object
pour effectuer un filtrage.
L’exemple de code ci-dessous filtre les objets n’héritant pas des autorisations NTFS. Cela est fait en utilisant Where-Object
avec l’opérande -Not
qui examine l’objet actuel dans le pipeline $_.
et la propriété de l’objet membre IsInherited
, qui indique si l’ACE est le résultat d’un héritage et n’est pas explicitement défini:
N’oubliez pas de rediriger les objets vers
Format-Table -AutoSize
sinon la sortie défilera à l’écran. Faites-en une nouvelle habitude ; vous me remercierez plus tard!
En utilisant le code ci-dessous, remplacez 'NOM_UTILISATEUR'
par un autre nom d’utilisateur pour voir des résultats spécifiques:
Voici un exemple de ce à quoi pourraient ressembler les résultats:

L’exemple ci-dessus montre tous les ACE pour lesquels la propriété IdentityReference
est l’utilisateur ou le groupe de sécurité auquel des autorisations sont attribuées.
Allez-y et pratiquez ce que vous avez appris jusqu’à présent sur
Get-Acl
. Examinez différents fichiers et dossiers sur votre système. Cela vous aidera à voir de nombreux descripteurs de sécurité différents pour différents contextes. Cela vous aidera également à développer une certaine mémoire musculaire.
Montons d’un cran et attribuons des autorisations NTFS.
Modification des autorisations NTFS avec Set-Acl
Maintenant que vous pouvez afficher les autorisations NTFS, il est temps d’attribuer et de modifier les autorisations NTFS en utilisant PowerShell. La commande Set-Acl
rend cela possible. Les sections suivantes démontreront comment utiliser cette commande en conjonction avec Get-Acl
pour copier, modifier l’héritage et supprimer les autorisations NTFS d’un fichier ou d’un dossier.
Copie des autorisations NTFS
Vous pouvez avoir un fichier ou un dossier contenant le niveau approprié d’autorisations NTFS dont vous avez besoin pour une nouvelle ACL. Vous pouvez gagner du temps en copiant les autorisations d’un fichier ou dossier à un autre.
La copie des ACL/ACE existants peut réduire les erreurs humaines lors de la configuration des autorisations NTFS, en supposant que le descripteur de sécurité à partir duquel vous copiez est correct et approprié pour la destination en premier lieu. Comme dit le proverbe, « Un grand pouvoir implique de grandes responsabilités. » Gardez cela à l’esprit.
Considérez la capture d’écran suivante. Vous regardez ici les ACL d’un fichier dans C:\Partage appelé Client_List.txt. L’ACL a le niveau correct de permissions NTFS que vous souhaitez :

Maintenant, considérez la capture d’écran suivante. Cette fois, vous regardez les ACL d’un autre fichier dans C:\Partage appelé Client_Projects.txt. Ce fichier n’a pas les permissions NTFS que vous désirez :

Vous devez copier les permissions NTFS de Client_List.txt vers Client_Projects.txt. Comment pouvez-vous faire cela ? Vous allez modifier les permissions en récupérant l’ACL de Client_List.txt puis en utilisant la commande Set-Acl
avec le paramètre -AclObject
. Lorsque vous exécutez le code ci-dessous, l’ensemble de l’ACL de Client_List.txt est copié vers Client_Projects.txt :
Comme vous pouvez le voir dans la capture d’écran numérotée ci-dessous, le fichier Client_Projects.txt a maintenant les mêmes descripteurs de sécurité que Client_list.txt.
- Obtenez un ACL existant à partir d’un fichier existant.
- Définissez l’objet ACL copié sur le fichier ou le dossier.
- Vérifiez que l’ACL a bien été copiée sur le fichier ou le dossier.

Vous constatez maintenant que l’ACL est identique pour le fichier Client_Projects.txt que pour le fichier Client_List.txt dans la colonne IdentityReference avec AccessControlType défini sur Allow. Vous utilisez la même technique pour attribuer des permissions NTFS aux dossiers également.
Ajout de permissions NTFS
Dans la dernière section, vous avez copié les autorisations NTFS existantes d’un objet fichier à un autre. Cette fois, vous allez créer des autorisations NTFS à partir de zéro. Cela vous permettra d’attribuer des autorisations NTFS qui seront assignées à un fichier ou un dossier.
Tout d’abord, commencez par attribuer certaines variables à utiliser pour créer un nouvel objet utilisé par Set-Acl
. Faire de cette manière rend un peu plus facile lorsqu’il est temps d’exécuter la commande. Le code ci-dessous construit les propriétés d’un ACE qui deviendra les autorisations NTFS assignées à un fichier ou un dossier:
Ensuite, attribuez une variable de plus qui obtiendra l’ACL initial pour le dossier Assets
. Ensuite, en utilisant le membre de type méthode AddAccessRule
, ajoutez une règle d’accès en utilisant la variable $ACE
:
Vous êtes maintenant prêt à ajouter le nouvel ACE à l’ACL de C:\Share\Assets
. Utilisez maintenant Set-Acl
pour appliquer ce nouvel ACE au répertoire approprié:
Ensuite, vérifiez que l’utilisateur que vous avez choisi a les autorisations pour afficher le répertoire nécessaire en utilisant le code ci-dessous:
Suppression des autorisations NTFS
Il viendra un moment où vous devrez supprimer les autorisations NTFS d’une ressource.
Pour supprimer les autorisations NTFS, commencez par obtenir la liste de contrôle d’accès (ACL) actuelle du fichier ou du dossier. Dans cet exemple, le fichier est Client_Projects.txt
:
Maintenant, filtrez l’ACE spécifique que vous souhaitez supprimer. Vous pouvez le faire en appelant les objets membres $Acl
et en envoyant les résultats à Where-Object
avec quelques opérandes:
Ensuite, utilisez la variable $Acl
qui contient les descripteurs de sécurité ACL actuels, appelez la méthode RemoveAccessRule
et passez l’objet ACE créé précédemment à l’aide de la cmdlet New-Object
à la méthode RemoveAccessRule()
. Cela supprimera l’entrée:
Il est important de se rappeler que vous avez modifié une ACL existante ici et que vous n’avez pas encore appliqué les modifications.
Maintenant, pour que ces modifications prennent effet, exécutez la cmdlet Set-Acl
, en fournissant les paramètres -Path
et -AclObject
avec les valeurs appropriées de "$dir\Client_Projects.txt"
et $Acl
. Une fois que vous avez saisi la commande ci-dessous, appuyez sur Entrée:
Gérez et rapportez sur Active Directory, Exchange et Microsoft 365 avec ManageEngine ADManager Plus. Téléchargez la version d’essai gratuite !
Résumé
Dans cet article, vous avez appris à gérer les autorisations NTFS avec PowerShell. Vous avez découvert les deux cmdlets, Get-Acl
et Set-Acl
, et ce qu’ils font avec les autorisations NTFS.
Vous avez également appris à utiliser des filtres pour cibler un ACE spécifique dans une ACL à utiliser dans les cmdlets ci-dessus. Avec un peu de pratique, vous gérerez facilement plus de demandes d’autorisations NTFS que jamais auparavant.