Aller au contenu
Administration Linux medium

Utiliser sudo : exécuter une commande en root

12 min de lecture

sudo exécute une seule commande avec les privilèges de root, sans que vous ayez à vous connecter en root. C'est le geste de base de l'administration Linux : vous restez sur votre compte normal, et vous demandez une élévation de privilège ponctuelle quand la commande l'exige. Vous allez apprendre ici à lancer une commande privilégiée, à ouvrir un shell root temporaire, à lire vos droits avec sudo -l et à sortir des deux erreurs les plus fréquentes du débutant.

Cette page traite de l'usage de sudo. Écrire les règles qui décident qui a le droit de faire quoi est un autre métier, traité dans Configurer sudoers et déléguer des droits.

  • Pourquoi ne pas travailler en root au quotidien
  • Exécuter une commande privilégiée avec sudo
  • Ouvrir un shell root temporaire avec sudo -i et en sortir
  • Lire vos propres droits avec sudo -l
  • Reconnaître les groupes sudo (Debian) et wheel (Red Hat)

Le compte root (UID 0) n'a aucun garde-fou : le noyau ne lui refuse rien. Une faute de frappe qui provoquerait une simple erreur de permission sur votre compte devient une destruction irréversible en root. Le tableau ci-dessous montre trois commandes que tout le monde tape un jour, et ce qu'un espace mal placé leur fait produire.

CommandeConséquence en tant que root
rm -rf /tmp/*Supprime le contenu de /tmp, comportement attendu
rm -rf / tmp/* (espace en trop)Supprime tout le système
chmod -R 777 /Rend le système entier accessible en écriture à tout le monde

Travailler avec un compte normal et sudo ajoute trois freins utiles : vous devez taper sudo explicitement, ce qui vous force à désigner l'action dangereuse ; vous devez saisir votre mot de passe ; et chaque appel laisse une trace nominative dans les journaux du système. Le troisième point compte autant que les deux autres : après un incident, c'est ce qui permet de savoir qui a fait quoi.

La syntaxe tient en un mot : préfixez la commande par sudo. Le système vous demande alors votre mot de passe, et non celui de root, que vous n'avez d'ailleurs probablement pas.

Fenêtre de terminal
sudo apt update

Vérifiez immédiatement que l'élévation a bien eu lieu, avec la commande id qui affiche l'identité effective du processus lancé :

Fenêtre de terminal
id -un # votre compte
sudo id -un # l'identité obtenue via sudo
Résultat
bob
root

La deuxième ligne affiche root : la commande passée à sudo s'exécute bien avec l'identité du superutilisateur, alors que votre shell, lui, est resté sur votre compte.

Un réflexe s'installe vite : sudo est nécessaire dès que vous écrivez en dehors de votre dossier personnel. En pratique, cela couvre l'installation de paquets, la modification des fichiers de configuration dans /etc, la gestion des services et la lecture de certains journaux.

Fenêtre de terminal
sudo apt install htop # Debian/Ubuntu
sudo dnf install htop # Fedora/RHEL
sudo nano /etc/hostname # fichier de configuration système
sudo systemctl restart ssh # gestion d'un service
sudo journalctl -n 50 # journaux système

À l'inverse, lire un fichier public (cat /etc/passwd), lister un dossier ou travailler dans votre $HOME ne demande aucun privilège. Préfixer tout par sudo par superstition est un anti-pattern : vous finissez avec des fichiers appartenant à root dans votre propre répertoire, que vous ne pouvez plus modifier sans... sudo.

Le mot de passe n'est pas redemandé à chaque fois

Section intitulée « Le mot de passe n'est pas redemandé à chaque fois »

Après une première authentification réussie, sudo mémorise votre validation pendant quelques minutes, par terminal. Ce délai (timestamp_timeout) dépend de la distribution, ce qui surprend quand on passe d'une famille à l'autre :

DistributionDélai de mémorisation
Debian / Ubuntu15 minutes
RHEL / Rocky / Fedora (valeur amont)5 minutes

Pour lire la valeur réellement appliquée sur votre machine plutôt que la supposer, demandez à sudo lui-même :

Fenêtre de terminal
sudo sudo -V | grep -i "timestamp timeout"
Résultat sur Ubuntu 24.04
Authentication timestamp timeout: 15.0 minutes

Si vous voulez fermer la session avant l'expiration, par exemple avant de laisser votre poste, sudo -k oublie l'authentification immédiatement. La commande suivante redemandera le mot de passe.

Quand vous enchaînez dix commandes privilégiées, préfixer chacune par sudo devient pénible. Le shell root temporaire répond à ce cas : vous devenez root pour la durée d'une tâche, puis vous en sortez.

Fenêtre de terminal
sudo -i
Résultat
root@serveur:~#

Le prompt change de forme : le $ devient #. C'est le signal visuel qui indique que chaque commande tapée ici s'exécute en root, sans filet. Confirmez au besoin avec whoami, qui doit répondre root. Pour revenir à votre compte, exit suffit.

Les deux options ouvrent un shell root, mais elles ne partent pas du même environnement, ce qui explique des comportements déroutants comme un $HOME qui pointe encore sur votre compte.

CommandeEffet
sudo -iShell root complet : charge le profil de root, $HOME devient /root
sudo -sShell root qui conserve votre environnement : $HOME reste le vôtre

Prenez sudo -i par défaut. Il démarre dans un environnement propre et prévisible, identique à une connexion root réelle, ce qui évite les surprises de PATH ou de variables héritées de votre session.

sudo -l répond à une question précise : qu'ai-je le droit de faire, moi, sur cette machine ? C'est la première commande à taper sur un serveur que vous découvrez, avant de constater dans la douleur qu'une commande vous est refusée.

Fenêtre de terminal
sudo -l
Résultat (compte disposant de tous les droits)
Matching Defaults entries for bob on serveur:
env_reset, mail_badpass, secure_path=/usr/local/sbin\:/usr/local/bin\:/usr/sbin\:/usr/bin\:/sbin\:/bin, use_pty
User bob may run the following commands on serveur:
(ALL : ALL) ALL

La ligne (ALL : ALL) ALL se lit de gauche à droite : toutes les identités cibles, tous les groupes cibles, toutes les commandes. Autrement dit, un accès root complet. Sur un serveur bien tenu, vous verrez plutôt une liste limitée de commandes autorisées.

Si votre compte n'a aucun droit, sudo est explicite :

Résultat (compte sans droits sudo)
Sorry, user alice may not run sudo on serveur.

Sur une installation standard, on n'accorde pas les droits sudo compte par compte : on ajoute l'utilisateur à un groupe d'administrateurs déjà autorisé dans la configuration. Le nom de ce groupe est la principale divergence entre familles de distributions.

Le groupe s'appelle sudo :

Fenêtre de terminal
# Vérifier votre propre appartenance
groups | grep sudo
# Ajouter alice au groupe des administrateurs
sudo usermod -aG sudo alice
# Vérifier le résultat
id -nG alice

La commande id -nG alice doit maintenant afficher sudo (ou wheel) parmi ses groupes. Attention au piège classique : l'appartenance à un groupe est lue à l'ouverture de session. Tant qu'alice ne s'est pas déconnectée puis reconnectée, son shell en cours ignore son nouveau groupe et sudo continue de la rejeter.

La configuration vit dans le fichier /etc/sudoers et dans les fichiers du répertoire /etc/sudoers.d/. C'est là que sont écrites les règles décidant qui peut lancer quelle commande et sous quelle identité. On ne l'ouvre jamais avec un éditeur ordinaire : la commande visudo verrouille le fichier et en contrôle la syntaxe avant d'enregistrer, parce qu'une erreur dans ce fichier peut rendre sudo inutilisable pour tout le monde, y compris vous.

En tant que débutant, vous n'avez pas à y toucher : ajouter le compte au groupe sudo ou wheel couvre le besoin courant. Le jour où vous devrez autoriser une équipe à redémarrer un seul service sans lui livrer root entier, tout se joue dans ces fichiers, et c'est le sujet de Configurer sudoers et déléguer des droits : syntaxe des règles, alias, NOPASSWD, drop-ins et audit.

Trois messages reviennent en boucle chez les débutants. Ils ont tous une cause simple, et aucun ne se règle en tapant la commande une deuxième fois plus fort.

SymptômeCause probableSolution
bob is not in the sudoers fileLe compte n'appartient pas au groupe sudo/wheelLe faire ajouter au groupe, puis se reconnecter
sudo: command not foundPaquet sudo absent (images minimales, conteneurs)En root : apt install sudo ou dnf install sudo
Le mot de passe est refuséVous saisissez le mot de passe de rootSaisir votre mot de passe utilisateur
Le mot de passe est redemandé sans arrêtLe délai de mémorisation a expiré (15 min Debian, 5 min RHEL)Comportement normal, ressaisir
Rien ne change après usermod -aGLes groupes sont chargés à la connexionSe déconnecter et se reconnecter, vérifier avec id -nG

Vérifiez que l'essentiel de ce guide est acquis. Les questions portent uniquement sur ce qui vient d'être expliqué ici.

Contrôle de connaissances

Validez vos connaissances avec ce quiz interactif

6 questions
6 min.
70% requis

Informations

  • Le chronomètre démarre au clic sur Démarrer
  • Questions à choix multiples, vrai/faux et réponses courtes
  • Vous pouvez naviguer entre les questions
  • Les résultats détaillés sont affichés à la fin

Lance le quiz et démarre le chronomètre

  • Ne travaillez pas en root au quotidien : élevez vos privilèges commande par commande.
  • sudo <commande> exécute une commande en root ; vérifiez avec sudo id -un.
  • sudo -i ouvre un shell root temporaire : le prompt passe de $ à #, on en sort avec exit.
  • sudo -l affiche vos droits, et seulement les vôtres.
  • L'accès passe par le groupe sudo (Debian) ou wheel (Red Hat), effectif après reconnexion.
  • Le mot de passe reste mémorisé 15 minutes sur Debian/Ubuntu, 5 minutes côté RHEL ; sudo -k l'oublie tout de suite.

Ce site vous est utile ?

Sachez que moins de 1% des lecteurs soutiennent ce site.

Je maintiens +700 guides gratuits, sans pub ni tracking. Un soutien, même symbolique, m'aide à couvrir l'hébergement et à garder ces ressources gratuites. Merci pour votre appui.

Le formulaire ne s'affiche pas ? Ouvrir Ko-fi dans un onglet.

Abonnez-vous et suivez mon actualité DevSecOps sur LinkedIn