Autorisations de fichier pour WSL

Cette page explique en détail comment les autorisations de fichier Linux sont interprétées dans le sous-système Windows pour Linux, en particulier lors de l’accès à des ressources dans Windows, dans le système de fichiers NT. Cette documentation suppose d’avoir compris les bases de la structure des autorisations du système de fichiers Linux et de la commande umask.

Lors de l’accès à des fichiers Windows à partir de WSL, les autorisations de fichier sont calculées à partir des autorisations Windows ou lues à partir des métadonnées qui ont été ajoutées au fichier par WSL. Ces métadonnées ne sont pas activées par défaut.

Métadonnées WSL sur les fichiers Windows

Lorsque les métadonnées sont activées comme option de montage dans WSL, des attributs étendus sur les fichiers Windows NT peuvent être ajoutés et interprétés pour fournir des autorisations de système de fichiers Linux.

WSL peut ajouter quatre attributs étendus NTFS :

Nom d’attribut Description
$LXUID ID d’utilisateur propriétaire
$LXGID ID de groupe propriétaire
$LXMOD Mode fichier (octaux et type d’autorisation des systèmes de fichiers, p. ex. : 0777)
$LXDEV Appareil, s’il s’agit d’un fichier d’appareil

De plus, tout fichier qui n’est pas un fichier ou un répertoire standard (p. ex. : liens symboliques, FIFO, périphériques de traitement par blocs, sockets Unix et périphériques d’entrée-sortie de caractères) a également un point d’analyse NTFS. Il est ainsi beaucoup plus rapide de déterminer le type de fichier figurant dans un répertoire donné sans avoir à interroger ses attributs étendus.

Scénarios d’accès aux fichiers

Vous trouverez ci-dessous une description de la façon dont les autorisations sont déterminées lors de l’accès aux fichiers de différentes manières à l’aide du sous-système Windows pour Linux.

Accès aux fichiers dans le système de fichiers du lecteur Windows (DrvFS) à partir de Linux

Ces scénarios surviennent lorsque vous accédez à vos fichiers Windows à partir de WSL, probablement via /mnt/c.

Lecture des autorisations de fichier à partir d’un fichier Windows existant

Le résultat dépend du fait que le fichier a ou non déjà des métadonnées existantes.

Le fichier DrvFS n’a pas de métadonnées (par défaut)

Si le fichier n’a pas de métadonnées associées, nous traduisons les autorisations effectives de l’utilisateur Windows en bits de lecture/écriture/exécution et leur attribuons la même valeur pour l’utilisateur, le groupe et d’autres éléments. Par exemple, si votre compte d’utilisateur Windows dispose d’un accès en lecture et exécution, mais pas d’un accès en écriture au fichier, cela sera indiqué sous la forme r-x pour l’utilisateur, le groupe et autre. Si l’attribut « Lecture seule » du fichier est défini dans Windows, nous n’accordons pas l’accès en écriture dans Linux.

Le fichier a des métadonnées

Si le fichier a des métadonnées, nous utilisons simplement ces valeurs de métadonnées au lieu de traduire les autorisations effectives de l’utilisateur Windows.

Modification des autorisations de fichier d’un fichier Windows existant à l’aide de chmod

Le résultat dépend du fait que le fichier a ou non déjà des métadonnées existantes.

Le fichier chmod n’a pas de métadonnées (par défaut)

Chmod aura un seul effet. Si vous supprimez tous les attributs d’écriture d’un fichier, l’attribut « lecture seule » du fichier Windows est défini, car il s’agit du même comportement que celui du système CIFS (Common Internet File System) qui est le client SMB (Server Message Block) dans Linux.

Le fichier chmod a des métadonnées

Chmod change ou ajoute des métadonnées en fonction des métadonnées déjà existantes du fichier.

N’oubliez pas que vous ne pouvez pas vous accorder plus d’accès que ce que vous avez sur Windows, même si les métadonnées indiquent que vous le pouvez. Par exemple, vous pouvez définir les métadonnées pour qu’elles affichent que vous disposez d’autorisations en écriture à un fichier à l’aide de chmod 777, mais si vous tentez d’accéder à ce fichier, vous ne pourrez toujours pas écrire dedans. Cela est dû à l’interopérabilité, car les commandes de lecture et d’écriture des fichiers Windows sont routées via vos autorisations d’utilisateur Windows.

Création d’un fichier dans DriveFS

Le résultat dépend de l’activation ou non des métadonnées.

Les métadonnées ne sont pas activées (par défaut)

Les autorisations Windows du fichier nouvellement créé sont les mêmes que si vous avez créé le fichier dans Windows sans un descripteur de sécurité spécifique. Il hérite des autorisations du parent.

Les métadonnées sont activées

Les bits d’autorisation de fichier sont définis de façon à suivre le masque umask Linux, et le fichier est enregistré avec les métadonnées.

Quel utilisateur Linux et quel groupe Linux le fichier détient-il ?

Le résultat dépend du fait que le fichier a ou non déjà des métadonnées existantes.

Le fichier utilisateur n’a pas de métadonnées (par défaut)

Dans le scénario par défaut, lors du montage automatique de lecteurs Windows, nous spécifions que l’ID d’utilisateur (UID) de tous les fichiers est défini sur l’ID d’utilisateur (UID) de votre utilisateur WSL et que l’ID de groupe (GID) est défini sur l’ID de groupe principal de votre utilisateur WSL.

Le fichier utilisateur a des métadonnées

Les identificateurs UID et GID spécifiés dans les métadonnées sont appliqués en tant qu’utilisateur propriétaire et groupe propriétaire du fichier.

Accès aux fichiers Linux à partir de Windows à l’aide de \\wsl$

L’accès aux fichiers Linux via \\wsl$ utilise l’utilisateur par défaut de votre distribution WSL. Par conséquent, toute application Windows accédant à des fichiers Linux aura les mêmes autorisations que l’utilisateur par défaut.

Création d’un nouveau fichier

Le masque umask par défaut est appliqué lors de la création d’un nouveau fichier à l’intérieur d’une distribution WSL à partir de Windows. Le masque umask par défaut est 022. En d’autres termes, il autorise toutes les autorisations, à l’exception des autorisations en écriture sur les groupes et autres.

Accès aux fichiers dans le système de fichiers racine Linux à partir de Linux

Tous les fichiers créés, modifiés ou consultés dans le système de fichiers racine Linux suivent les conventions Linux standard, telles que l’application du masque umask à un fichier nouvellement créé.

Configuration des autorisations de fichier

Vous pouvez configurer vos autorisations de fichier à l’intérieur de vos lecteurs Windows à l’aide des options de montage figurant dans wsl.conf. Les options de montage vous permettent de définir des masques d’autorisations umask, dmask et fmask. Le masque umask est appliqué à tous les fichiers, le masque dmask est appliqué uniquement aux répertoires et le masque fmask est appliqué uniquement aux fichiers. Ces masques d’autorisations passent ensuite par une opération OR logique lorsqu’ils sont appliqués aux fichiers, p. ex. : Si vous avez une valeur umask de 023 et une valeur fmask de 022, le masque d’autorisations résultant pour les fichiers sera 023.

En savoir plus : Options de configuration par distribution avec wsl.conf.