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.