Question Introduction aux ACL

Plus d'informations
il y a 15 ans 4 mois #8599 par Jacques Barathon
De mes échanges avec de nombreux administrateurs système, c'est un des sujets les moins bien connus (dans Windows en général, et dans PowerShell en particulier).

Pourtant, avec les deux commandelettes de base disponibles dès la v1 de PowerShell, on peut déjà faire à peu près tout sur les ACL :

get-acl : récupère les ACL d'un objet
set-acl : applique des ACL à un objet

Commençons rapidement par le plus simple, récupérer les ACL d'un objet. On va utiliser get-acl pour, par exemple, récupérer les ACL du répertoire Windows :

[code:1]
PS> get-acl c:\windows

Directory: C:\

Path Owner Access
----

windows BUILTIN\Administrators CREATEUR PROPRIETAIRE Allow 2684354...
[/code:1]

On peut voir une propriété Owner qui indique le propriétaire actuel du répertoire, ici le groupe local Administrators.

On peut également voir une propriété Access dont le contenu n'est pas complètement affiché. Il s'agit en fait d'un tableau qui va nous intéresser car il contient toutes les entrées qui décrivent les permissions appliquées au répertoire.

Pour visualiser le contenu de ce tableau, la méthode la plus simple consiste à récupérer les ACL dans une variable et à invoquer la propriété Access de cette variable :

[code:1]
PS> $acl = get-acl c:\windows
PS> $acl.access

FileSystemRights : 268435456
AccessControlType : Allow
IdentityReference : CREATEUR PROPRIETAIRE
IsInherited : False
InheritanceFlags : ContainerInherit, ObjectInherit
PropagationFlags : InheritOnly

FileSystemRights : FullControl
AccessControlType : Allow
IdentityReference : AUTORITE NT\SYSTEM
IsInherited : False
InheritanceFlags : None
PropagationFlags : None
...
[/code:1]

Chaque élément retourné par la propriété Access est une ACE (Access Control Entry). Dans les grandes lignes, une ACE associe une identité à un niveau de permission.

Les propriétés de chaque ACE sont assez parlantes, et on voit bien leur intérêt dans le cadre d'une analyse des permissions. Les informations sur l'héritage permettent notamment de déterminer d'où vient une permission et/ou comment elle sera transmise aux objets enfants. On en verra plus dans un message à suivre sur la modification des ACL.

La liste des ACE peut être longue (sur mon poste, $acl.access retourne neuf permissions différentes, je n'ai affiché que les deux premières ci-dessus). On aura souvent intérêt à l'afficher au format table. Voici une façon de faire, sans passer par une variable intermédiaire :

[code:1]
PS C:\test> get-acl c:\windows | select -expand access | ft

FileSystemRights AccessControlType IdentityReference IsInherited InheritanceFlags PropagationFlags





268435456 Allow CREATEUR PROPRIE... False ...t, ObjectInherit InheritOnly
FullControl Allow AUTORITE NT\SYSTEM False None None
268435456 Allow AUTORITE NT\SYSTEM False ...t, ObjectInherit InheritOnly
FullControl Allow BUILTIN\Administ... False None None
268435456 Allow BUILTIN\Administ... False ...t, ObjectInherit InheritOnly
-1610612736 Allow BUILTIN\Users False ...t, ObjectInherit InheritOnly
...ute, Synchronize Allow BUILTIN\Users False None None
-536805376 Allow BUILTIN\Power Users False ...t, ObjectInherit InheritOnly
Modify, Synchronize Allow BUILTIN\Power Users False None None
[/code:1]

L'affichage ci-dessus masque certains bouts de propriétés (sans compter les problèmes de formatage liés à la copie dans ce forum), mais les infos principales sont visibles d'un seul coup d'oeil, ce qui permet d'aller plus vite à l'essentiel.

Vous aurez noté que certaines permissions (FileSystemRights) ont une valeur numérique, pas très causante. Il s'agit de permissions génériques, qui pour une raison mystérieuse ne font pas partie des types documentés dans l'énumération System.Security.AccessControl.FileSystemRights du Framework .NET. On pourra quand même retrouver ces valeurs sur les sites MSDN et Technet :

[code:1]
-1610612736 : GenericRead
-536805376 : GenericWriteDelete
268435456 : GenericWrite
[/code:1]

On pourra éventuellement les coder dans un tableau associatif pour les afficher proprement.

A suivre, très vite :), un billet sur la modification des ACL.

Message édité par: janel, à: 27/01/11 13:29

Message édité par: janel, à: 27/01/11 13:31<br><br>Message édité par: janel, à: 27/01/11 13:33

Connexion ou Créer un compte pour participer à la conversation.

Temps de génération de la page : 0.032 secondes
Propulsé par Kunena