Chapitre 06
Permissions, utilisateurs et `sudo`
Objectifs
À la fin de ce chapitre, tu sauras :
- lire la ligne de permissions affichée par
ls -l; - comprendre les trois droits (
r,w,x) et les trois catégories (propriétaire, groupe, autres) ; - modifier les permissions avec
chmod, en notation symbolique et numérique ; - changer le propriétaire avec
chownet utilisersudoà bon escient.
Unix est un système multi-utilisateurs : plusieurs personnes peuvent partager une même machine. Les permissions sont le mécanisme qui décide qui a le droit de faire quoi sur chaque fichier. C'est aussi ce qui rend un script « exécutable », d'où l'importance de ce chapitre avant d'écrire des scripts.
Lire la ligne de permissions
Reprends ls -l sur un dossier :
$ ls -l
-rw-r--r-- 1 alex dev 1240 juin 14 09:00 rapport.txt
drwxr-xr-x 2 alex dev 4096 juin 14 09:01 donnees
La première colonne, par exemple -rw-r--r--, encode tout. Découpons-la en quatre morceaux :
- rw- r-- r--
type propriétaire groupe autres
- Le premier caractère est le type :
-pour un fichier ordinaire,dpour un dossier (directory),lpour un lien. - Les neuf suivants se lisent par groupes de trois, dans cet ordre : droits du propriétaire, droits du groupe, droits des autres (tout le monde).
Dans la ligne, alex est le propriétaire et dev le groupe propriétaire.
Les trois droits : `r`, `w`, `x`
Chaque groupe de trois caractères indique trois droits, toujours dans le même ordre :
| Lettre | Sur un fichier | Sur un dossier |
|---|---|---|
r (read) |
lire le contenu | lister les fichiers qu'il contient |
w (write) |
modifier le contenu | y créer/supprimer/renommer des fichiers |
x (execute) |
l'exécuter comme un programme | entrer dedans (cd) |
Un - à la place d'une lettre signifie « droit absent ». Décodons donc -rw-r--r-- :
-: c'est un fichier ordinaire ;rw-: le propriétaire peut lire et écrire, mais pas exécuter ;r--: le groupe peut seulement lire ;r--: les autres peuvent seulement lire.
Et drwxr-xr-x pour le dossier donnees :
d: c'est un dossier ;rwx: le propriétaire peut tout faire (lister, modifier, entrer) ;r-x: le groupe peut lister et entrer, mais pas modifier ;r-x: les autres aussi.
À retenir — Sur un dossier,
xne veut pas dire « exécuter » mais « traverser » : sansx, tu ne peux même pas fairecddedans, même si tu asr. C'est le piège le plus courant.
Modifier les permissions : `chmod`
chmod (change mode) change les droits. Il existe deux notations ; commence par la symbolique,
plus lisible.
Notation symbolique
On combine trois éléments : qui (u propriétaire, g groupe, o autres, a tous), une
opération (+ ajouter, - retirer, = fixer exactement) et un droit (r, w, x).
$ chmod u+x script.sh # donne le droit d'exécution au propriétaire
$ chmod go-w rapport.txt # retire l'écriture au groupe et aux autres
$ chmod a+r partage.txt # tout le monde peut lire
$ chmod u=rw,go=r notes.txt # fixe : proprio rw, groupe et autres r
Le cas le plus fréquent, et de loin, est chmod u+x pour rendre un script exécutable. Tu le feras à
chaque script écrit dans cette formation.
Notation numérique (octale)
Chaque droit vaut un nombre : r = 4, w = 2, x = 1. On les additionne par catégorie, ce qui donne
un chiffre de 0 à 7, puis on écrit les trois chiffres (propriétaire, groupe, autres) à la suite.
| Chiffre | Droits | Détail |
|---|---|---|
| 7 | rwx |
4+2+1 |
| 6 | rw- |
4+2 |
| 5 | r-x |
4+1 |
| 4 | r-- |
4 |
| 0 | --- |
rien |
$ chmod 644 rapport.txt # rw-r--r-- : proprio rw, groupe et autres r
$ chmod 755 script.sh # rwxr-xr-x : proprio rwx, les autres r-x
$ chmod 600 secret.txt # rw------- : proprio rw, personne d'autre
Deux valeurs reviennent partout : 644 pour un fichier de données normal et 755 pour un programme ou un dossier. Mémorise-les, tu les retrouveras toute ta vie.
Astuce — Les notations symbolique et numérique font la même chose.
chmod u+xmodifie juste un droit ;chmod 755fixe les neuf d'un coup. Utilise la symbolique pour un ajustement, la numérique pour poser un jeu de droits complet et connu.
Changer le propriétaire : `chown`
chown (change owner) change le propriétaire et/ou le groupe d'un fichier :
$ chown sam rapport.txt # rapport.txt appartient désormais à sam
$ chown sam:dev rapport.txt # propriétaire sam, groupe dev
Changer le propriétaire d'un fichier que tu ne possèdes pas requiert des privilèges
d'administrateur — ce qui nous amène à sudo.
L'administrateur et `sudo`
Sur un système Unix, un utilisateur spécial nommé root (le super-utilisateur) a tous les
droits, sur tous les fichiers. On ne se connecte pas en root au quotidien : c'est trop dangereux, une
faute de frappe pouvant détruire le système. À la place, on utilise sudo (substitute user do)
pour exécuter une seule commande avec les droits de root :
$ sudo apt update # exécute apt update en tant qu'administrateur
[sudo] Mot de passe de alex :
sudo te demande ton mot de passe (pas celui de root), vérifie que tu as le droit d'agir en
administrateur, puis exécute la commande. On s'en sert pour installer des logiciels, modifier des
fichiers système (dans /etc), ou agir sur des fichiers qui ne t'appartiennent pas.
Attention —
sudodésactive les garde-fous.sudo rm -r /un/dossier/systemes'exécutera sans broncher et peut casser ta machine. Avant unsudo, relis la commande deux fois. Ne lance jamais une commandesudotrouvée sur internet sans comprendre ce qu'elle fait.
À retenir — Tu n'as pas besoin de
sudopour travailler dans ton dossier personnel : tu y es déjà propriétaire de tout. Si une commande dans ton home réclamesudo, c'est souvent le signe d'une erreur (mauvais chemin, fichier appartenant à root par accident).
Résumé
ls -lmontre les permissions :type+ trois tripletsrwxpour propriétaire, groupe, autres.r= lire,w= écrire,x= exécuter (sur un dossier : traverser/cd).chmodmodifie les droits : symbolique (u+x,go-w) ou numérique (644,755).chownchange le propriétaire (souvent avecsudo).- root est le super-utilisateur ;
sudoexécute une commande en administrateur après ton mot de passe. À manier avec prudence.
Exercices
Exercice 1 — Décoder des permissions
Pour chacune de ces lignes de ls -l, dis le type de l'objet et qui peut faire quoi :
-rwxr-xr-xdrw--------rw-rw-r--
Voir le corrigé
On découpe en type | u | g | o.
- rwx r-x r-x: fichier ; le propriétaire peut lire, écrire, exécuter ; groupe et autres peuvent lire et exécuter mais pas modifier. (C'est typiquement un programme, équivalent755.)d rw- --- ---: dossier ; le propriétaire peut lire et écrire mais pas le traverser (xmanquant), donc il ne pourra pas fairecddedans ; personne d'autre n'a aucun droit. (Permissions bancales, justement à cause duxmanquant.)- rw- rw- r--: fichier ; propriétaire et groupe peuvent lire et écrire ; les autres peuvent seulement lire. (Équivalent664.)
Exercice 2 — Régler des droits
- Crée un fichier
lance.shet rends-le exécutable pour son propriétaire uniquement, avec la notation symbolique. Vérifie avecls -l. - Fixe ensuite ses droits à
rwxr-xr-xavec la notation numérique.
Voir le corrigé
La démarche : u+x ajoute l'exécution au seul propriétaire ; 755 correspond à rwxr-xr-x.
$ touch lance.sh
$ chmod u+x lance.sh
$ ls -l lance.sh
-rwxr--r-- 1 alex dev 0 juin 14 10:00 lance.sh
$ chmod 755 lance.sh
$ ls -l lance.sh
-rwxr-xr-x 1 alex dev 0 juin 14 10:00 lance.sh
Après u+x, seul le x du propriétaire apparaît. Après 755, les trois catégories ont leurs droits
fixés d'un coup.
Quiz
1. Dans -rw-r--r--, que peut faire le groupe ?
- A. Lire et écrire
- B. Lire seulement
- C. Rien
2. Que signifie le droit x sur un dossier ?
- A. Le supprimer
- B. Y entrer (faire
cd) et le traverser - C. L'exécuter comme un programme
3. Quelle commande rend script.sh exécutable pour son propriétaire ?
- A.
chmod u+x script.sh - B.
chmod -x script.sh - C.
chown script.sh
4. À quoi sert sudo ?
- A. À supprimer un fichier protégé
- B. À exécuter une commande avec les droits de l'administrateur (root)
- C. À changer ton mot de passe
Voir les réponses
- B — Le triplet du groupe est
r--: lecture seule. - B — Sur un dossier,
xautorise à le traverser ; sans lui, pas decdpossible. - A —
u+xajoute l'exécution au propriétaire.-xla retirerait. - B —
sudoexécute une commande en tant que root après vérification de ton mot de passe.
Projet fil rouge
Ton futur sauvegarde.sh sera un programme : il doit donc être exécutable. Tu vas préparer le
fichier et régler ses droits.
-
Crée le fichier du script et constate qu'il n'est pas encore exécutable :
$ touch sauvegarde.sh $ ls -l sauvegarde.sh -rw-r--r-- 1 alex dev 0 juin 14 10:10 sauvegarde.shLe
xest absent : tel quel, le système refuserait de le lancer comme programme. -
Rends-le exécutable et vérifie :
$ chmod u+x sauvegarde.sh $ ls -l sauvegarde.sh -rwxr--r-- 1 alex dev 0 juin 14 10:10 sauvegarde.sh
Le fichier est prêt à recevoir du code. Tu comprends maintenant pourquoi un script qu'on vient de
créer doit être rendu exécutable avant de tourner. Au prochain chapitre, on muscle la recherche et la
transformation de texte (find, sort, cut, sed, awk) avant d'attaquer la programmation.