Gestion de l’umask sous Linux
I. Présentation
Dans ce tutoriel, nous allons apprendre la fonction, le fonctionnement et l'utilisation de l'umask sur les distributions Linux. L’umask est un outil de gestion des droits sur la création des fichiers et des répertoires qui permet de gérer une certaines sécurité et une restriction des droits par défaut. En définissant un umask, on retire automatiquement l’umask des droits défini sur la création des futurs fichiers ou répertoires.
II. Fonctionnement
Lors de la création d’un fichier, les droits par défaut qui s’y appliquent sont « rw-r--r--». On peut imaginer que par défaut, le fichier est créé par défaut avec les droits « 666 » ou « rw-rw-rw- » mais que l’umask qui s’y applique enlève automatiquement certains droits qui sont les droits d’écriture pour le groupe et les autres utilisateurs. Un répertoire quant à lui est créé par défaut avec les droits « 777 », il faut donc calculer l’umask en conséquence car un umask de « 022 » donnera un droit final de « 755 » soit « rw-r---r-- ».
L’umask qui est par défaut défini pour les fichiers comme pour les répertoires est en fait « 022 » ce qui fait 666-022 = 644. Plus simplement on enlève les droits d’écriture (w = 2) sur le groupe et les autres donc on passe de « rw-rw-rw- » à « rw-r--r--». Il est possible de modifier l’umask de façon temporaire, c’est-à-dire que nous allons mettre en place un umask avec une commande :
umask 077
Puis nous allons créer des fichiers et des dossiers sur lesquels ce nouvel umask s’appliquera par défaut. Sur la création d’un dossier, il aura les droits « rwx------» (777 - 077) c’est-à-dire que seul le propriétaire pourra agir dessus. Un fichier aura également les droits « rwx------». L’umask se réinitialiser à sa valeur par défaut (022) à la fermeture d’une session.
III. Umask des utilisateurs
On peut penser que par défaut le système ne met pas en place de bonnes restrictions car lors de la création d’un fichier ou d’un dossier, tout le monde a le droit de le lire. On voudrait par exemple que le groupe ait le droit de lecture du fichier ou du dossier et que les autres utilisateurs n’aient aucun droit dessus. L’umask à appliquer serait alors « 027 ». On peut paramétrer cet umask pour qu’il s’applique par défaut à tous les utilisateurs.
Par défaut, ce paramètre ce gère dans « /etc/profile » :
Mais nous voyons que le système nous dit que ce paramètre est maintenant géré par « pam_umask ». Nous allons alors aller dans le fichier « /etc/login.defs » pour aller modifier ce paramètre à la ligne 144:
On voit d’ailleurs dans ce fichier des recommandations systèmes où on nous dit que 022 n’est pas une politique très sécurisée et qu’il est possible de mettre en place une politique plus sécurisée comme « 027 » ou « 077 » :
On doit ensuite aller dire au fichier de configuration PAM « /etc/pam.d/common-session » d’utiliser la module « pam_umask.so » qui gérera l’umask par défaut en lui ajoutant cette ligne :
Après redémarrage d’une session avec un utilisateur, nous pourrons vérifier que l’umask définie c’est bien appliqué avec la commande suivante :
umask -p
Le « p » est pour « print » .
IV. Umask de root
Les soucis et que l’umask par défaut s’applique aussi à root qui fait partie des utilisateurs. Nous pourrions penser que ce que root créé, seul root devrait pouvoir le relire par sécurité. On devrait donc définir un umask« 077 » pour root. Pour déjouer l’umask par défaut, on doit aller modifier le fichier « .profile » de l’utilisateur. Ici, on doit donc modifier le fichier « /root/.profile » puis dé-commenter et modifier cette ligne :
Nous sommes maintenant sûrs que cet umask plus restrictif permet une sécurité plus approfondie de notre système.
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