Aller au contenu principal

umask

Comment définir les ACL par défaut pour appliquer le principe Cyber du moindre privilège ?

Nous allons voir maintenant, comment utiliser umask pour définir les permissions qui seront appliquées aux nouveaux fichiers/répertoires d'un répertoire sous Linux.

Petite vérification​

Avant de commencer, vérifiez si vous savez... (dans votre répertoire utilisateur, par exemple /home/sio/, avec les fichiers et utilisateurs créés lors de la séance « S'entrainer à utiliser chown »)

  1. changer le propriétaire du fichier report.pdf pour l'utilisateur grace, puis vérifier avec ls -l report.pdf que la 3e colonne de la ligne affiche bien grace
  2. changer, en une seule commande, le propriétaire et le groupe du fichier presentation.pptx pour l'utilisateur bob et le groupe managers, puis vérifier avec ls -l presentation.pptx que la ligne contient bob managers
  3. changer le propriétaire du dossier project et de tout son contenu pour l'utilisateur carol, puis vérifier avec ls -ld project que la 3e colonne de la ligne affiche bien carol
📌 Réponse attendue

Notions théoriques​

Le problème : quelles permissions pour un nouveau fichier ?​

Lorsque vous créez un fichier avec touch ou un répertoire avec mkdir, vous n'indiquez jamais ses permissions. Pourtant, ls -l en affiche toujours.

D'où viennent-elles ?

Linux part de permissions maximales puis en retire certaines grâce à un masque, appelé umask (user file-creation mask) :

Type crééPermissions maximalesOctal
Fichierrw-rw-rw-666
Répertoirerwxrwxrwx777
info

Un fichier n'est jamais créé avec le droit d'exécution x, même avec un masque 000.

Il faut ensuite l'ajouter volontairement avec chmod.

Lire le masque courant​

La commande umask, sans argument, affiche le masque de votre session :

umask

Résultat habituel sous Debian :

0022
  • le premier chiffre concerne les bits spéciaux (il vaut presque toujours 0) ;
  • les 3 chiffres suivants concernent, dans l'ordre, le propriétaire, le groupe et les autres utilisateurs.

Chaque chiffre est écrit en octal (comme pour chmod) et indique les droits à retirer :

ChiffreDroits retirés
0aucun
2écriture (w)
4lecture (r)
5lecture et exécution (r-x)
7tous les droits (rwx)

L'option -S affiche le même masque en notation symbolique, c'est-à-dire les droits conservés :

umask -S
u=rwx,g=rx,o=rx

Calculer les permissions obtenues​

Le masque retire des droits : il n'en ajoute jamais.

Pour chaque catégorie (propriétaire, groupe, autres), on retire les droits du masque aux droits maximaux.

Exemple avec umask 027

PropriétaireGroupeAutres
Masque0 (rien)2 (retire w)7 (retire rwx)
Fichier (base 666)6 = rw-4 = r--0 = ---
Répertoire (base 777)7 = rwx5 = r-x0 = ---

Un nouveau fichier est donc créé en 640 (rw-r-----) et un nouveau répertoire en 750 (rwxr-x---).

Voici les masques les plus courants :

umaskFichiersRépertoiresUsage
022644 (rw-r--r--)755 (rwxr-xr-x)Valeur par défaut classique : tout le monde peut lire
002664 (rw-rw-r--)775 (rwxrwxr-x)Travail en équipe : le groupe peut aussi écrire
027640 (rw-r-----)750 (rwxr-x---)Les autres n'ont plus aucun accès
077600 (rw-------)700 (rwx------)Seul le propriétaire accède à ses fichiers
Lien avec le principe du moindre privilège

Le principe du moindre privilège consiste à ne donner que les droits strictement nécessaires.

Avec un masque 022, n'importe quel utilisateur du serveur peut lire vos nouveaux fichiers. Un masque 027 ou 077 est souvent plus adapté pour des documents sensibles (sauvegardes, fichiers de configuration, clés).

Modifier le masque​

Pour changer le masque, il suffit de le passer en argument :

umask 027
attention
  • Le masque ne s'applique qu'aux fichiers et répertoires créés après la commande. Les fichiers déjà existants ne changent pas (il faut utiliser chmod).
  • La modification n'est valable que pour la session (le terminal) en cours. Elle disparaît à la fermeture.

Pour rendre le masque permanent :

  • pour un utilisateur : ajouter la ligne umask 027 à la fin de son fichier ~/.bashrc (ou ~/.profile) ;
  • pour tout le système : modifier la directive UMASK du fichier /etc/login.defs.

Et pour un répertoire en particulier ? Les ACL par défaut​

Le umask est lié à votre session : il s'applique à tout ce que vous créez, quel que soit le répertoire.

Pour définir des permissions propres à un répertoire, Linux propose les ACL par défaut (default ACL, vues dans la séance sur les permissions). Elles sont héritées par chaque nouveau fichier ou sous-répertoire créé dans ce répertoire.

Le paquet acl fournit les commandes setfacl (modifier) et getfacl (afficher) :

sudo apt install acl

La syntaxe est la suivante :

setfacl -d -m u::rwx,g::r-x,o::--- projet
  • -d (default) : l'ACL définie est celle par défaut (héritée par les nouveaux éléments) ;
  • -m (modify) : modifier l'ACL ;
  • u::rwx,g::r-x,o::--- : droits maximaux du propriétaire, du groupe et des autres pour les nouveaux éléments.

Pour vérifier :

getfacl projet

Les lignes qui commencent par default: correspondent aux ACL par défaut :

default:user::rwx
default:group::r-x
default:other::---
remarque
  • Quand un répertoire possède une ACL par défaut, elle remplace le umask pour les éléments créés dedans.
  • ls -l affiche alors un + à la fin des permissions du répertoire (par exemple drwxr-xr-x+).

Exemple pratique​

Comparons les permissions obtenues avec le masque habituel 022, puis avec un masque 077 (principe du moindre privilège).

Dans un terminal, depuis votre répertoire utilisateur :

# 1. Afficher le masque actuel de la session
umask

# 2. Créer un dossier de travail et s'y placer
mkdir /home/sio/test_umask
cd /home/sio/test_umask

# 3. Créer un fichier et un répertoire avec le masque actuel
touch fichier_defaut.txt
mkdir dossier_defaut

# 4. Restreindre le masque : seul le propriétaire gardera des droits
umask 077

# 5. Créer un fichier et un répertoire avec le nouveau masque
touch fichier_prive.txt
mkdir dossier_prive

# 6. Comparer les permissions obtenues
ls -l

Avec un masque initial 022, le résultat de ls -l ressemble à :

drwxr-xr-x 2 sio sio 4096 oct. 13 10:12 dossier_defaut
drwx------ 2 sio sio 4096 oct. 13 10:12 dossier_prive
-rw-r--r-- 1 sio sio 0 oct. 13 10:12 fichier_defaut.txt
-rw------- 1 sio sio 0 oct. 13 10:12 fichier_prive.txt
info

Les éléments créés avant umask 077 conservent leurs permissions (644 et 755). Les éléments créés après sont en 600 et 700.

astuce

Fermez le terminal et rouvrez-en un : umask affiche de nouveau 0022. Le masque modifié n'était valable que pour la session précédente.

Test de mémorisation/compréhension​


Que fait la commande umask lorsqu'elle est lancée sans argument ?


Avec un umask de 022, quelles permissions reçoit un nouveau fichier ?


Quel umask donne les permissions 640 aux nouveaux fichiers et 750 aux nouveaux répertoires ?


Pourquoi un nouveau fichier n'est-il jamais créé avec le droit d'exécution, même avec umask 000 ?


Comment rendre un umask permanent pour votre utilisateur ?


Quelle commande définit des permissions par défaut pour les nouveaux fichiers créés dans un répertoire précis ?


Vous tapez umask 077 dans un terminal. Que devient le fichier notes.txt créé la veille ?


TP pour réfléchir et résoudre des problèmes​

Contexte : vous administrez un serveur Debian. Vous devez faire en sorte que les documents créés par votre compte ne soient plus lisibles par les autres utilisateurs (principe du moindre privilège), puis préparer un répertoire projet dont les nouveaux éléments suivent une règle précise.

Objectif : appliquer, rendre permanent et contrôler un masque umask, puis définir une ACL par défaut sur un répertoire.

Étape 1 — Lire le masque en notation symbolique​

Avant de modifier quoi que ce soit, relevez le masque actuel de votre session, avec les droits conservés pour le propriétaire, le groupe et les autres.


Bonne pratique - Mesurer avant de modifier

Relever l'état initial permet de savoir ce qui change, et de revenir en arrière si besoin. C'est un réflexe à avoir avant toute modification de configuration de sécurité.

Étape 2 — Appliquer le moindre privilège à la session​

Définissez un masque tel que les nouveaux fichiers soient créés en 600 et les nouveaux répertoires en 700.


Bonne pratique - Partir de la valeur la plus restrictive

Il est plus sûr de retirer les droits par défaut et d'en ajouter au cas par cas, plutôt que de découvrir plus tard qu'un fichier sensible était lisible par tous.

Étape 3 — Rendre le masque permanent​

Le masque saisi à l'étape 2 disparaîtra à la fermeture du terminal. Ajoutez la ligne umask 077 à la fin de votre fichier ~/.bashrc, sans ouvrir d'éditeur.


Bonne pratique - Ne jamais écraser avec un seul chevron

>> ajoute à la fin du fichier, alors que > remplace tout son contenu. Se tromper de redirection sur ~/.bashrc efface toute la configuration de votre terminal.

Étape 4 — Définir une ACL par défaut sur un répertoire​

Créez le répertoire projet, puis définissez son ACL par défaut pour que les nouveaux éléments créés dedans accordent : rwx au propriétaire, r-x au groupe et aucun droit aux autres.

mkdir projet

Bonne pratique - Régler le droit au bon endroit

Le umask protège ce que vous créez, quel que soit l'endroit. L'ACL par défaut protège ce qui est créé dans un répertoire, quel que soit l'utilisateur. Dans un dossier partagé, c'est donc l'ACL par défaut qui garantit des permissions cohérentes pour tous.

📌 Une solution