24/03/2025

Commandes et Système

Comment utiliser sudo sous Linux ? Notre guide complet avec des exemples

I. Présentation

L'administration d'une machine sous Linux passe obligatoirement par l'utilisation du compte root, faisant référence au super-utilisateur, ou par l'utilisation de la commande sudo. Quel est le rôle de cette commande sur Linux ? Quels sont ses avantages, notamment en matière de sécurité ? Comment effectuer la configuration par l'intermédiaire du fichier /etc/sudoers ?

Cet article vise à répondre à un ensemble de questions que l'on peut se poser à partir du moment où l'on s'intéresse à la commande sudo. Pour que cette documentation soit complète autant que possible, j'ai pris soin d'intégrer un ensemble d'exemples que vous pourrez appliquer en fonction de votre contexte, de vos besoins.

Version originale de l'article : 29 avril 2021

II. Qu'est-ce que la commande sudo ?

Sur Linux, certaines actions de configuration, d'administration et de sécurisation reposent sur l'utilisation du compte root, afin de bénéficier d'un niveau de privilèges suffisants. En effet, ces actions potentiellement sensibles ne sont pas accessibles à tous les utilisateurs : ce qui est plutôt une bonne nouvelle.

Toutefois, il n'est pas non plus recommandé de se connecter à une machine en tant que root lorsqu'il est question de l'administrer. Comment faire dans ce cas ? C'est qu'intervient la commande sudo ! Elle permet d'exécuter des commandes avec des privilèges élevés, à partir d'un compte utilisateur standard, et donc sans utiliser directement le compte root.

Le programme sudo, dont la signification est "Substitude User DO", et que l'on peut traduire en français par "Se substituer à l'utilisateur pour faire", permet à un utilisateur d'exécuter une commande avec les privilèges d'un autre utilisateur, généralement root.

Lorsqu'un utilisateur exécute une commande avec sudo, il doit saisir son propre mot de passe. De plus, toutes les actions effectuées via sudo sont enregistrées, ce qui permet d'assurer un suivi et d'améliorer la sécurité. Comme nous le verrons par la suite, un utilisateur doit être autorisé à utiliser la commande sudo et à effectuer ce changement de privilèges temporaire.

Remarque : sur Linux, vous ne pouvez pas créer plusieurs comptes root, alors que sur Windows, il est possible de créer plusieurs comptes administrateurs. Sudo répond donc à ce besoin de permettre une administration sécurisée d'une machine Linux, pour plusieurs personnes.

III. Quels sont les avantages de sudo ?

L'utilisation de sudo présente plusieurs avantages, essentiellement en matière de sécurité et de gestion des droits. Plutôt que de partager le mot de passe root entre plusieurs utilisateurs, chaque utilisateur dispose de son propre mot de passe et peut être autorisé à exécuter des commandes précises. Autrement dit, cela va éviter une utilisation abusive du compte root, tout en permettant de savoir qui a fait quoi.

En complément, sudo permet de limiter l'accès à certaines commandes et désactive l'utilisation prolongée de privilèges élevés grâce à un délai d'expiration (l'utilisateur devra ressaisir son mot de passe).

En résumé, sudo joue un rôle clé pour la sécurité des machines sous Linux. Il est essentiel de l'utiliser pour déléguer des permissions. Si l'on fait une comparaison avec un Windows, cela revient à élever ses privilèges par l'intermédiaire de l'UAC, quand une action nécessitant les droits administrateur doit être effectuée.

IV. Comment installer sudo sur Linux ?

Le programme sudo peut ou peut ne pas être déjà installé sur la machine Linux. Cela dépend de la distribution que vous utilisez, mais aussi du mode d'installation. Voici quelques exemples :

  • Si vous installez Ubuntu avec un environnement de bureau, l'utilisateur créé lors de l'installation sera autorisé à utiliser sudo, et ce dernier sera installé.
  • Si vous installez Debian sans interface graphique, il y aura un compte utilisateur standard et sudo ne sera pas installé.
  • Si vous installez Debian sans associer de mot de passe au compte root, alors le premier utilisateur sera autorisé à utiliser sudo, et ce dernier sera installé.

Cela montre qu'il est tout à fait envisageable de rencontrer une machine où sudo n'est pas installé... De ce fait, vous pourriez être amené à l'installer. Voici comment installer sudo sur Linux :

# Debian / Ubuntu
apt-get install sudo

# Fedora
dnf install sudo

Désormais, passons à l'utilisation de sudo au travers plusieurs exemples.

V. Comment utiliser sudo ?

À partir du moment où sudo est installé sur votre machine, vous êtes en mesure de pouvoir l'utiliser. Même si il conviendra au préalable d'octroyer cette autorisation à l'utilisateur que vous souhaitez utiliser pour administrer votre machine.

A. Exécution d'une commande avec sudo

Commençons par un exemple très simple et incontournable. Si l'utilisateur flo souhaite mettre à jour les paquets de son système, il peut utiliser la commande suivante :

apt update && apt upgrade -y

Le problème, c'est qu'il ne disposera pas des privilèges nécessaires pour effectuer ces actions... C'est là que la commande sudo intervient. Ce qui donne :

sudo apt update && sudo apt upgrade -y

Il lui sera demandé de saisir son mot de passe avant que la commande ne s'exécute. Les actions demandées seront effectuées, sans utiliser directement le compte root.

B. Exécution d'une commande en tant qu'un autre utilisateur

Par défaut, sudo exécute les commandes en tant que root. Cependant, on peut utiliser l'option -u pour exécuter une commande sous un autre utilisateur. Si vous l'ignoriez, vous le savez désormais : sudo n'est pas limité à exécuter une commande en tant que root.

Par exemple, pour exécuter une commande en tant que l'utilisateur it-connect :

sudo -u it-connect whoami

La commande whoami sert à voir quel est l'utilisateur actuellement utilisé dans le Terminal. Ci-dessous, nous pouvons voir la différence entre l'exécution de la commande seule ou en tant qu'un autre utilisateur.

C. Lancer un shell root temporaire

Si flo souhaite temporairement passer en mode root au sein d'un Terminal, il peut exécuter cette commande avec l'option -i :

sudo -i

Cela lui ouvrira un shell root jusqu'à ce qu'il en sorte avec exit. Il va donc basculer sur un shell dont le prompt sera root@NomMachine:~#. C'est un cas d'usage moins fréquent, mais à connaître.

VI. Configuration du fichier /etc/sudoers

À en croire les exemples précédents, l'utilisateur flo dispose des permissions nécessaires pour utiliser sudo. Comment est définie cette autorisation ? Comment autoriser un autre utilisateur à utiliser la commande sudo ? Peut-on limiter les commandes autorisées ? C'est ce que nous allons voir dans cette partie de l'article.

La configuration de sudo repose sur le fichier /etc/sudoers, qui définit les droits des utilisateurs. Il doit être modifié avec la commande visudo pour éviter toute erreur de syntaxe.

A. Ajouter un utilisateur au groupe sudo

Comme nous l'avions vu dans un autre article sur l'ajout d'un utilisateur sudo sur Linux, les utilisateurs appartenant au groupe sudo peuvent exécuter des commandes avec sudo. Pour ajouter l'utilisateur adm_flo à ce groupe :

usermod -aG sudo adm_flo

Vous pouvez ensuite lister vos permissions actuelles :

sudo -l

Voici le résultat que nous obtenons dans le contexte de l'utilisateur flo :

Cela retourne les autorisations du compte après analyse des directives définies dans le fichier /etc/sudoers. Ici, nous pouvons voir que l'utilisateur flo peut exécuter toutes les commandes qu'il souhaite sur la machine Linux (en tant que root).

Vous pouvez également vérifier que l'utilisateur appartient bien au groupe sudo grâce à cette commande :

id flo

Dans la liste retournée, il y a bien une référence permettant de le vérifier. Cela fonctionnerait aussi avec la commande groups.

uid=1000(flo) gid=1000(flo) groupes=1000(flo),4(adm),24(cdrom),27(sudo),30(dip),46(plugdev),100(users),114(lpadmin),2000(administrateurs)

B. Éditer la configuration de sudoers avec visudo

Pour modifier le fichier de configuration sudoers, il y a un outil spécifique : visudo. Nous pourrions utiliser nano ou un autre éditeur de texte, mais la bonne pratique, c'est d'utiliser visudo.

L'intérêt d'utiliser visudo, c'est que l'outil va verrouiller le fichier de configuration /etc/sudoers pour éviter d'être à plusieurs dessus, mais aussi, et c'est important, il va vérifier la syntaxe des règles ajoutées ou modifiées !

Pour modifier le fichier /etc/sudoers, nous utiliserons cette commande :

sudo visudo

ou, si vous êtes connecté en tant que root :

visudo

Le contenu du fichier sudoers s'affiche alors à l'écran.

Dans ce fichier, si vous descendez jusqu'à la fin, vous pourrez remarquer plusieurs lignes intéressantes. Ici, sur une machine Ubuntu.

# User privilege specification
root    ALL=(ALL:ALL) ALL

# Members of the admin group may gain root privileges
%admin ALL=(ALL) ALL

# Allow members of group sudo to execute any command
%sudo   ALL=(ALL:ALL) ALL

Ces trois directives signifient ce qui suit :

  • La première ligne permet à l'utilisateur root d'exécuter toutes les commandes avec tous les privilèges.
  • La seconde ligne permet à tous les membres du groupe admin d'exécuter toutes les commandes en utilisant sudo
  • La troisième ligne est identique à la règle du groupe admin, mais cette fois pour les utilisateurs appartenant au groupe sudo.

Il est à noter que la ligne correspondante au groupe admin n'est pas présente sur tous les systèmes Linux. Il est très fréquent d'avoir seulement le groupe sudo.

C. Syntaxe d'une règle sudo

Pour créer des règles, il faut respecter une syntaxe précise. Reprenons l'exemple du groupe sudo :

%sudo     ALL=(ALL:ALL)  ALL

Voici comment il faut l'interpréter :

Explications directive sudoers sudo

Ce qui permet de mieux comprendre aussi le commentaire associé à cette commande dans le fichier sudoers. Chacune de ces valeurs peut être modifiée pour affiner la règle.

Voici quelques précisions supplémentaires au sujet de la syntaxe :

  • Utilisateur / groupe : pour spécifier un utilisateur, on indique tout simplement son identifiant, tandis que s'il s'agit d'un groupe, on ajoute le préfixe %. On spécifie un seul utilisateur ou groupe par ligne !
  • Hôte : le fait d'indiquer ALL permet de dire que cette règle s'applique à toutes les machines
  • Tous les utilisateurs : permet de spécifier l'utilisateur dont on prend les droits, avec ALL, nous prenons en considération tous les utilisateurs y compris l'utilisateur root (ce qui nous intéresse)
  • Tous les groupes : idem que pour les utilisateurs
  • Toutes les commandes : sert à spécifier la ou les commandes que l'utilisateur (ou le groupe) spécifié en début de ligne peut exécuter sur la machine. S'il y a plusieurs commandes, il faut utiliser la virgule comme séparateur.

Note : en termes d'administration, vous pouvez donner des droits directement sur des groupes et ensuite d'ajouter le(s) utilisateur(s) à ce groupe.

D. Créer une nouvelle règle dans sudoers

Maintenant, prenons l'exemple d'un utilisateur standard, non membre du groupe sudo et nommé itconnect. Nous allons lui donner les droits pour éditer le fichier /etc/hosts via nano. Ce fichier système est protégé en écriture et ne peut pas être modifié par n'importe quel utilisateur.

Actuellement, la commande sudo ne me permet pas d'ouvrir ce fichier en écriture, car la directive est absente du fichier sudoers. Ce qui donne l'erreur suivante : "itconnect n'apparaît pas dans le fichier sudoers. Cet événement sera signalé".

À l'aide de l'utilisateur root (ou flo), nous allons modifier le fichier sudoers avec visudo et ajouter la ligne suivante :

itconnect ALL=(ALL) /usr/bin/nano /etc/hosts

Il est important de préciser qu'il faut indiquer le chemin complet vers le binaire, en l'occurrence ici nano. Pour trouver facilement le chemin vers le binaire, utilisez la commande which, par exemple :

which nano

Grâce à cette directive, l'utilisateur itconnect est en mesure de modifier le fichier /etc/hosts ! Il devra exécuter :

sudo nano /etc/hosts

Ensuite, il doit saisir son mot de passe. Il faut savoir que sudoers supporte l'option NOPASSWD : elle permet d'indiquer que l'utilisateur peut exécuter cette commande sans devoir saisir son mot de passe. Ce n'est pas recommandé, mais c'est une possibilité.

Si nous reprenons l'exemple précédent, cela donne cette modification :

itconnect ALL=(ALL) NOPASSWD:/usr/bin/nano /etc/hosts

Maintenant, pour aller un peu plus loin, voyons comment utiliser la notion d'alias avec sudoers.

Remarque : l'ordre des règles est important et ne doit pas être négligé. Si plusieurs règles s'appliquent à un même cas, c'est la dernière correspondante qui sera prise en compte. Autrement dit, toutes les règles sont évaluées.

E. Sudoers et les alias

Au tout début du fichier sudoers, nous pouvons remarquer plusieurs sections déclarées dans la première partie :

# Host alias specification
# User alias specification
# Cmnd_alias specification

Ces trois sections permettent de déclarer des alias pour les hôtes, les utilisateurs et les commandes. Par exemple, nous pouvons créer un alias d'utilisateurs ADMINS et y associer plusieurs utilisateurs. Ensuite, dans les règles, nous pouvons utiliser cet alias plutôt que d'appeler les utilisateurs un par un ou de créer un groupe spécifique si nous voulons créer une règle commune à plusieurs utilisateurs.

Prenons un exemple... Nous allons créer un alias d'utilisateur nommé ADMINS et qui va faire référence à deux comptes : itconnect et flo. Il faut bien séparer chaque nom par une virgule. Ce qui donne :

User_Alias    ADMINS = itconnect, flo

Ensuite, nous allons déclarer un alias de commande nommé SYSTEM. Il va faire référence à la commande systemctl, mais il pourrait contenir plusieurs commandes. Ce qui donne :

Cmnd_Alias    SYSTEM = /usr/bin/systemctl

Enfin, pour créer une règle qui autorise les ADMINS à utiliser les commandes SYSTEM, cela donnera la règle suivante :

ADMINS ALL=(ALL)   SYSTEM

Les utilisateurs itconnect et flo peuvent désormais exécuter toutes les commandes associées à l'alias SYSTEM.

F. Sudoers et le caractère d'exclusion "!"

Au sein d'une règle, le fait de spécifier le caractère ! devant la commande va permettre de l'interdire. Par exemple, nous pouvons autoriser l'utilisateur itconnect à modifier les mots de passe des utilisateurs, sauf pour l'utilisateur root. Nous devons donc ajouter la règle suivante :

itconnect ALL=(ALL) /usr/bin/passwd, !/usr/bin/passwd root

Suite à l'application de cette directive, voic le résultat obtenu :

G. Modifier le délai d'expiration de la commande sudo

Lorsque la commande sudo est utilisée, nous devons saisir le mot de passe du compte utilisateur à l'origine de l'action pour valider l'opération. Ensuite, si nous exécutons une nouvelle commande sudo, le mot de passe n'est pas demandé, car l'accès reste déverrouillé pendant X minutes. Par défaut, cette valeur semble varier en fonction de la distribution utilisée, parfois 5 minutes, parfois 15 minutes.

Cette mesure de sécurité est importante, mais elle peut être ajustée. En effet, il est possible de modifier cette valeur pour indiquer le délai d'expiration (timeout) que vous souhaitez pour sudoers.

Au sein du fichier sudoers, à la suite des autres lignes Defaults, déclarez la ligne suivante :

Defaults      timestamp_timeout=5

Les lignes Defaults sont utilisées pour régir les paramètres par défaut et globaux de sudo.

À ce sujet, voici quelques exemples supplémentaires :

# Appliquer une règle Defaults à un utilisateur spécifique
Defaults:flo    timestamp_timeout=10

# Demander le mot de passe à chaque commande
Defaults        timestamp_timeout=0

# Afficher systématiquement l'avertissement sudo à chaque utilisation
Defaults        lecture=always

# Afficher des astérisques * lors de la saisie du mot de passe (rien par défaut)
Defaults        pwfeedback

VII. Le dossier /etc/sudoers.d

Désormais, nous allons laisser de côté le fichier sudoers pour parler du dossier /etc/sudoers.d. Ce dossier sert à stocker des fichiers déclaratifs pour sudoers qui seront lus en complément du fichier sudoers en lui-même. Attention, tous les fichiers qui contiennent "~" ou "." dans le nom ne seront pas lus ! C'est particulièrement intéressant pour organiser les règles par fichier plutôt que de tout centraliser dans le même fichier : le fichier sudoers sera toujours lu, dans tous les cas.

Pour créer un nouveau fichier nommé ADMINS, nous utiliserons toujours la commande visudo, de cette façon :

visudo /etc/sudoers.d/ADMINS

Nous pourrions alors inclure nos alias et notre règle créés précédemment au sein de ce fichier.

VIII. Traçabilité des actions de sudo

L'un des avantages de sudo est la possibilité de tracer toutes les actions effectuées par les utilisateurs. Les commandes exécutées via sudo sont enregistrées dans le fichier de logs /var/log/auth.log (sur Debian/Ubuntu) ou /var/log/secure (sur Red Hat/Fedora).

Imaginons que, sur une machine Linux, un utilisateur tente d'utiliser la commande sudo alors qu'il n'est pas autorisé. Cela va immédiatement générer une nouvelle ligne de log dans le journal.

Voici un exemple :

sudo: itconnect : user NOT in sudoers ; TTY=pts/0 ; PWD=/home/flo ; USER=root ; COMMAND=/usr/bin/apt-get update

Nous comprenons que l'utilisateur itconnect a tenté d'exécuter la commande apt-get update. La tentative a été refusée.

Si l'action est autorisée, c'est également ajouté au fichier de log. Ci-dessous, nous pouvons constater que l'utilisateur flo a fait usage de la sudo pour exécuter la commande passwd it-connect.

sudo:      flo : TTY=pts/0 ; PWD=/home/flo ; USER=root ; COMMAND=/usr/bin/passwd it-connect

IX. Conclusion

Ce tutoriel sur l'utilisation de la commande sudo et de la configuration de sudoers sous Linux touche à sa fin. Grâce à ce guide d'utilisation et configuration de sudo, vous disposez de toutes les informations nécessaires pour le prendre en main et en faire bon usage.

En comprenant comment l'utiliser et comment configurer /etc/sudoers, grâce à des règles sur-mesure, il est possible de limiter les risques de compromission d'une machine Linux. Et, cela, tout en permettant aux utilisateurs d'effectuer les tâches nécessaires.

Enfin, si vous n'êtes toujours pas convaincu de l'intérêt de sudo, ce qui me surprendrait tout de même, sachez que l'ANSSI recommande son utilisation. Cette recommandation considérée comme une bonne pratique est évoquée dans le guide "Recommandations de sécurité relatives à un système GNU/Linux".

Si vous préférez le format vidéo, vous pouvez consulter cette - ancienne - vidéo sur le sujet.

Linux : la commande sudo et le fichier de config sudoers
author avatar
Florian BURNEL Co-founder of IT-Connect
Ingénieur système et réseau, cofondateur d'IT-Connect et Microsoft MVP "Cloud and Datacenter Management". Je souhaite partager mon expérience et mes découvertes au travers de mes articles. Généraliste avec une attirance particulière pour les solutions Microsoft et le scripting. Bonne lecture.
Partagez cet article Partager sur Twitter Partager sur Facebook Partager sur Linkedin Envoyer par mail

4 commentaires sur “Comment utiliser sudo sous Linux ? Notre guide complet avec des exemples

  • C’est Lynis qui va etre en sueur quand il verras que l’utilisateur a des droits sudo automatiquement :p

    Répondre
    • Hello Merwan,
      En fait j’ai remarqué qu’en fonction des distributions et des méthodes d’installations, l’état initial n’est pas toujours le même :-/.

      Répondre
  • C’est chaud. Les utilisateurs qui ont les autorisations peuvent tout faire. La sécurité va prendre un coup.

    Répondre
  • Merci pour cette explication.
    C’est très bien expliqué et de manière simple et compréhensible.
    Je tenait juste à signaler la qualité de l’article.
    Merci.

    Répondre

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur la façon dont les données de vos commentaires sont traitées.