CyberSDF

Reprenez la main sur votre numérique

Photographie éditoriale : petit meuble de classement en bois clair ouvert, trois compartiments nettement séparés étiquetés users, groups, others, seul le compartiment others fermé par une serrure en laiton patiné avec une clé posée à côté, papier crème froissé dans users, tranche de chemise vert profond étiquetée AUDIT dans others, lumière naturelle depuis la gauche, fond gris-pierre flou.

Permissions et utilisateurs Linux : comprendre avant de modifier

Pour comprendre vos permissions Linux avant de modifier quoi que ce soit, vérifiez votre identité avec id et whoami, lisez les droits d’un fichier factice avec ls -l et stat, puis utilisez chmod (octal ou symbolique) sur un fichier d’exercice. chown et chgrp montrent ici un cas négatif « Operation not permitted » sans sudo. Si le système répond Permission denied, lisez le message et revenez à ls -l.

Illustration : titre « Permissions et utilisateurs Linux : comprendre avant de modifier », terminal avec id, whoami et ls -l note.txt, badges cadenas, cadenas barré et panneau « Permission denied » — pour un article CyberSDF d'introduction aux droits Linux.
Illustration éditoriale CyberSDF — lecture de l’identité, des droits et des refus avant toute modification.

Qui suis-je pour le système ?

Avant de toucher à un droit, identifiez-vous pour le système : chaque fichier a un utilisateur propriétaire, un groupe propriétaire et le reste des autres utilisateurs.

Vérifiez votre identité avec id et whoami

mkdir -p /tmp/atelier-permissions
cd /tmp/atelier-permissions
id
whoami

id affiche uid=1000(votre-nom) puis gid=1000(votre-nom) et la liste des groupes secondaires. whoami ne renvoie que le nom de connexion, équivalent à id -un. Les deux commandes sont en lecture seule.

Comprenez la notion de propriétaire et de groupe

Chaque fichier a un utilisateur propriétaire et un groupe propriétaire. Les autres utilisateurs sont appelés « others ». La chaîne -rw-r--r-- se découpe ainsi : - (fichier régulier), rw- (propriétaire), r-- (groupe), r-- (autres). Le tiret - à la place d’une lettre signifie « droit absent ».

Tenez votre répertoire personnel hors du parcours

Tout se passe dans /tmp/atelier-permissions. Le répertoire ~ reste intact. Pour recommencer, supprimez ce dossier et créez-en un autre ; vos documents ne sont jamais visés.

Comment lire les droits d’un fichier ?

Lire les droits est une opération non destructive, ouverte à tout utilisateur.

Listez un fichier factice avec ls -l

printf 'bonjour atelier permissions\n' > note.txt
ls -l note.txt

La sortie affiche sept colonnes : mode, nombre de liens, propriétaire, groupe, taille en octets, date de modification, nom. La première colonne décrit les droits.

Décodez la chaîne de mode -rw-r--r--

La chaîne se lit en trois blocs de trois caractères. Pour -rw-r--r-- : rw- (propriétaire lit et écrit), r-- (groupe lit seulement), r-- (autres lisent seulement). Les lettres valent r (read), w (write), x (execute) ; - à la place d’une lettre signifie droit absent. Une chaîne -rw------- correspond à un fichier privé, -rwxr-xr-x à un exécutable accessible à tout le monde en lecture et exécution.

Affichez les métadonnées complètes avec stat

stat -c '%n type=%F taille=%s droits(octal)=%a proprio=%U groupe=%G' note.txt

La sortie ressemble à note.txt type=regular file taille=28 droits(octal)=600 proprio=hermes-gw groupe=hermes-gw. Le format -c permet de lire d’un coup la valeur numérique 600, qui correspond au mode privé rw-------.

Lisez un répertoire avec ls -ld

Pour un répertoire, le mode commence par d :

mkdir sous-dossier
ls -ld sous-dossier

La sortie affiche drwx------ 2 hermes-gw hermes-gw … sous-dossier. Le d confirme qu’il s’agit d’un répertoire ; rwx------ dit que seul le propriétaire peut lire, écrire et entrer dedans.

Distinguez fichier régulier et répertoire

La première colonne de ls -l répond : - pour un fichier régulier, d pour un répertoire, l pour un lien. stat confirme via %F.

Comment modifier les droits d’un fichier ?

chmod accepte deux notations : numérique (octal) et symbolique. La première se lit plus vite d’un coup d’œil.

Utilisez chmod en octal : 644, 600, 755

Chaque chiffre combine 4 (lecture r), 2 (écriture w) et 1 (exécution x).

chmod 644 note.txt
chmod 600 note.txt
chmod 755 note.txt
ls -l note.txt

644 ouvre la lecture au groupe et aux autres sans leur donner l’écriture. 600 referme tout : seul le propriétaire lit et écrit. 755 rend le fichier exécutable pour tout le monde, mode standard pour un script.

Utilisez chmod en symbolique pour un changement ciblé

chmod u+w note.txt
chmod g-w note.txt
chmod o=r note.txt

Les lettres sont u (user), g (group), o (others), a (all). Les opérateurs sont + (ajouter), - (retirer), = (définir). L’octal reste plus lisible pour réécrire un mode complet ; le symbolique sert pour un ajustement ciblé.

Vérifiez l’absence d’écrasement involontaire

Après chaque chmod, refaites ls -l note.txt pour relire la chaîne de mode. Ne réécrivez jamais en chmod 777 pour « que ça marche » : ouvrir tous les droits supprime la séparation entre propriétaire, groupe et autres.

Gardez chmod hors des fichiers système et personnels

chmod ne s’applique ici qu’à note.txt dans /tmp/atelier-permissions. Aucune commande ne vise /etc/, ~ ou un binaire système. Modifier un fichier système est un travail d’administration qui sort de cette page.

Comment changer le propriétaire et le groupe d’un fichier ?

chown change l’utilisateur propriétaire, chgrp change le groupe. Les deux exigent soit d’être root, soit d’être propriétaire du fichier et membre du groupe cible (cas particulier). Sur une machine personnelle standard, c’est sudo qui permet la plupart des changements. Le détail du mécanisme (capacité CAP_CHOWN requise pour chown hors cas restreint) est documenté dans man 1 chown et man 2 chown.

Tentez chown et observez le cas négatif « Operation not permitted »

En utilisateur ordinaire, la cession à un autre utilisateur est refusée :

chown nobody note.txt
echo $?

La sortie affiche chown: changing ownership of 'note.txt': Operation not permitted puis le code retour 1. Ce refus est attendu : le noyau refuse l’opération, pas la commande. Relancez ls -l note.txt pour vérifier que rien n’a changé.

Utilisez chgrp vers un groupe dont vous êtes membre

chgrp $(id -gn) note.txt
ls -l note.txt

id -gn renvoie votre groupe principal, déjà propriétaire du fichier par défaut. La commande réussit en silence, code retour 0. Si vous tentez chgrp root note.txt sans privilège, vous obtenez « Operation not permitted » et le code retour 1.

Comprenez la différence entre chown et chgrp

chown modifie l’utilisateur propriétaire, et peut aussi modifier le groupe en une seule commande avec chown utilisateur:groupe fichier. chgrp ne modifie que le groupe. Règle simple : chown touche à l’identité du fichier, chgrp ne touche qu’à son équipe.

Gardez chown et chgrp hors des chemins système

Aucune commande de cette page ne vise /etc/passwd, /etc/group, /var/ ou un binaire système. Modifier l’appartenance d’un fichier de configuration est une opération d’administration qui sort du parcours débutant.

Que veut dire « Permission denied » ?

« Permission denied » est le message que GNU coreutils affiche quand une opération est refusée par le noyau. Le reconnaître sans paniquer fait partie de la lecture des droits.

Provoquez un cas négatif sur un fichier en mode 000

chmod 000 note.txt
cat note.txt
echo $?
chmod 600 note.txt

cat affiche cat: note.txt: Permission denied puis le code retour 1. Le chmod 600 qui suit rétablit le mode privé. Le fichier n’est pas supprimé : seul l’accès a été coupé.

Lisez le message et le code de retour

Le message indique l’opération refusée et le nom du fichier visé. Le code de retour, accessible avec echo $? juste après la commande qui échoue, vaut 1 pour un échec ; 0 pour un succès silencieux comme cd. Ce chiffre distingue une réussite sans affichage d’une vraie erreur.

Revenez à ls -l et stat pour corriger la cause

Avant de relancer une commande qui a échoué, refaites ls -l note.txt et stat note.txt. Vérifiez le mode, le propriétaire, le groupe et le chemin. Si le mode -rw------- correspond bien au propriétaire, un chmod adapté résout la situation. Si le propriétaire n’est pas vous, voyez avec la personne concernée plutôt que de tenter un sudo non documenté.

Reconnaissez le cas « Operation not permitted »

Le message « Operation not permitted » est distinct de « Permission denied ». Il signale un refus de changement d’identité (chown, chgrp), pas un refus de lecture. Sa présence doit alerter sans pousser à un sudo aveugle.

Comment le mode par défaut est-il choisi à la création ?

Le mode d’un fichier créé dépend du masque umask, qui restreint les droits par défaut.

Affichez votre umask courant

umask

La sortie est une valeur octale, par exemple 0077 ou 0022. umask 0077 retire tout droit au groupe et aux autres, donnant des fichiers privés. umask 0022 retire l’écriture au groupe et aux autres, donnant des fichiers lisibles par tous.

Comparez l’effet de umask 0077 et umask 0022

Pour voir l’effet sans modifier durablement votre session, isolez chaque test dans un sous-shell :

(umask 0077; printf 'priv\n' > priv.txt; ls -l priv.txt)
(umask 0022; printf 'std\n' > std.txt; ls -l std.txt)

Le premier fichier apparaît en -rw------- (privé), le second en -rw-r--r-- (lisible par tous). Chaque sous-shell hérite de votre umask initial puis applique le sien propre, sans affecter la suite.

Ne faites pas de umask permanent dans le parcours

Aucun umask 0000 ni chmod 777 n’est demandé. umask est un réglage de session : si vous voulez le rendre durable, c’est dans un fichier de configuration de votre shell (.bashrc, .profile), pas dans une commande lancée à la volée.

Quand un sudo est-il légitime ?

sudo exécute une commande avec les privilèges du compte administrateur. Ce n’est pas un automatisme pour « que ça marche ».

Distinguez commande utilisateur et commande administrateur

Par défaut, un utilisateur ordinaire peut lire et modifier ses propres fichiers. Installer un paquet, modifier un fichier de configuration système, redémarrer un service : ces opérations exigent sudo. Aucune commande de cette page ne le demande.

Observez le refus d’un sudo non documenté

sudo -n whoami
echo $?

Sur un conteneur ou une session verrouillée, la commande affiche un message de refus et le code retour 1. Le refus prend la forme « no new privileges » dans un conteneur, ou « a password is required » sur une machine standard si vous n’êtes pas dans sudo ou wheel. Ce refus est une protection.

Refusez le réflexe chmod 777 pour « que ça marche »

Un chmod 777 ouvre un fichier en lecture, écriture et exécution à tout utilisateur du système. Il est risqué sur des fichiers personnels et critique sur les fichiers système. Revenir à ls -l et corriger le besoin (ajouter le bit x au propriétaire) reste toujours préférable.

Gardez sudo su - et sudo bash hors du parcours

Aucune élévation en shell interactif n’est demandée ici. Tout le travail se fait en utilisateur ordinaire, dans un répertoire temporaire.

Que faut-il observer sans utiliser : setuid, setgid, sticky ?

Trois bits spéciaux modifient la signification des permissions. Cette page les mentionne pour que vous les reconnaissiez dans ls -l et stat, sans vous demander de les activer.

Lisez un bit setuid via stat sans l’activer

cp /usr/bin/sleep dummy-sleep
stat -c '%n droits=%a uid-base=%u gid-base=%g' dummy-sleep
rm dummy-sleep

%a donne le mode en octal (par exemple 700 ou 4755) et les codes %u et %g donnent l’UID-base et le GID-base numériques du propriétaire et du groupe.

Les bits spéciaux setuid, setgid et sticky se lisent, eux, dans la première position du mode octal. Un 4 en tête (comme 4755 sur /usr/bin/su) signale setuid ; un 2 en tête signale setgid ; un 1 en tête signale sticky. Sur un fichier copié en utilisateur ordinaire, le bit setuid d’origine n’est pas hérité.

Un bit setuid inattendu sur un fichier personnel est un signal à vérifier : le programme s’exécutera avec les droits de son propriétaire quand un autre utilisateur le lance.

Lisez un répertoire et son bit setgid

Sur un répertoire, setgid force l’héritage du groupe pour les nouveaux fichiers créés dedans (le groupe du répertoire est appliqué aux fichiers et sous-répertoires créés à l’intérieur, au lieu du groupe principal de l’utilisateur — comportement décrit dans man 1 chmod et man 2 chmod) :

mkdir sous-dossier
stat -c '%n droits=%a gid-base=%g' sous-dossier
rmdir sous-dossier

Le mode octal droits=%a est l’endroit où se lit la présence du bit setgid sur un répertoire (un 2 en tête, comme 2775, indique setgid posé). La valeur %g est le GID-base numérique du groupe propriétaire, pas le bit lui-même. Vous n’avez rien activé : stat lit, mkdir crée avec les valeurs par défaut de votre session.

Mentionnez le sticky bit sans parcours imposé

Sur Debian, Ubuntu et Fedora par défaut, /tmp est sticky (chmod +t) : un utilisateur ne peut supprimer que ses propres fichiers dans /tmp, même si le mode du répertoire autorise l’écriture pour tout le monde. Une configuration sysadmin (par exemple via tmpfiles.d ou un mount séparé) peut modifier ce comportement — ce n’est pas garanti universel. Aucun chmod +t n’est demandé ici. Si vous rencontrez cette notion, contentez-vous de la reconnaître.

Quelles opérations faut-il laisser de côté quand on débute ?

Quatre familles d’opérations méritent un parcours séparé et ne sont pas illustrées ici.

Pourquoi chmod 777, >, | et sudo su - restent hors du parcours nominal

chmod 777 ouvre tous les droits à tout le monde. La redirection > écrase un fichier existant si la cible existe. Le pipe | relie deux commandes. sudo su - ouvre un shell administrateur complet. Chacune mérite son propre repère avant d’être pratiquée sur des données qui comptent.

Pourquoi find -exec chmod {} + reste hors du parcours

find -exec chmod appliqué à une arborescence réelle modifie les droits de chemins personnels ou système, parfois très loin de la cible prévue. C’est une commande à manipuler dans un contexte séparé, avec des sources distinctes et un environnement de test isolé.

Pourquoi la modification de /etc/passwd et /etc/group reste hors du parcours

Ces fichiers structurent les utilisateurs et les groupes du système. Les modifier exige sudo et un protocole précis. Cette page n’aborde pas cette édition et renvoie vers la documentation d’administration Debian plutôt que d’improviser.

Où aller ensuite pour un parcours plus large ?

Pour un tour d’horizon plus large du terminal, partez de la section Linux et terminal de CyberSDF. Pour un parcours de survie plus structuré, le guide de survie en ligne de commande couvre l’essentiel d’un terminal GNU. Pour reprendre les premières commandes avant ce parcours, Commandes Linux de base : se repérer, créer et copier sans risque est la page qui prépare le terrain.

Questions fréquentes avant de continuer

Quelle différence entre chown et chgrp ?

chown modifie l’utilisateur propriétaire (et éventuellement le groupe avec utilisateur:groupe). chgrp modifie uniquement le groupe. Les deux renvoient « Operation not permitted » sur les fichiers qui ne vous appartiennent pas.

Pourquoi chmod 777 est-il risqué ?

Il ouvre un fichier en lecture, écriture et exécution à tout utilisateur, supprimant la séparation entre propriétaire, groupe et autres. Sur un fichier personnel, il expose vos données ; sur un fichier système, il peut compromettre la machine.

Comment savoir si un bit setuid est activé ?

ls -l l’affiche dans la chaîne de mode : -rwsr-xr-x au lieu de -rwxr-xr-x. stat avec %a donne la valeur numérique. Un bit setuid inattendu sur un fichier personnel est un signal à vérifier.

Que faire si sudo me demande un mot de passe que je n’ai pas ?

Un utilisateur ordinaire n’est pas dans le groupe sudo ou wheel par défaut. Cette page renvoie vers la documentation d’administration Debian plutôt que d’improviser un contournement.

Comment savoir si je peux quitter l’exercice ?

Vous pouvez fermer le terminal à tout moment. Les fichiers vivent dans /tmp/atelier-permissions, qui se vide au redémarrage. Pour nettoyer vous-même, supprimez le dossier d’exercice avec rmdir après un ls final pour confirmer qu’il est vide.

Quelle différence entre umask et chmod ?

umask restreint les droits par défaut à la création. chmod modifie les droits d’un fichier existant. Les deux utilisent la notation octal mais agissent à des moments différents.