umask sous Linux : comment ça marche et comment le configurer ?
Sommaire
I. Présentation
Sous Linux, il existe un paramètre qui permet de gérer les permissions par défaut de tout fichier ou dossier créé sur le système : umask.
Dans ce tutoriel, nous allons apprendre ce qu’est l’umask sous Linux, quel est son intérêt pour une bonne gestion des permissions et comment le configurer pour améliorer la robustesse de votre système et la confidentialité de vos informations. Nous ferons aussi la démonstration concrète des risques qui découlent d’un umask par défaut ou lorsque ce dernier est mal configuré.
Cet article part du principe que vous connaissez les permissions Linux, si vous voulez un rappel sur ce sujet, consultez notre article :
- IT-Connect .fr - La gestion des permissions sous Linux
Pour rappel, les permissions Linux peuvent s’écrire de deux manières :
- La notation symbolique : comme "rwxr-xr--", pour laquelle "r" veut dire "lecture" (read), "w" veut dire "écriture" (write) et "x" veut dire "exécution" (execute) et chaque trio de lettre représente un ensemble de permissions pour l'utilisateur (owner), le groupe et les autres (others).
- La notation numérique : comme "754", pour laquelle chaque chiffre représente un ensemble de permissions pour l'utilisateur (owner), le groupe et les autres (others). Exemple : "7" = Lecture + Écriture + Exécution (4+2+1), "5" = Lecture + Exécution (4+1) et "4" = Lecture uniquement
Version originale de l'article : 26 janvier 2012.
II. À quoi sert l’umask ?
Vous êtes vous déjà posé la question de quelles sont les permissions par défaut des fichiers et dossiers que l’on crée sur un système et pourquoi ces permissions sont mises en place et pas d’autres ?
Voyons par la pratique quels sont ces droits par défaut sur un système Ubuntu :
Ici, je viens de créer un fichier et un dossier en tant qu’utilisateur non privilégié, puis j’ai regardé leurs permissions à l’aide de la commande "ls". Mon dossier possède les permissions : "rwxrwxr-x" et mon fichier "rw-rw-r--". Ils ont tous deux comme groupe propriétaire et propriétaire l’utilisateur qui les a créés : "mickael".
Voyons à présent ce qu’il se passe dans le cas où c’est l’utilisateur privilégié "root" qui crée un dossier et un fichier :
Les permissions par défaut sont légèrement différentes : "rwxr-xr-x" pour le dossier et "rw-r--r--" pour le fichier.
Par nature, un fichier standard n’est pas censé être exécutable (contrairement à un script ou un programme). C’est pourquoi la permission "maximale" d’un fichier à sa création est 666 (soit "rw-rw-rw", sans le "x" de l’exécution) et 777 pour un dossier. Il s’agit d’un détail qui va devenir important pour la suite.
Pourquoi en est-il ainsi ? Notre fichier pourrait par défait avoir les permissions "rw-rw-rw" ou au contraire aucune ("---------") et il faudrait que l’utilisateur paramètre lui-même les permissions à chaque nouveau fichier créé ? La réponse est : grâce à l’umask.
L’umask est un paramètre qui permet d’assigner des permissions par défaut aux fichiers créés par un utilisateur grâce à un système de masque qui ôte les permissions non souhaitées par défaut. Plutôt que le déduire via la création de fichier ou dossier comme nous venons de le faire, nous pouvons récupérer l’umask paramétré directement dans un terminal grâce à la commande "umask". Voici ce que cela donne pour l'utilisateur root, puis pour un utilisateur non privilégié :
Attardons-nous un peu sur ces résultats : pour root, le résultat est "0022" et pour l’utilisateur non privilégié "0002". Si l'on se rappelle bien quelle est la "traduction" numérique des permissions les plus fortes que l’on peut donner un fichier ("rw-rw-rw-") ou un dossier ("rwxrwxrwx") : il s’agit de 777 et 666, et justement :
Nous retrouvons les permissions par défaut des fichiers créés dans notre exemple pratique par root, puis par notre utilisateur ! Voilà ce qu’est l’umask, il permet de maitriser les permissions que nous allons ôter à tout nouveau fichier ou dossier.
III. Quels risques si l’umask est mal configuré ?
La gestion des permissions est un élément sensible d’un système, car elle a des implications en termes de sécurité, et notamment en termes de confidentialité. Ainsi, l’umask est considéré comme un paramètre de sécurité qu’il faut manier avec précaution.
Examinons maintenant ce qui peut se produire sur un système Linux multi-utilisateur lorsque l’umask est dans sa configuration par défaut.
Par "système multi-utilisateur", il faut comprendre un environnement dans lequel plusieurs utilisateurs peuvent se connecter, sans nécessairement se connaître ou se faire confiance. C’est typiquement le cas des serveurs mutualisés, où chaque utilisateur dispose d’une partie dédiée pour des services web ou FTP.
En tant qu’utilisateur root, avec un umask configuré à 0022, je crée un fichier "srv.config" à la racine de mon serveur contenant un mot de passe. Ce type de situation peut survenir facilement, que ce soit par négligence ou mauvaise manipulation. Comme prévu, le fichier créé possède les permissions 644 ("rw-r--r--"). Cela signifie que tous les utilisateurs du système (others, permissions spécifiées par les trois derniers caractères) peuvent lire son contenu. Voici un exemple de lecture du contenu du fichier avec l’utilisateur "john" :
Un autre exemple concerne un utilisateur non privilégié. Supposons que l’utilisateur mickael décide de temporairement déposer le contenu de sa base de données SQL dans le répertoire "/tmp", qui est accessible en lecture/écriture par tous :
Le fichier déposé reçoit les permissions 664 ("rw-rw-r--"), ce qui le rend lisible par tous les autres utilisateurs du système, comme john, qui peut alors accéder à des informations sensibles sans en avoir l’autorisation.
Sans faire la démonstration pratique pour les répertoires, il faut savoir que l’implication d’un umask à 022 pour les répertoires est qu’ils auront par défaut les permissions 755 ("rwxr-xr-x"). Cela signifie que tous les utilisateurs du système pourront non seulement lire leur contenu, mais également parcourir leur structure (accès en exécution). Cela peut représenter un risque important si ces répertoires contiennent des fichiers ou sous-dossiers sensibles, même si leur contenu est protégé par des permissions plus restrictives.
Ces exemples illustrent les conséquences directes d’un umask mal paramétré sur des systèmes Unix en configuration par défaut. Ce problème est particulièrement critique pour l’utilisateur root, dont les actions devraient rester strictement confidentielles.
IV. Comment définir et modifier l’umask par défaut ?
A. Que disent les bonnes pratiques de sécurité ?
Heureusement, il est possible de modifier la valeur de l’umask pour les utilisateurs et pour root. Différents guides de bonnes pratiques de sécurité connus contiennent des recommandations sur la meilleure valeur à lui assigner. Nous pouvons, par exemple, mentionner le guide de CIS (Center For Internet Security) ou celui de l’ANSSI (Agence National pour la Sécurité des Systèmes d’Informations) :
Dans ce guide, l’ANSSI recommande de positionner l’umask à 027, voir, 077 :
L’application de cette recommandation aura pour effet (pour les utilisateurs et root) de créer des fichiers avec les droits “rw-r—--” (027) ou “rw—----” (077) par défaut. Autrement dit, personne d’autres qu’eux-mêmes ne pourront les lires !
B. Configurer l'umask des utilisateurs
Nous allons voir à présent voir comment modifier l’umask des utilisateurs non privilégiés d’un système Linux. Pour changer l’umask d’un utilisateur spécifique (par exemple, "mickael"), il faut éditer son fichier de configuration de shell (souvent "~/.bashrc" ou "~/.profile") :
$ nano /home/mickael/.bashrc
# Ajoutez ou modifiez la ligne suivante
umask 027
Comme nous l’avons vu, un umask à 027 retire le droit d’écriture et d’exécution pour "others" et le droit d’écriture pour le groupe, ce qui est bien mieux en termes de confidentialité. Pour que le changement prenne effet, il est nécessaire de recharger une nouvelle session :
source /home/mickael/.bashrc
Il est important d’adapter cette manipulation en fonction de votre shell par défaut. Par exemple, si vous utilisez zsh, il faut faire cette manipulation avec le fichier "~/.zshrc".
Voici à quoi ressemble cette manipulation et son effet direct sur les nouveaux fichiers créés par l’utilisateur :
C. Configurer l’umask de root
La manipulation pour changer l’umask de l’utilisateur root est la même que pour les utilisateurs non privilégiés, il faut éditer son fichier de configuration ("/root/.bashrc" ou "/root/.profile") et ajouter ou remplacer la ligne suivante :
umask 027
Ensuite, démarrez un nouveau shell pour que vos modifications soient prises en compte et vérifiez votre umask :
source ~/.bashrc
D. Configurer l’umask par défaut de tout nouvel utilisateur
Nous allons à présent voir un dernier point important : celui de la modification de l’umask par défaut appliqué à tout nouvel utilisateur. En effet, nous avons vu comment modifier l’umask des utilisateurs existants, mais dans le cadre de la mise en place d’un nouveau système qui verra venir de futurs utilisateurs, il peut être intéressant de faire en sorte qu’ils aient directement la bonne valeur.
Pour définir l’umask par défaut pour tous les futurs utilisateurs, il est nécessaire de modifier les fichiers de configuration système qui seront utilisés lors de la création d’un compte. Selon la distribution et la configuration, les principaux fichiers à examiner sont :
- "/etc/login.defs" : Souvent utilisé pour définir des paramètres par défaut lors de l’ajout de nouveaux utilisateurs. Vous pouvez y trouver ou y ajouter une ligne comme celle-ci :
UMASK 027
- Fichiers du répertoire skel : "/etc/skel". Les contenus de ce répertoire (dont ".bashrc", ".profile", etc.) sont copiés dans le répertoire personnel de tout nouvel utilisateur. En ajoutant ou modifiant la ligne "umask 027" dans les scripts de configuration (".bashrc", ".profile", etc.) présents dans "/etc/skel", vous assurez que chaque nouvel utilisateur aura directement la bonne valeur d’umask.
- Fichiers globaux : "/etc/profile", "/etc/bashrc". Certains systèmes utilisent ces fichiers pour définir des paramètres globaux de session. Encore une fois, ajoutez ou modifiez la ligne suivante dans ces fichiers :
umask 027
La priorité et l’ordre de prise en compte de ces différents fichiers peuvent varier d’une distribution à l’autre. Après avoir configuré l’umask dans "/etc/login.defs" ou "/etc/skel", vérifiez qu’aucun autre script ne surcharge cette valeur, surtout dans "/etc/profile" ou "/etc/bashrc".
Le plus efficace reste, après avoir mis en place cette configuration, de créer un nouvel utilisateur et de vérifier son umask :
Avec ces modifications, tous les nouveaux utilisateurs disposeront automatiquement d’un umask plus restrictif.
Attention, à l’inverse, cette manipulation ne permettra de durcir l’umask que des futurs utilisateurs qui seront créés, l’umask des utilisateurs existants et de root restent ici inchangés (voir manipulations des chapitres IV. B et IV.C).
V. Conclusion
Dans ce tutoriel, nous avons vu ce qu’est l’umask sur un système Linux, quels sont les risques de son état par défaut ou d’une mauvaise configuration et, le plus important, comment durcir sa valeur par défaut pour améliorer la sécurité de son système Linux.
Au-delà de la bonne configuration des fichiers que nous venons de voir, il est important de faire une revue courante des umask réellement appliqués aux utilisateurs (en fonction des systèmes, voir des versions, les fichiers pris en compte peuvent changer). Également, il peut être intéressant (mais plus fastidieux) de faire une revue des permissions des fichiers sensibles de vos systèmes. C'est utile pour vérifier que les permissions de lecture pour le groupe “others” sont légitimes et attendues, puis d’ôter ces permissions si ce n’est pas le cas.
N’hésitez pas à donner votre avis ou retours d’expérience concernant l’umask dans les commentaires ou sur notre serveur Discord.
Merci pour ces explications mais je n’y arrive pas parce que les fichiers sont en lecture seule comme /etc/login.defs que je ne peux modifier sous gedit malgré des droits modifies à 777. dans le fichier /etc/pam.d/common-session, il n’y a aucune section umask.
Alors comment ?
Merci
Abdel nouvel utilisateur
Si la section umask n’existe pas, ce qui est fort probable. Tu peux la créer et elle sera prise en compte. Tu doit être en Root pour pouvoir modifier les fichiers comme /etc/login.dfs ou /etc/bashrc.
Bonjour Mickael,
J’ai une petite remarque sur l’exemple utilisé sur cet article concernant la valeur « umask 077 ».
En théorie, un utilisateur a 1 et 1 seule valeur UMASK sous prétexte que les valeurs de bases utilisés pour un fichier et répertoire sont différents, à savoir 0666 pour un fichier et 0777 pour un répertoire.
Ainsi, est-il possible d’avoir un valeur umask 077?
Bonjour Mickael,
Merci pour ce tutoriel très clair. J’ai une question concernant le chapitre IV Unmask de root. J’ai vérifié en root sur un serveur avec OS Centos et je ne trouve pas le fichier /root/.profile.
Sur un serveur avec OS Ubuntu le fichier /root/.profile contient :
if [ "$BASH" ]; then
if [ -f ~/.bashrc ]; then
. ~/.bashrc
fi
fi
J’ai cherché ensuite dans le fichier /root/.bashrc et ne trouve pas la ligne à « dé-commenter »
umask 077
Bonjour Miles,
Dans le fichier que tu as trouvé /root/.bashrc, si tu ne trouves pas la ligne umask 077. Il faut la rajouter à la main
A bientôt
Merci infiniment grand Monsieur!!!!!!!!!!!!!
Bonjour,
J’echangeais sur umask avec des collègues, puis nous avons lu votre blog.
Vous indiquez : donnera un droit final de « 744 » soit « rw-r-x-r-x ». »
ce ne serait pas plutôt rwx-r–r– ?
a bientôt
Bonjour,
Merci pour votre commentaire. Je corrige cela desuite.
Bonjour,
Peux tu m’éclaircir sur le présente d’un « + » a la din des droits d’un fichier ou d’un dossier avec la commande « ls -l ».
Je m’explique :
Lorsque que je fais un « ls -l » j’ai une retour de genre :
(d)rwxr-x—
mais voici ce que j’obtiens sur certain fichier ou dossier :
(d)rwxr-x—+
Par avance, merci pour la réponse.
Bonjour Mickael,
Bravo pour ce très bel article,
dans la partie « fonctionnement », 1er paragraphe, dernière ligne :
vous expliquez que « 755 » donne « rw-r–r–« , ne serait-ce pas plutôt :
« rwxr-xr-x » ?
Car r = 4 ; w = 2 ; x=1
A bientôt
grosse faute. Vous dites que 755 donne => rw-r—r–
alors que c’est rwxr-xr-x !
bsr!
je voudrais vous demander une commande de refuser ou d’attribuer quelques droits d’accès aux utilisateurs choisis(comme jean ou eric)
merci j’attends votre aide
bonjour !
Quelle est la valeur d’ Umask d’après l’affichage suivant svp:
-rwxr–r– 1 user group 0 Janv. 2 19:30 mon_fic
dr-xr–rw– 1 user group 5078 Janv. 2 19:30 mon_dos
.. La même commande adaptée pour voir les différents attributs d’un dossier en fonction des différentes valeurs de umask, à toute fin utile.
for i in {0..7}
do for j in {0..7}
do for k in {0..7}
do umask $i$j$k
mkdir dir_with_umask_$i$j$k
ls -ld dir_with_umask_$i$j$k
done
done
done | nl|awk ‘{print $1 » » $2 » » $10 }’
#
#Resultat:
#
1 drwxrwxrwx dir_with_umask_000
2 drwxrwxrw- dir_with_umask_001
3 drwxrwxr-x dir_with_umask_002
4 drwxrwxr– dir_with_umask_003
5 drwxrwx-wx dir_with_umask_004
6 drwxrwx-w- dir_with_umask_005
7 drwxrwx–x dir_with_umask_006
8 drwxrwx— dir_with_umask_007
9 drwxrw-rwx dir_with_umask_010
10 drwxrw-rw- dir_with_umask_011
[…]
507 d——r-x dir_with_umask_772
508 d——r– dir_with_umask_773
509 d——-wx dir_with_umask_774
510 d——-w- dir_with_umask_775
511 d——–x dir_with_umask_776
512 d——— dir_with_umask_777
Bonjour,
Merci pour ce tutoriel très intéressant et très bien fait 🙂
Bonne continuation.
👍