Commande sudo sous Linux expliquée : utilisation, configuration et dépannage

目次

1. Premiers pas : Qu’est‑ce que sudo ?

The Basic and Role of sudo

Dans les systèmes Linux et de type Unix, « sudo » est une commande essentielle.
« sudo » est l’abréviation de « superuser do » et constitue un outil permettant d’emprunter temporairement les privilèges d’administrateur (privilèges root) pour exécuter des commandes. En général, utilisateurs ordinaires n’ont pas l’autorité d’effectuer des opérations qui affectent l’ensemble du système (comme installer des paquets ou modifier les paramètres système). Cependant, en utilisant la commande sudo, ces opérations privilégiées peuvent être exécutées de façon limitée.

Par exemple, vous pouvez exécuter la commande apt avec les privilèges root en lançant la commande suivante :

sudo apt update

Ainsi, sudo joue un rôle d’équilibre entre la sécurité du système et la commodité en tant que « mécanisme pour utiliser les privilèges d’administrateur en toute sécurité. »

Differences from the su Command

Il existe une commande su qui a un objectif similaire à sudo, mais il existe des différences nettes entre les deux.

  • su signifie « substitute user » et est une commande permettant de basculer vers un autre utilisateur (principalement root). Lorsque vous utilisez su, les opérations sont effectuées de manière à « devenir » complètement l’utilisateur spécifié.
  • En revanche, sudo exécute des commandes avec des privilèges d’administrateur empruntés temporairement tout en restant l’utilisateur actuel.

En d’autres termes, su est une méthode de changement d’utilisateur sur la base d’une session, tandis que sudo est une méthode d’élévation de privilèges sur la base d’une commande. Cette différence est importante du point de vue de la sécurité ; sudo facilite la gestion de l’historique des opérations, et dans les distributions récentes, sudo est devenu la méthode standard.

Typical Linux Distributions Where sudo is Used

sudo est utilisé par défaut dans de nombreuses distributions Linux, et son usage est particulièrement attendu dans les distributions suivantes :

  • Basées sur Ubuntu (Ubuntu, Linux Mint, etc.)
    → Au départ, vous ne vous connectez pas directement au compte root mais le gérez avec sudo.
  • Basées sur Debian
    → sudo peut être activé plus tard, mais il est souvent recommandé comme politique de sécurité.
  • Basées sur Fedora, CentOS et Red Hat
    → Bien qu’il soit possible d’utiliser le compte root, l’utilisation de sudo est également courante.

En particulier sous Ubuntu, le compte root est désactivé par défaut, et toutes les opérations d’administration sont conçues pour être effectuées via sudo. Ainsi, comprendre sudo est essentiel pour les utilisateurs d’Ubuntu.

Why is « sudo sudo » Searched For?

Le mot‑clé de recherche « sudo sudo » peut sembler redondant à première vue, mais il existe en réalité des cas où il est recherché avec les intentions suivantes :

  • Débutants qui souhaitent connaître la signification et l’utilisation de sudo le saisissent à plusieurs reprises pour insister.
  • Utilisateurs ayant rencontré des problèmes avec sudo (par ex., sudo: sudo: command not found) recherchent des solutions.
  • Utilisateurs qui ont vu des exemples d’utilisation double de sudo dans des scripts ou pipelines et se demandent pourquoi.

En comprenant ces intentions de recherche, les chapitifs suivants expliqueront en détail l’utilisation correcte et les méthodes de configuration de sudo, ainsi que le dépannage.

侍エンジニア塾

2. Utilisation de base de la commande sudo

Syntaxe de base de sudo

Le format de base de sudo est très.

sudo [options] command

Par exemple, pour mettre à jour les informations des paquets du système, utilisez ce qui suit :

sudo apt update

Cette commande signifie « exécuter ‘apt update’ avec des privilèges root

Mécanisme d’authentification par mot de passe et cache

La première fois que vous utilisez sudo, ou après qu’un certain délai se soit écoulé, le système vous demandera de saisir votre mot de passe utilisateur. Il s’agit d’un mécanisme visant à renforcer la sécurité et à prévenir les opérations accidentelles ou l’utilisation non autorisée par des tiers.

Après avoir saisi le mot de passe, il est mis en cache pendant une certaine durée (5 minutes par défaut sous Ubuntu), et vous pouvez omettre la saisie du mot de passe lors d’une nouvelle utilisation de sudo. Cette durée peut être modifiée dans le fichier sudoers.

Options fréquemment utilisées

sudo possède de nombreuses options pour rendre les opérations plus pratiques et flexibles. Voici quelques-unes des plus couramment utilisées.

-u (Exécuter en tant qu’autre utilisateur)

Par défaut, il utilise les privilèges root, mais en utilisant l’option -u, vous pouvez exécuter des commandes en tant que n’importe quel utilisateur.

sudo -u www-data whoami

Le résultat de l’exécution sera www-data, confirmant que « la commande a été exécutée en tant que www-data, pas en tant que moi-même ».

-s (Démarrer un shell)

La commande suivante vous permet de ouvrir temporairement un shell avec des privilèges root.

sudo -s

Cependant, les opérations en état root doivent être effectuées avec prudence.

-i (Se connecter en tant qu’utilisateur root complet)

Cette option recrée un environnement root plus complet. Comme les variables d’environnement sont également basculées vers celles de root, cela devient une session root dans le même état qu’immédiatement après la connexion.

sudo -i

-l (Vérifier les commandes exécutables)

Vous pouvez également vérifier les commandes que vous pouvez exécuter avec sudo.

sudo -l

Ceci est utile pour vérifier les restrictions de sécurité et tester les paramètres de privilèges.

Points à retenir pour les débutants

  • Vous devez mettre un espace après sudo. Exemple : sudoapt est incorrect.
  • Si vous souhaitez exécuter plusieurs commandes, vous devez entourer la commande entière de guillemets (" ou ') ou les séparer par des points-virgules.
  • Soyez prudent lorsque vous lancez des applications GUI avec sudo, car cela peut corrompre les fichiers de configuration (par ex., sudo gedit).

3. Le fichier sudoers et le contrôle d’accès

Qu’est-ce que le fichier sudoers ?

Le fichier de configuration qui contrôle le comportement de la commande sudo est /etc/sudoers dans le système. Ce fichier définit qui peut exécuter quelles commandes avec sudo.

Par exemple, un contrôle d’accès granulaire est possible, comme autoriser un certain utilisateur à n’exécuter que des commandes spécifiques avec sudo.
Cette flexibilité permet de mettre en œuvre le principe de sécurité n’accorder aux utilisateurs que les privilèges minimum nécessaires (principe du moindre privilège).

Édition sécurisée avec la commande visudo

Le /etc/sudoers ne doit pas être modifié directement avec un éditeur de texte.

Ceci est dû au fait qu’une erreur de syntaxe peut rendre sudo inutilisable, rendant la récupération difficile. Par conséquent, il est recommandé d’utiliser la commande visudo pour l’édition.

sudo visudo

visudo effectue une vérification de la syntaxe lors de l’enregistrement, permettant une édition sécurisée.

Exemples de syntaxe de base et de configuration

La syntaxe de base du fichier sudoers est la suivante :

username hostname = (runas_user) command(s)

Exemple :

alice ALL=(ALL:ALL) ALL

Ce paramètre permet à l’utilisateur « alice » d’exécuter toutes commandes sur tous les hôtes en tant que n’importe quel utilisateur.

Pour ajouter davantage de restrictions :

bob ALL=(ALL) /usr/bin/systemctl restart nginx

Ce paramètre limite l’utilisateur « bob » à ne pouvoir exécuter que la « commande de redémarrage de nginx » avec sudo.

Contrôle par groupe : le groupe sudo

Dans de nombreuses distributions comme Ubuntu, les utilisateurs appartenant au groupe sudo se voient accorder le privilège d’utiliser sudo.

%sudo  ALL=(ALL:ALL) ALL

En écrivant %sudo de cette manière, la gestion par groupe devient possible.

Pour ajouter un utilisateur au groupe sudo, utilisez la commande suivante :

sudo usermod -aG sudo username

Comment utiliser et précautions concernant l’option NOPASSWD

Si vous trouvez fastidieux de saisir votre mot de passe à chaque fois que vous exécutez sudo, vous pouvez utiliser l’option NOPASSWD pour éviter la saisie du mot de passe.

alice ALL=(ALL) NOPASSWD: /usr/bin/systemctl restart nginx

Avec ce paramètre, l’utilisateur « alice » pourra redémarrer nginx sans mot de passe.

Cependant, cela augmente les risques de sécurité, il est donc important de ne l’utiliser que pour un nombre limité de commandes.
En particulier, le combiner avec ALL n’est pas recommandé.

4. Utilisation avancée de sudo

Exécuter des commandes en tant qu’utilisateur spécifique

Normalement, sudo exécute les commandes avec les privilèges root, mais en utilisant des options, vous pouvez également exécuter des commandes en tant que n’importe quel utilisateur.

Par exemple, si vous souhaitez exécuter une commande en tant que l’utilisateur « www-data » utilisé par le serveur web, utilisez ce qui suit :

sudo -u www-data whoami

Le résultat de l’exécution sera www-data, confirmant que « la commande a été exécutée en tant que www-data, pas en tant que moi-même ».

Cette utilisation est utile lorsque vous souhaitez vérifier différents environnements ou privilèges pour chaque utilisateur.

Combinaison avec les redirections et les tubes

Un point de confusion fréquent pour les débutants est la combinaison de sudo avec les redirections (>) et les tubes (|).
Par exemple, la commande suivante peut sembler correcte à première vue, mais elle ne fonctionnera pas comme prévu:sudo echo "test" > /etc/test.conf

Dans ce cas, echo lui-même est exécuté avec sudo, mais la redirection avec > est exécutée avec les privilèges d’utilisateur normal. Par conséquent, l’écriture échouera.

La bonne façon est d’utiliser la commande tee :

echo "test" | sudo tee /etc/test.conf

En faisant cela, la partie de redirection est également exécutée avec les privilèges sudo, et vous pouvez éviter l’erreur.

Utiliser sudo dans les scripts

Lorsque vous incluez des commandes nécessitant des privilèges d’administrateur dans un script shell, ajoutez explicitement sudo avant la commande.
Cependant, si vous créez un script en supposant qu’il sera exécuté par un utilisateur normal, il est plus sûr de n’ajouter sudo qu’aux parties nécessaires et d’éviter d’exécuter tout le script avec sudo.

Exemple (install.sh) :

#!/bin/bash

echo "Installing package..."
sudo apt install -y nginx

Il existe également un modèle pour vérifier si le script s’exécute en tant que root au début du script :

if [ "$EUID" -ne 0 ]; then
    echo "This script must be run as root"
    exit 1
fi

En incluant de tels contrôles, le fonctionnement sûr du script devient possible.

Commandes pratiques fréquemment utilisées

  • sudo !!
    → Réexécute la commande précédente avec sudo. Par exemple :
    apt update
    sudo !!

Cela a le même effet que sudo apt update.

  • sudo -k
    → Efface manuellement le cache du mot de passe sudo. Cela est utile pour des raisons de sécurité, par exemple avant de quitter temporairement votre terminal.
  • sudo -v
    → Prolonge les privilèges sudo pour la session en cours. C’est pratique pour les tâches longues.

5. Sécurité et bonnes pratiques

Respecter le principe du moindre privilège

Le principal objectif de l’utilisation de sudo est de permettre les opérations système avec le minimum de privilèges nécessaires.
En d’autres termes, l’utilisation idéale n’est pas d’« être toujours l’utilisateur root tout-puissant », mais d’« emprunter le pouvoir du root uniquement lorsque cela est nécessaire et dans le cadre nécessaire ».

En suivant ce principe, les réglages suivants, par exemple, sont souhaitables :

  • Autoriser les utilisateurs à exécuter uniquement des commandes spécifiques avec sudo (par ex., systemctl restart nginx).
  • Minimiser l’utilisation de NOPASSWD.
  • Gérer les utilisateurs avec des privilèges administratifs dans des groupes (par ex., sudo).

Journalisation et audit

sudo consigne les commandes exécutées dans les journaux. Cela vous permet de vérifier plus tard qui a utilisé quelle commande et quand.

Les principales destinations de journalisation sont les suivantes (peuvent varier selon la distribution) :

  • /var/log/auth.log (Ubuntu, basés sur Debian)
  • journalctl (distributions avec systemd)

Par exemple, pour vérifier l’historique d’utilisation de sudo sous Ubuntu :

grep 'sudo' /var/log/auth.log

Ou :

journalctl _COMM=sudo

Cela rend possible de suivre qui a fait quoi même en cas d’opérations non autorisées ou accidentelles. C’est une perspective essentielle dans la gestion des serveurs.

Vulnérabilité réelle de sudo (CVE-2021-3156)

Bien que sudo soit un outil très fiable, d’importantes vulnérabilités ont été signalées par le passé.

Un exemple particulièrement célèbre est CVE-2021-3156 (communément appelé Baron Samedit), publié en 2021.
C’était une vulnérabilité grave où, sous certaines conditions, une entrée malveillante pouvait permettre à un utilisateur ordinaire d’obtenir des privilèges root.

Ce problème a déjà été corrigé, mais comme le montre ce cas :

  • Toujours garder les paquets importants, y compris sudo, à la dernière version.
  • Vérifier régulièrement les sites officiels et les bases de données de vulnérabilités.

De telles mesures sont nécessaires.

Introduction à l’alternative à sudo : doas

Dans certains environnements Linux minimalistes et chez les utilisateurs soucieux de sécurité, une commande appelée doas est également utilisée comme alternative à sudo.

doas est un outil concis d’élévation de privilèges issu d’OpenBSD, caractérisé sa configuration plus et une sécurité supérieure comparée à sudo.

Exemple :

doas apt update

Le fichier de configuration est écrit dans /etc/doas.conf. La syntaxe est également simple :

permit nopass :wheel

Comme indiqué, vous pouvez facilement écrire des réglages tels que permettre aux utilisateurs du groupe wheel d’utiliser doas sans mot de passe.

Cependant, comme doas n’est pas fourni par défaut dans certains environnements Linux, son installation et sa configuration demandent un certain effort.
En fonction du but et de l’objectif, il est judicieux de choisir si sudo ou doas est plus approprié.

6. Erreurs courantes et dépannage

« L’utilisateur n’est pas dans le fichier sudoers » Erreur

username is not in the sudoers file. This incident will be reported.

Cette erreur s’affiche lorsque l’utilisateur actuel n’a pas la permission d’utiliser sudo. Elle se produit généralement lorsqu’un nouvel utilisateur qui n’a pas été ajouté au groupe sudo exécute une commande.

Solution :

  1. Connectez-vous avec un autre utilisateur disposant des privilèges root.
  2. Ajoutez l’utilisateur cible au groupe sudo.
sudo usermod -aG sudo username

Après cela, déconnectez-vous et reconnectez-vous à la session, et sudo sera disponible.

« Permission denied » Erreur lors de l’utilisation de redirections ou de tuyaux

Permission denied

Cette erreur se produit parce que même si vous avez l’intention d’exécuter une commande avec sudo, la destination de redirection ou le traitement du pipe est effectué en dehors de sudo.

Exemple incorrect :

sudo echo "test" > /etc/test.conf

Dans ce cas, echo est exécuté avec sudo, mais l’écriture dans le fichier se fait avec les privilèges de l’utilisateur ordinaire, entraînant une erreur.

Utilisation correcte :

echo "test" | sudo tee /etc/test.conf

Ou, pour écrire plusieurs lignes à la fois, il vaut mieux utiliser sudo tee ou sudo bash -c.

sudo bash -c 'echo "line1" > /etc/test.conf'

Inopérabilité due aux erreurs d’édition du fichier sudoers

Si vous modifiez directement le fichier sudoers et commettez une erreur de syntaxe qui rend sudo lui‑même inutilisable, c’est un état très dangereux.

Solution :

  1. Connectez‑vous avec le compte root (notez qu’il est désactivé par défaut sous Ubuntu).
  2. Réparez avec la commande suivante :
pkexec visudo

Si pkexec ne peut pas être utilisé, vous devrez démarrer en mode récupération ou similaire pour modifier le fichier /etc/sudoers.

De plus, pour éviter les erreurs de syntaxe, utilisez toujours ce qui suit pour l’édition :

sudo visudo

« sudo : commande introuvable »

sudo: command not found

Cette erreur se produit lorsque sudo n’est pas installé sur le système ou ne peut pas être trouvé à cause d’un problème avec la variable d’environnement PATH.

Solution :

  • Connectez‑vous avec les privilèges root et réinstallez sudo comme suit :
apt update
apt install sudo
  • Ou exécutez en spécifiant directement le chemin vers /usr/bin/sudo :
/usr/bin/sudo ls

7. FAQ : Questions fréquemment posées sur sudo

Q1. Quelle est la différence entre sudo et su ?

A:
sudo est une commande permettant d’« exécuter temporairement uniquement des commandes spécifiques avec des privilèges administrateur », tandis que su est une commande permettant de « passer à l’utilisateur complet (principalement root) ».

  • sudo: élève les privilèges uniquement pour certaines opérations tout en restant l’utilisateur actuel.
  • su: passe complètement à un autre utilisateur.

Du point de vue de la sécurité et de l’historique des opérations, l’utilisation de sudo est recommandée ces dernières années.

Q2. Ai-je besoin du mot de passe root en utilisant sudo ?

A:
Non, vous saisissez généralement votre propre mot de passe de connexion, pas le mot de passe root.
Cela permet de réduire le risque de fuite du mot de passe root et de faciliter le suivi de l’historique des opérations de l’utilisateur.

Q3. Où les journaux sudo sont-ils enregistrés ?

A:
Dans de nombreuses distributions Linux, les journaux d’opération de sudo sont enregistrés dans l’un des emplacements suivants :

  • Basé sur Ubuntu/Debian : /var/log/auth.log
  • Basé sur RHEL/CentOS : /var/log/secure
  • Tous les environnements systemd : journalctl _COMM=sudo

Cela permet de suivre qui a fait quoi même en cas d’opérations non autorisées ou accidentelles.

Q4. J’ai accidentellement modifié le fichier sudoers. Que faire ?

A:
Tout d’abord, assurez-vous toujours d’utiliser sudo visudo avant de modifier.
Si vous ne pouvez plus utiliser sudo à cause d’une erreur de syntaxe, essayez de le réparer en utilisant l’une des méthodes suivantes :

  • Connectez-vous avec le compte root et corrigez-le avec visudo.
  • Si c’est Ubuntu, démarrez en root depuis le « Recovery Mode » et réparez-le.
  • pkexec visudo (dans les environnements où polkit est activé).

Étant donné que les erreurs de syntaxe affectent le fonctionnement de tout le système, veuillez tester à nouveau après la correction.

Q5. Existe-t-il un moyen d’obtenir des privilèges root sans utiliser sudo ?

A:
Oui, mais ce n’est pas recommandé en raison des risques de sécurité accrus.

Par exemple :

  • Passez à root avec la commande su (nécessite le mot de passe root).
  • Connectez-vous directement avec le compte root (désactivé par défaut sous Ubuntu).

De nombreuses distributions Linux ont une politique d’éviter l’utilisation directe du compte root, et utiliser sudo est plus sûr.

Q6. Est-il acceptable de lancer des applications GUI avec sudo ?

A:
En principe, il vaut mieux l’éviter. Par exemple, exécuter quelque chose comme sudo gedit peut écraser les fichiers de configuration GUI avec les privilèges root, ce qui peut entraîner des incohérences de permissions ou une corruption de la configuration.

Lorsque vous utilisez des applications GUI, il est recommandé d’utiliser gksudo ou pkexec comme suit (cependant, ces outils peuvent être obsolètes ou non installés selon l’environnement) :

pkexec gedit

8. Conclusion

Comprendre correctement le rôle de sudo

Dans cet article, nous avons expliqué de manière générale « sudo, » une commande très importante sous Linux et les systèmes de type Unix, couvrant son rôle de base, utilisation, méthodes de configuration, applications, mesures de sécurité, erreurs courantes et FAQ.

sudo n’est pas simplement quelque chose à « placer avant une commande », mais un mécanisme de contrôle d’accès important qui permet le travail nécessaire tout en maintenant la sécurité du système.

Une utilisation correcte prévient les problèmes

Accorder une attention particulière aux points suivants est la clé pour utiliser sudo en toute sécurité :

  • Opérer avec le minimum de privilèges nécessaires (principe du moindre privilège).
  • Gérer les paramètres en toute sécurité en utilisant visudo.
  • Utiliser les journaux pour vérifier et gérer l’historique des opérations.
  • Faire attention au comportement lorsqu’on combine avec des tubes et des redirections.
  • Éviter, en principe, de l’utiliser pour des applications graphiques.

Ne pas comprendre ces points peut entraîner des problèmes tels que « les fichiers sont corrompus », « les paramètres ne peuvent pas être restaurés » ou « sudo est devenu inutilisable ».

Choisissez un style qui convient à l’exploitation de votre système

Linux est un système très flexible. En plus d’utiliser sudo, vous pouvez également utiliser des outils alternatifs tels que doas selon les besoins.
En fonction de votre politique opérationnelle et de votre politique de sécurité, choisissez un style qui vous convient et configurez‑le et exploitez‑le correctement, ce qui conduira à une meilleure gestion du système.

Enfin

Comprendre sudo est la première étape pour comprendre Linux.
Veuillez acquérir les connaissances et l’utilisation correctes, non pas seulement comme une commande pratique, mais comme une « clé » pour protéger l’ensemble du système.

Nous espérons que la prochaine fois que vous utiliserez Linux, chacune de vos commandes sera exécutée avec plus de confiance.

年収訴求