Icacls est un utilitaire en ligne de commande Windows que les administrateurs IT peuvent utiliser pour modifier les listes de contrôle d’accès sur les fichiers et dossiers. L’une des tâches les plus courantes qu’un professionnel de l’IT ou un administrateur système effectue est la modification des autorisations sur un serveur de fichiers. Utiliser la commande icacls est un moyen très efficace de le faire et nous expliquerons comment utiliser cette commande dans ce guide.
Comment utiliser la commande icacls
En fonction de ma propre expérience personnelle, la modification des autorisations de fichiers sous Windows se fait généralement en utilisant l’Explorateur de fichiers. Pour de nombreux professionnels de l’IT, il est très intuitif d’ouvrir l’Explorateur de fichiers, de naviguer jusqu’à l’emplacement réseau posant problème pour certains utilisateurs, et de modifier leurs autorisations de « Lecture » à « Lecture/Modification » ou quelque chose de similaire. Agréable et rapide, assez facile à utiliser.
Cependant, il existe de nombreux scénarios englobant différents niveaux de portée où l’interface graphique n’est tout simplement pas aussi robuste que nous le souhaiterions. Si nous devons modifier les autorisations sur 22 millions de fichiers et dossiers, nous voulons le faire correctement!
Qu’est-ce qu’une liste de contrôle d’accès (ACL)?
Dans les systèmes Windows et les systèmes de fichiers NTFS, chaque objet fichier (fichier, dossier) possède une liste de contrôle d’accès. Cette liste est composée d’entrées de contrôle d’accès (ACE). La liste contient tous les utilisateurs et/ou autres objets de conteneurs de sécurité (groupes, etc.) qui ont un certain niveau de permission sur ledit objet fichier.
Qu’est-ce qu’une entrée de contrôle d’accès ? Un moment…
Qu’est-ce qu’une entrée de contrôle d’accès (ACE) ?
Une entrée de contrôle d’accès (ACE) est un enregistrement individuel ou une règle de permission qui contrôle les niveaux de permission individuels d’un utilisateur/groupe sur un objet fichier. Permettez-moi de lister les permissions de base disponibles au niveau élevé pour une ACL :
- Accès total (F)
- Accès de modification (M) (inclut la « suppression »)
- Accès en lecture et exécution (RX)
- Accès en lecture seule (R)
- Accès en écriture seule (W)
Il existe une dizaine ou plus de permissions « avancées », mais celles-ci dépassent le cadre de cet article.
Limitations de l’Explorateur de fichiers
Maintenant, si j’étais le gestionnaire de programme chez Microsoft pour l’Explorateur de fichiers (ce n’est pas un poste que j’envie particulièrement), voici les fonctionnalités que j’ajouterais. Et croyez-moi, je voulais qu’ils les ajoutent depuis des décennies!
Disons que vous gérez une migration de serveur de fichiers de Serveur A à Serveur B. Vous avez déjà copié les données vers la destination (Serveur B). Vous avez découvert que toutes les autorisations ne semblent pas correctes de manière récursive.
Donc, vous allez à la racine de votre arborescence, accédez à l’onglet Sécurité , et apportez quelques modifications à la liste de contrôle d’accès. Vous cochez la case pour modifier de manière récursive les 22 millions de fichiers et dossiers en dessous de la racine. Il commence à apporter des modifications, puis vous lance quelques fenêtres contextuelles de confirmation concernant les modifications des fichiers système, des fichiers en lecture seule, etc.
Maintenant, voici ma demande – Dans le mini « assistant » qu’ils pourraient créer, je veux spécifier de simplement supposer et cliquer sur « Oui » pour toutes les demandes de confirmation. Ensuite, le processus continuerait en cas d’erreurs, pour ensuite me fournir un résumé une fois terminé, avec un lien pour télécharger la sortie brute du fichier afin que je puisse retourner et vérifier les erreurs ou avertissements qui sont apparus.
Non, je ne sais pas si Microsoft offrira un jour une fonctionnalité aussi merveilleuse, robuste, à configurer et à oublier que celle-ci. Alors, en attendant, nous passons à la puissance de la ligne de commande et des scripts. C’est là que la commande icacls intégrée entre en jeu.
Comprendre la syntaxe d’icacls
La syntaxe de icacls est en fait assez simple et relativement facile à apprendre. Fondamentalement, vous utilisez la commande, puis ajoutez le fichier ou le dossier que vous souhaitez vérifier ou manipuler, et ensuite les autorisations que vous souhaitez ajouter/changer/supprimer.
Il y a aussi des commutateurs en ligne de commande, bien sûr. Nous verrons tout cela bientôt. Voici un exemple de ce qui se passe lorsque vous exécutez simplement la commande suivante puis un nom de fichier.
icacls Excellent.txt

Il produira une ACE par ligne, en utilisant l’exemple ci-dessus :
- Le compte intégré ‘SYSTEM’ a des autorisations d’accès Héritées (I) et Complètes (F)
- Le groupe Administrateurs intégrés a les mêmes autorisations
- Le groupe Utilisateurs intégrés a des autorisations d’accès Héritées (I), Lecture (R) et Exécution (X).
Pouvez-vous utiliser icacls dans PowerShell ?
Eh bien, comme vous pouvez le constater à partir de mon exemple ci-dessus et de la capture d’écran, vous pouvez certainement utiliser PowerShell pour exécuter la commande icacls. Vous devez simplement tenir compte de certaines variables d’environnement qui nécessitent d’être référencées un peu différemment.
Les cmdlets PowerShell équivalents pour afficher et gérer les ACL sur les objets fichiers sont Get-Acl et Set-Acl. Cela semble être une idée pour un futur article ! ?
Utilisation de icacls pour configurer les autorisations d’un fichier ou dossier
Parce que la commande icacls est intégrée dans Windows, vous êtes libre de commencer à utiliser la commande dès que vous comprenez les bases ici. Vous pouvez également simplement taper ‘icacls’ seul sur la ligne de commande pour afficher les informations d’aide disponibles. Vous pouvez également consulter une documentation similaire de Microsoft pour la commande icacls sur cette page.
Comment afficher la liste de contrôle d’accès actuelle pour un objet
D’accord, je pense que c’est suffisant d’exposition… commençons à utiliser la commande. Pour afficher la liste de contrôle d’accès actuelle pour un fichier ou un répertoire, il suffit d’utiliser les commandes suivantes:
icacls file or directory
icacls Download

Ici, ‘Download’ est un dossier avec des fichiers et des sous-dossiers. Comme vous le remarquerez, la sortie est un peu différente pour les objets de répertoire. Vous verrez (OI) et (CI) car ce sont des permissions d’héritage de niveau de conteneur spéciales qui s’appliquent uniquement aux répertoires.
Pour le groupe Administrateurs intégré, vous voyez qu’il a des droits complets et des permissions héritées. Le ‘(OI)’ montre que les autres objets de ce répertoire hériteront de cet ACE. Le ‘(CI)’ montre que d’autres dossiers dans ce répertoire hériteront à nouveau de cet ACE. (Ce répertoire n’a pas besoin, mais s’il le fallait, il hériterait automatiquement des mêmes ACE).
Accorder des permissions à un fichier ou un dossier
Maintenant, les choses commencent à chauffer. Définissons les autorisations et ajoutons-en à d’autres utilisateurs de notre domaine Active Directory avec l’interrupteur /grant. Avec la commande suivante, nous donnerons à Billy Reinders (breinders) des autorisations en lecture seule (R) pour le fichier Excellent.txt.
icacls Excellent.txt /grant reinders\breinders:R /t /c

La commande précédente a été exécutée avec succès ; j’ai ensuite validé mes modifications en vérifiant les autorisations – nous voyons maintenant que ‘REINDERS\breinders’ a des autorisations en lecture seule (R). Et, comme nous ne voyons pas de ‘I’ dans la liste, nous savons que ce n’est pas hérité, c’est explicite.
Pour rappel, l’interrupteur ‘/t’ est utilisé pour définir les autorisations de manière récursive sur l’ensemble de l’arborescence des dossiers. L’interrupteur ‘/c’ indique à la commande de continuer en cas d’erreurs rencontrées.
Suppression des autorisations d’un fichier ou d’un dossier
Au lieu d’utiliser l’interrupteur /grant pour donner/ajouter des autorisations, nous utilisons l’interrupteur /remove pour supprimer des autorisations d’un ACE. Allons-y et retirons l’accès plutôt bref de Billy au fichier Excellent.txt.
icacls Excellent.txt /remove:g reinders\breinders /t /c

Ici, nous utilisons l’interrupteur ‘/remove:g’ pour supprimer l’autorisation qui avait été accordée précédemment à Billy Reinders. J’ai exécuté la commande de nouveau pour vérifier et vous verrez que l’ACL pour Billy a disparu. Excellent! ?
Refus d’autorisations pour un fichier ou un dossier
En général, vous devriez éviter d’utiliser des autorisations de refus explicites en raison de la complexité qu’elles introduisent dans votre infrastructure d’autorisations globale. Pour la plupart des situations, vous pouvez compter sur un refus implicite, par défaut, pour gérer ces circonstances.
Si un utilisateur n’est pas répertorié dans une liste de contrôle d’accès (ACL) et que l’utilisateur n’est pas membre d’un ou plusieurs groupes répertoriés dans l’ACL, cet utilisateur est (correctement) supposé par Windows ne pas avoir de permissions sur cet objet. Cependant, l’exemple suivant illustre à quel point cela peut devenir compliqué – si un utilisateur est membre de deux groupes, et qu’un groupe se voit accorder l’accès tandis que l’autre groupe se voit refuser, cet utilisateur se verra refuser l’accès. Cela a du sens en soi, mais cela peut devenir très embrouillé en essayant de dépanner ce genre de problème.
Cependant, si vous souhaitez ajouter une autorisation de refus de manière explicite, vous pouvez utiliser l’interrupteur ‘/deny’ général pour y parvenir.
icacls Download /deny reinders\breinders:(OI)(CI)F /t /c

Vous pouvez voir la commande que j’ai exécutée; elle s’est terminée avec succès. J’ai ensuite vérifié l’onglet Sécurité du dossier Téléchargements – vous pouvez voir que Billy a des autorisations de refus sur l’objet et tous ses contenus.
Comment réinitialiser la liste de contrôle d’accès (ACL) pour un objet
I can’t tell you how many file server migrations or movements of large amounts of file projects I’ve been involved in where I just needed to start from scratch. This invaluable step includes resetting the ACLs on an object in case things get too far gone, or you succumb to a bad idea after being up all night. Maybe a malware attack crippled an entire HR directory that NEEDS to get resolved ASAP. Thankfully, you can use the ‘/reset’ flag to reset the permissions to the default.
icacls Download /reset /t /c
[image]
Juste après avoir de nouveau accordé à Billy les droits ‘Lecture/Écriture’ sur le dossier Téléchargements et ses contenus, j’ai exécuté la commande de réinitialisation. Comme vous pouvez le voir, son nom est à nouveau absent de la liste de contrôle d’accès (ACL) dans l’onglet Sécurité. Simple et facile.
Comment sauvegarder et restaurer des ACL
A wonderfully powerful feature included with icacls is the ability to backup and restore the ACL of an object to a file for safekeeping. Before you start a large script that changes or resets permissions on millions of files, you can first save the current state of those millions of files’ ACLs to a single file.
Si vous constatez une erreur de syntaxe dans votre script au milieu de l’exécution, vous pouvez l’interrompre et then restaurer l’état des ACL pour l’arbre entier en une seule exécution de la commande en utilisant le paramètre ‘/restore’ ! Faisons-en un essai !
icacls Download /save Download_ACL_Backup /t

Cela sauvera l’arbre des ACL de la carte de téléchargement dans un seul fichier nommé ‘Download_ACL_Backup’. Maintenant, je vous recommande vivement de NE PAS jouer avec ce fichier de texte. Oui, ça ressemble à du côté Linux ou quelque chose de similaire. ? En rigolant.
Voici l’état actuel de la carte de téléchargement.

Maintenant, supposons qu’un administrateur junior accorde à Billy Reinders un accès complet à l’emplacement. En outre, supposons qu’il contienne des données RH que Billy NE DEVRAIT PAS avoir accès à.
icacls Download /grant reinders\breinders:F /t /c

Apres la commande, je vérifie à nouveau et constate que Billy a le contrôle explicite complet dans cette carte. En un seul coup, je peux supposer que les permissions retourneront aux valeurs par défaut avec l’exécution de cette commande.
icacls Download /reset /t /c

Apres l’exécution de la commande de réinitialisation, vous pouvez voir que son nom est à nouveau retiré de l’ACL. Il n’a plus d’accès complet à la carte. Rappel – cela scannera l’entièreté de la hiérarchie de dossiers.
Astuce : Au cours de ce scénario, vous avez peut-être réalisé que Billy a un accès en lecture seule parce que le groupe Utilisateurs intégré (dans lequel Billy est membre) a les permissions par défaut Lecture et Exécution. Juste un petit commentaire.
Comment gérer les niveaux d’intégrité de Windows avec icacls
Il existe une fonctionnalité moins connue intégrée à Windows appelée contrôle d’accès obligatoire (MAC). Elle existe depuis un certain temps. Cependant, Microsoft a introduit le contrôle d’intégrité obligatoire (MIC) dans Windows Vista/Windows Server 2008.
Les autorisations sont définies par des règles fixes basées sur des politiques et en général ne peuvent pas être outrepassées par les utilisateurs. On l’appelle généralement contrôle d’intégrité Windows (WIC). Le niveau d’intégrité est utilisé pour déterminer le niveau de protection d’un objet dans Windows. Fondamentalement, vous voulez toujours vous assurer que vous avez les bonnes autorisations pour vos utilisateurs.
I won’t go into great detail here, but I can show you a few examples of how to use the icacls command with it. If we create a new folder, Test, in the Download directory, we can adjust its integrity level to ‘h’igh.
icacls Test /setintegritylevel h
En résumé, le niveau élevé est synonyme des autorisations nécessaires pour exécuter une tâche ou un processus en tant qu’administrateur (droits d’admin). Ainsi, même si Billy Reinders avait un contrôle total sur ce dossier, à moins qu’il ne lui ait été accordé d’une manière ou d’une autre des autorisations magiques d’administrateur et qu’il puisse exécuter l’Explorateur de fichiers en tant qu’admin (ce qu’il ne peut pas…), il ne pourrait PAS accéder à ce dossier et à son contenu.
En somme, c’est une autre couche de sécurité et de protection que vous pourriez utiliser pour protéger des données très sensibles.
Comment gérer l’héritage des autorisations avec icacls
Nous pouvons également utiliser la commande icacls pour afficher et modifier les autorisations d’héritage sur les fichiers et dossiers. Cela nous permet de définir des autorisations explicites sur un dossier tout en laissant les autres dossiers se mettre automatiquement aux ACL du conteneur parent.
Désactiver l’héritage sur les fichiers et dossiers
Nous pouvons désactiver l’héritage sur un fichier ou un dossier en utilisant le paramètre ‘/inheritance:d’. Dans mon exemple, nous avons un dossier Install dans le dossier Téléchargements. Vous pouvez voir ici que le dossier est configuré pour hériter de toutes ses autorisations de celui au-dessus.
icacls Download

Supprimons l’héritage sur le dossier Install.
icacls Install /inheritance:d /t /c

Voilà. Vous remarquerez que toutes les entrées ‘(I)’ ont disparu. Ce sont maintenant toutes des autorisations explicites. Et vous pouvez voir ci-dessous la vérification depuis l’interface utilisateur graphique que le bouton ‘Activer l’héritage’ est disponible car nous l’avons désactivé.
Conclusion
L’aspect le plus intriguant de icacls pour moi est la robustesse de pouvoir scripter avec cette commande des projets complexes. Et, encore une fois, ne pas avoir à se soucier de la fiabilité de l’Explorateur de fichiers en cas d’erreur, de plantage, des choses de ce genre.
I hope you learned more about using the command line to modify permissions. Please leave a comment or question below. Thank you!
Article connexe: