Linux sans magie #10 — umask : pourquoi un nouveau fichier n’a pas toujours les droits que vous imaginiez

Comprendre umask sous Linux avec un lab simple : permissions de création, différences entre fichiers et répertoires, valeurs 022, 027 et 077, vérification et rollback.

Après plusieurs articles consacrés aux permissions, nous savons maintenant lire rwx, identifier propriétaire et groupe, utiliser chmod et diagnostiquer un Permission denied.

Mais une question reste ouverte : qui choisit les permissions d’un fichier ou d’un répertoire au moment où il est créé ?

Vous avez peut-être déjà lancé :

touch test.txt

puis obtenu avec ls -l quelque chose comme -rw-r--r--, alors que vous n’avez jamais demandé explicitement 644.

Ce comportement n’est pas magique. Une partie essentielle de l’explication tient dans une petite commande : umask.

Objectif

Dans ce lab, nous allons apprendre à afficher le umask courant, comprendre des valeurs classiques comme 022, 027 ou 077, observer leur effet sur de nouveaux fichiers et répertoires, puis restaurer proprement l’environnement de départ.

L’objectif n’est pas de mémoriser une formule. Il est de comprendre le mécanisme : une application demande certaines permissions lors de la création, puis le umask en masque une partie.

Aucun sudo n’est nécessaire.

Lab — observer avant de modifier

Placez-vous dans votre répertoire personnel puis créez un espace de travail dédié :

cd
mkdir linux-sans-magie-lab
cd linux-sans-magie-lab

Affichez votre masque courant :

umask

Vous pourriez voir par exemple :

0022

ou :

0002

La valeur exacte dépend de votre environnement. Ne la modifiez pas encore.

Sauvegardons-la pour pouvoir la restaurer à la fin du lab :

original_umask=$(umask)
printf '%s\n' "$original_umask"

La deuxième commande doit afficher la même valeur que umask.

Créer un premier fichier et un premier répertoire

Créons deux objets :

touch fichier1.txt
mkdir repertoire1

Observons leurs permissions :

ls -ld fichier1.txt repertoire1

Avec un umask courant de 022, vous pourriez obtenir quelque chose proche de :

-rw-r--r-- ... fichier1.txt
drwxr-xr-x ... repertoire1

Le fichier n’est pas exécutable, alors que le répertoire possède bien des droits x.

Pourquoi cette différence alors que le même umask est actif dans les deux cas ?

Ce que fait réellement umask

Le mot umask désigne le file mode creation mask, autrement dit le masque de création des permissions.

Lorsqu’un programme crée un objet, il demande un certain mode. Le système retire ensuite de ce mode les bits présents dans le masque. Le umask ne fixe donc pas directement une permission finale comme 644 ou 755.

Il agit plutôt comme une règle : parmi les permissions demandées, certaines ne doivent pas être accordées.

C’est une distinction importante, car elle explique pourquoi deux types d’objets créés sous le même umask peuvent finir avec des permissions différentes.

Comprendre 022

Reprenons un masque classique : 022.

Les trois derniers chiffres correspondent aux catégories que nous connaissons déjà : propriétaire, groupe et autres.

Catégorie Valeur du masque Ce qui est masqué
propriétaire 0 rien
groupe 2 écriture
autres 2 écriture

Dans le système octal des permissions, 4 correspond à lecture, 2 à écriture et 1 à exécution.

Avec 022, l’écriture est donc retirée pour le groupe et pour les autres lorsque le programme la demande.

Pourquoi un fichier donne souvent 644

Lorsqu’un fichier ordinaire est créé de manière classique, l’application demande généralement un mode qui autorise au maximum lecture et écriture, sans bit d’exécution : 0666, soit rw-rw-rw-.

Avec un masque 022, les deux droits d’écriture du groupe et des autres sont retirés. On obtient alors :

rw-r--r--

soit 0644.

C’est pourquoi un touch fichier.txt sous umask 022 produit souvent un fichier en 644.

Le mot important est souvent. Le programme qui crée le fichier peut demander un mode plus restrictif dès le départ. Le umask n’ajoute jamais un droit qu’une application n’a pas demandé.

Pourquoi un répertoire donne souvent 755

Pour un répertoire, les droits demandés sont généralement différents. Un répertoire nouvellement créé a besoin de permissions d’exécution pour pouvoir être traversé. Un appel classique à la création demande donc 0777, soit rwxrwxrwx.

Avec le même masque 022, l’écriture disparaît pour groupe et autres :

rwxr-xr-x

soit 0755.

Avec un même umask 022, nous pouvons donc observer typiquement :

Objet Mode demandé classique Résultat courant
fichier 0666 0644
répertoire 0777 0755

Ce n’est pas une incohérence. Le mode demandé initialement n’était simplement pas le même.

Pourquoi « 777 - umask » est une mauvaise règle générale

On rencontre parfois cette astuce mentale : 777 - 022 = 755.

Elle semble fonctionner pour notre répertoire. Mais si on l’applique mécaniquement à un fichier, elle ferait croire que le fichier devrait aussi finir en 755, donc devenir exécutable. Ce n’est pas le comportement classique de touch.

La bonne logique est donc : mode demandé par le programme → application du masque → permissions finales.

Pour un débutant, il n’est pas nécessaire de calculer chaque bit à la main. Retenez surtout que le umask retire des permissions parmi celles qui étaient demandées.

Modifier temporairement le masque

Essayons maintenant un masque plus restrictif :

umask 027
umask

Vous devriez obtenir une valeur équivalente à :

0027

Avec 027, l’écriture est masquée pour le groupe, et tous les droits classiques sont masqués pour les autres.

Créons de nouveaux objets :

touch fichier2.txt
mkdir repertoire2
ls -ld fichier2.txt repertoire2

Dans un environnement classique, vous devriez observer quelque chose proche de :

-rw-r----- ... fichier2.txt
drwxr-x--- ... repertoire2

soit 640 pour le fichier et 750 pour le répertoire.

Comparons avec les objets créés avant le changement :

ls -ld fichier1.txt fichier2.txt repertoire1 repertoire2

Vous constaterez que fichier1.txt et repertoire1 n’ont pas changé.

C’est essentiel : modifier le umask n’altère pas les objets existants. Il agit au moment de la création. Pour modifier des permissions déjà en place, on utilise notamment chmod.

umask et chmod ne font pas le même travail

La distinction peut maintenant se résumer simplement.

umask répond à la question : quelles permissions faut-il empêcher d’être accordées automatiquement à un nouvel objet ?

chmod répond à une autre question : quelles permissions voulons-nous appliquer à un objet qui existe déjà ?

Cette différence évite de confondre politique de création et correction après coup.

Afficher le masque symboliquement

Avec un shell compatible POSIX comme Bash, vous pouvez demander une représentation symbolique :

umask -S

Avec umask 027, l’affichage indiquera l’équivalent des droits conservés pour le propriétaire, le groupe et les autres.

Cette vue est pratique lorsque les valeurs octales vous paraissent encore abstraites.

Petit défi — prédire 077

Essayez maintenant de prévoir le résultat avant de lancer les commandes suivantes.

Nous définissons :

umask 077

Puis nous créons :

touch prive.txt
mkdir prive

077 masque tous les droits classiques pour le groupe et pour les autres.

Vérifiez :

ls -ld prive.txt prive

Vous devriez typiquement obtenir :

-rw------- ... prive.txt
drwx------ ... prive

soit 600 et 700.

Ce résultat est utile à comprendre, mais évitez d’en conclure qu’un umask 077 est automatiquement le bon choix partout. Sur un serveur collaboratif ou dans un environnement où plusieurs membres d’un groupe doivent partager des fichiers, un masque trop restrictif peut gêner le fonctionnement normal.

Une subtilité à connaître : ACL par défaut

Les permissions classiques et le umask ne sont pas toujours les seuls mécanismes en jeu.

Un répertoire peut posséder une ACL par défaut. Lorsqu’elle existe, elle peut participer à la détermination des permissions des nouveaux objets créés dans ce répertoire. Dans ce cas, raisonner uniquement à partir du umask classique peut être insuffisant.

Ce sujet mérite un article dédié. Pour l’instant, retenez simplement cette piste : si un résultat de création ne correspond pas à ce que votre umask laisse prévoir, des ACL par défaut peuvent expliquer la différence.

Bonnes pratiques

Commencez toujours par observer avant de modifier :

umask
umask -S

Si vous testez une valeur différente, faites-le dans un lab et dans le shell courant, puis créez de nouveaux objets pour comparer les résultats.

Évitez de changer définitivement votre umask dans des fichiers de configuration tant que vous n’avez pas identifié les besoins réels de votre environnement : poste personnel, serveur multi-utilisateurs, travail collaboratif, service applicatif ou politique de sécurité.

Sécurité

Le umask participe au principe du moindre privilège : mieux vaut éviter d’accorder automatiquement des droits inutiles à la création plutôt que devoir corriger systématiquement des objets trop permissifs après coup.

Mais « plus restrictif » ne signifie pas toujours « meilleur ». Une politique de permissions doit rester compatible avec l’usage attendu, notamment pour les groupes de travail et les applications qui partagent des fichiers.

Coûts

Aucun coût matériel ou logiciel n’est associé à ce lab.

Limites et points de vigilance

Le résultat final dépend du mode demandé par l’application, pas seulement du umask.

Le umask d’un shell est hérité par les processus lancés depuis ce shell, mais changer le umask d’un shell ne modifie pas rétroactivement les permissions d’objets existants.

Enfin, des ACL par défaut ou d’autres mécanismes de contrôle d’accès peuvent compléter ce modèle simple.

Nettoyage / rollback

Nous avons sauvegardé la valeur initiale dans original_umask.

Restaurons-la :

umask "$original_umask"
umask

La valeur affichée doit correspondre à celle observée au début du lab.

Revenez ensuite dans votre répertoire personnel et supprimez uniquement le répertoire de test :

cd
pwd
rm -r linux-sans-magie-lab

Ce qu’il faut retenir

umask n’est pas un autre nom de chmod.

chmod modifie les permissions d’un objet existant. umask intervient lors de la création de nouveaux objets en masquant certains bits du mode demandé par le programme.

La méthode à retenir est donc :

programme demande des permissions → umask masque certains droits → l’objet est créé → ls -l permet de vérifier.

À partir de là, 022, 027 ou 077 cessent d’être des nombres mystérieux. Ils deviennent une manière de répondre à une question simple : quels droits ne voulons-nous pas accorder automatiquement ?

Références officielles

Conclusion

Nous venons de compléter le premier grand bloc de la série consacré aux permissions.

Après avoir appris à lire rwx, à utiliser chmod et à diagnostiquer Permission denied, nous savons maintenant aussi expliquer pourquoi les permissions apparaissent dès la création d’un fichier ou d’un répertoire.

La prochaine étape logique de Linux sans magie sera de quitter progressivement les fichiers pour regarder ce qui tourne réellement sur la machine : les processus.