Cours Linux / Lire et modifier les permissions avec chmod et comprendre sudo
Les permissions Linux accordent la lecture r, l’écriture w et l’exécution ou la traversée x au propriétaire, au groupe et aux autres utilisateurs. chmod modifie ces bits ; sudo permet seulement les commandes et identités autorisées par la politique du système. Pour comprendre un refus d’accès, vérifiez d’abord l’identité, les propriétaires et le chemin, puis choisissez la modification nécessaire au lieu d’ouvrir tous les droits.
Les exercices de mode utilisent Bash et un fichier neuf dans votre Linux de pratique, sur un système de fichiers qui applique les permissions Unix, par exemple ext4, XFS ou Btrfs. Un partage avec l’hôte, un support exFAT ou certains montages peuvent simuler les modes : si le changement ne se retrouve pas à la lecture, examinez ce contexte au lieu de forcer. Toute cette manipulation de nos fichiers se fait sans sudo.
Les notes d’Ubuntu 26.04 indiquent des coreutils en Rust par défaut, avec les outils GNU également disponibles sous un nom préfixé par gnu, et sudo-rs comme fournisseur de sudo. Les formats stat utilisés ici suivent GNU stat : le bloc suivant sélectionne gnustat s’il existe, sinon stat, puis affiche sa version. Vérifiez qu’il s’agit bien de GNU avant les exemples de format, et gardez le même terminal :
stat_programme=stat
if command -v gnustat >/dev/null 2>&1; then
stat_programme=gnustat
fi
"$stat_programme" --version
Sur une distribution qui fournit déjà GNU stat sous le nom stat, aucune substitution n’est nécessaire. Ce choix local de commande ne remplace pas les utilitaires du système. La signification des bits de mode concerne le système de fichiers Linux ; les versions des programmes et la politique sudo restent à examiner séparément.
Préparer le fichier avant de lire ses permissions
Créez un dossier linux-course-17-practice neuf dans votre répertoire personnel. S’il existe, changez candidat. Le fichier notes.txt est créé seulement après la réussite de mkdir, puis son mode initial est conservé dans mode_depart pour le rétablir à la fin :
droits=
mode_depart=
candidat="$HOME/linux-course-17-practice"
if mkdir -- "$candidat" &&
printf 'private notes\n' > "$candidat/notes.txt" &&
mode_depart=$("$stat_programme" -c '%a' -- "$candidat/notes.txt"); then
droits=$candidat
printf 'Fichier : %s\nMode initial : %s\n' "$droits/notes.txt" "$mode_depart"
else
printf '%s\n' 'Préparation échouée : vérifier et choisir un nouveau dossier avant de poursuivre.' >&2
fi
Si la préparation échoue, la variable droits reste vide : examinez le message et les éventuelles entrées partielles avant de recommencer avec un nom neuf. Ne redéfinissez pas droits vers un autre emplacement. Les blocs suivants utilisent ce garde et des chemins complets entre guillemets.
id
test -n "$droits" &&
ls -l -- "$droits/notes.txt" &&
"$stat_programme" -c '%A %a %U %G %n' -- "$droits/notes.txt"
id décrit l’identité du processus, ls -l les propriétaires et le mode du fichier. Avec GNU stat, %A est la forme symbolique, %a la forme octale et %U/%G les noms de propriétaire et de groupe. Le cours sur les utilisateurs, les groupes et les propriétaires explique comment confronter ces identités ; le guide de stat détaille les champs.
Lire les trois catégories et les bits r, w, x
Dans une forme symbolique comme -rw-r-----, le premier - indique un fichier ordinaire. Les neuf positions suivantes se lisent en trois groupes : rw- pour le propriétaire, r-- pour les utilisateurs du groupe, --- pour les autres. Un tiret à la place d’une lettre signifie que ce bit n’est pas accordé dans cette catégorie.
Dans le modèle des bits ordinaires, le processus relève de la catégorie propriétaire si son identité correspond au propriétaire ; sinon il relève de la catégorie groupe si l’un de ses groupes correspond ; sinon de la catégorie autres. Il ne prend pas simplement la catégorie la plus permissive parmi les trois. Les ACL et les mécanismes de sécurité peuvent compléter ce modèle ; la documentation Linux de résolution des chemins et des permissions précise ces contrôles.
| Bit | Fichier ordinaire | Répertoire |
|---|---|---|
| r, lecture | Lire le contenu | Lire la liste des noms qu’il contient |
| w, écriture | Modifier le contenu | Participer à la création, suppression ou au renommage d’entrées, avec les autres conditions nécessaires |
| x, exécution ou recherche | Autoriser une tentative d’exécution directe | Traverser le répertoire pour résoudre les noms connus |
Pour ouvrir un fichier connu, le processus doit pouvoir traverser les répertoires de son chemin. Supprimer un fichier dépend généralement des droits w et x sur son dossier parent, pas seulement du bit w du fichier. Le sticky bit, les listes de contrôle d’accès (ACL), les attributs de fichiers ou des politiques comme SELinux peuvent encore restreindre le résultat. Le manuel GNU de la structure des modes explique ces catégories et limites.
Le bit x ne transforme pas un texte quelconque en programme valide et ne contourne pas un montage noexec. Invoquer Bash pour lire un script, comme dans le cours précédent, n’est pas la même opération que lancer directement ce fichier : le besoin d’exécution du fichier ne s’interprète pas de la même façon.
Définir un mode symbolique puis numérique avec chmod
Sur notre fichier uniquement, accordez lecture et écriture au propriétaire, lecture au groupe et aucun bit aux autres :
test -n "$droits" &&
chmod -- u=rw,g=r,o= "$droits/notes.txt" &&
"$stat_programme" -c '%A %a %n' -- "$droits/notes.txt"
Dans le cadre de cet exercice sur un fichier ordinaire Linux, vous devez retrouver -rw-r----- et 640, suivis du chemin. Vérifiez ce résultat avant de continuer. u désigne le propriétaire, g le groupe et o les autres ; = fixe les bits de chaque catégorie au lieu d’ajouter simplement une lettre.
En octal, r vaut 4, w vaut 2 et x vaut 1. Chaque chiffre additionne les bits d’une catégorie : 6 signifie 4+2 donc rw-, 4 signifie r-- et 0 aucun de ces trois bits. Le mode 640 est ainsi la forme numérique de rw- r-- ---.
Changez seulement le mode pour retirer la lecture du groupe :
test -n "$droits" &&
chmod -- 600 "$droits/notes.txt" &&
"$stat_programme" -c '%A %a %n' -- "$droits/notes.txt"
Vous devez obtenir -rw------- et 600. Le propriétaire conserve lecture et écriture ; le groupe perd son r. Pour revenir au mode 640 en ajoutant seulement ce bit :
test -n "$droits" &&
chmod -- g+r "$droits/notes.txt" &&
"$stat_programme" -c '%A %a %n' -- "$droits/notes.txt"
Vous retrouvez 640. + ajoute au mode existant, - retire les bits indiqués, = remplace la sélection de bits de la catégorie. Par exemple o-rwx retire les trois bits des autres ; dans notre mode 640 ils sont déjà absents. Le manuel des modes symboliques GNU décrit ces opérations.
Les chiffres 600 ou 640 ne désignent pas un propriétaire et ne modifient pas les groupes de comptes. Ils n’accordent pas non plus un accès garanti à tout membre d’un groupe : les répertoires du chemin et les autres politiques comptent encore.
Observer un répertoire privé séparément
Créez un sous-répertoire neuf dans le même atelier, puis fixez ses permissions :
test -n "$droits" &&
mkdir -- "$droits/private" &&
chmod -- 700 "$droits/private" &&
ls -ld -- "$droits/private" &&
"$stat_programme" -c '%A %a %n' -- "$droits/private"
Le mode attendu est drwx------, soit 700. Le d marque le répertoire ; son propriétaire dispose des trois bits. ls -ld décrit le dossier lui-même, tandis qu’un ls sans -d tend à demander son contenu. S’il existe déjà, mkdir échoue et les changements suivants de ce bloc ne sont pas appliqués.
Le x du répertoire sert à la traversée : le retirer peut empêcher l’accès à un fichier pourtant lisible situé dessous. Appliquer récursivement le même nombre à tous les fichiers et dossiers ignore cette différence. Cet exercice ne demande aucune opération chmod -R et ne prend pour cible ni vos documents réels, ni le répertoire d’un autre utilisateur.
Rétablir le mode initial et vérifier le contenu
Revenez au mode enregistré avant la comparaison 640 → 600 → 640, uniquement pour notes.txt de l’atelier :
test -n "$droits" && test -n "$mode_depart" &&
chmod -- "$mode_depart" "$droits/notes.txt" &&
"$stat_programme" -c '%A %a %n' -- "$droits/notes.txt" &&
cat -- "$droits/notes.txt"
La valeur octale doit correspondre à Mode initial affiché lors de la préparation, et le contenu doit toujours être private notes. Les permissions initiales peuvent dépendre de la configuration, donc le retour final n’est pas forcément 640. Ne réutilisez pas mode_depart pour un autre fichier. Le sous-répertoire private reste en 700 et peut être conservé vide pour revoir ses propriétés.
Comprendre ce que sudo autorise réellement
sudo exécute une commande sous une autre identité autorisée par la politique, souvent root par défaut. Tous les utilisateurs ne possèdent pas ce droit et tous les programmes ne sont pas nécessairement permis. Pour examiner votre propre autorisation, utilisez :
sudo -l
Une authentification peut être demandée. Une liste de droits ou un refus dépend de votre compte et de la politique ; un refus n’est pas une raison pour rendre tous les fichiers accessibles. La commande -l consulte les autorisations, elle n’accorde pas de nouveaux privilèges.
Sur Ubuntu 26.04, le manuel officiel de sudo-rs décrit notamment -l, l’identité cible et sudoedit. Sur un système utilisant l’implémentation historique de sudo, consultez son manuel local : les fonctions avancées et réglages ne doivent pas être supposés identiques. Le système peut aussi proposer la version historique sous le nom sudo.ws.
sudo ne change pas durablement le propriétaire d’un fichier existant par simple invocation. En revanche, le programme exécuté peut créer un fichier sous l’identité cible : inspectez ce qu’une commande privilégiée produit. Utilisez la commande précise correspondant au besoin autorisé, plutôt qu’une session d’administration utilisée pour toutes les étapes.
Une redirection > écrite à l’extérieur de la commande sudo est préparée par votre shell courant. Ainsi, placer sudo devant un affichage ne donne pas automatiquement à ce shell l’accès d’écriture à un fichier protégé. Le cours sur les redirections et leur préparation permet de reconnaître ce cas.
Pour une modification autorisée de configuration, sudoedit peut faire travailler l’éditeur sur une copie temporaire sous votre identité puis réinstaller le résultat selon la politique. Si une politique sudoers doit être modifiée, utilisez l’outil visudo adapté au fournisseur installé pour sa validation syntaxique ; n’improvisez pas une édition directe. Le manuel amont de visudo explique ces contrôles. Aucune modification de politique n’est nécessaire pour nos fichiers de pratique.
Diagnostiquer un accès refusé dans l’ordre
- Identifiez le processus et les groupes réellement appliqués avec id. Après un changement de compte, ne supposez pas que l’ancienne session a déjà été actualisée.
- Lisez l’UID/GID propriétaire et le mode du fichier avec ls ou stat. Pour le dossier lui-même, utilisez ls -ld.
- Examinez les répertoires traversés dans le chemin. Si l’outil namei d’util-linux est installé, namei -l suivi du chemin permet d’en afficher les composants, propriétaires et modes.
- Si les bits ordinaires n’expliquent pas le refus, examinez les ACL, les politiques de sécurité, les attributs du fichier et l’état de montage. Un système de fichiers en lecture seule ne se corrige pas par un simple ajout de w.
- Définissez l’accès réellement nécessaire, appliquez uniquement le changement approprié, puis vérifiez depuis l’identité qui doit utiliser le fichier.
Le manuel de namei détaille son affichage. Donner 777 d’emblée ouvre les trois catégories et ne résout pas forcément la cause du refus : commencez par les informations qui expliquent l’accès voulu.




