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 »)
- changer le propriétaire du fichier
report.pdfpour l'utilisateurgrace, puis vérifier avecls -l report.pdfque la 3e colonne de la ligne affiche biengrace - changer, en une seule commande, le propriétaire et le groupe du fichier
presentation.pptxpour l'utilisateurbobet le groupemanagers, puis vérifier avecls -l presentation.pptxque la ligne contientbob managers - changer le propriétaire du dossier
projectet de tout son contenu pour l'utilisateurcarol, puis vérifier avecls -ld projectque la 3e colonne de la ligne affiche biencarol
📌 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 maximales | Octal |
|---|---|---|
| Fichier | rw-rw-rw- | 666 |
| Répertoire | rwxrwxrwx | 777 |
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 :
| Chiffre | Droits retirés |
|---|---|
0 | aucun |
2 | écriture (w) |
4 | lecture (r) |
5 | lecture et exécution (r-x) |
7 | tous 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étaire | Groupe | Autres | |
|---|---|---|---|
| Masque | 0 (rien) | 2 (retire w) | 7 (retire rwx) |
Fichier (base 666) | 6 = rw- | 4 = r-- | 0 = --- |
Répertoire (base 777) | 7 = rwx | 5 = r-x | 0 = --- |
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 :
umask | Fichiers | Répertoires | Usage |
|---|---|---|---|
022 | 644 (rw-r--r--) | 755 (rwxr-xr-x) | Valeur par défaut classique : tout le monde peut lire |
002 | 664 (rw-rw-r--) | 775 (rwxrwxr-x) | Travail en équipe : le groupe peut aussi écrire |
027 | 640 (rw-r-----) | 750 (rwxr-x---) | Les autres n'ont plus aucun accès |
077 | 600 (rw-------) | 700 (rwx------) | Seul le propriétaire accède à ses fichiers |
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
- 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
UMASKdu 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::---
- Quand un répertoire possède une ACL par défaut, elle remplace le
umaskpour les éléments créés dedans. ls -laffiche alors un+à la fin des permissions du répertoire (par exempledrwxr-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
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.
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
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.
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.
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.
>> 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
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.