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

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 . 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 ?

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 , 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 lorsqu’il est question de l’administrer. Comment faire dans ce cas ? C’est qu’intervient la commande ! 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 .

Le programme , 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 .

Lorsqu’un utilisateur exécute une commande avec , il doit saisir son propre mot de passe. De plus, toutes les actions effectuées via 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 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, 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 :


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 souhaite mettre à jour les paquets de son système, il peut utiliser la commande suivante :


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 intervient. Ce qui donne :


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, exécute les commandes en tant que root. Cependant, on peut utiliser l’option 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 :


La commande 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 souhaite temporairement passer en mode root au sein d’un Terminal, il peut exécuter cette commande avec l’option :


Cela lui ouvrira un shell root jusqu’à ce qu’il en sorte avec . Il va donc basculer sur un shell dont le prompt sera . 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 dispose des permissions nécessaires pour utiliser . 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 repose sur le fichier , qui définit les droits des utilisateurs. Il doit être modifié avec la commande 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 peuvent exécuter des commandes avec . Pour ajouter l’utilisateur à ce groupe :


Vous pouvez ensuite lister vos permissions actuelles :


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

Cela retourne les autorisations du compte après analyse des directives définies dans le fichier . Ici, nous pouvons voir que l’utilisateur 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 :


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


B. Éditer la configuration de sudoers avec visudo

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

L’intérêt d’utiliser , c’est que l’outil va verrouiller le fichier de configuration 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 , nous utiliserons cette commande :

sudo visudo

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

visudo

Le contenu du fichier 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.


Ces trois directives signifient ce qui suit :

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

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

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     ALL=(ALL:ALL)  ALL

Voici comment il faut l’interpréter :

Explications directive sudoers sudoExplications directive sudoers sudo

Ce qui permet de mieux comprendre aussi le commentaire associé à cette commande dans le fichier . 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 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 , nous prenons en considération tous les utilisateurs y compris l’utilisateur (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 et nommé . Nous allons lui donner les droits pour éditer le fichier via . 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 . 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 (ou ), nous allons modifier le fichier avec 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 . Pour trouver facilement le chemin vers le binaire, utilisez la commande , par exemple :

which nano

Grâce à cette directive, l’utilisateur est en mesure de modifier le fichier ! Il devra exécuter :

sudo nano /etc/hosts

Ensuite, il doit saisir son mot de passe. Il faut savoir que supporte l’option : 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 .

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 , 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 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é et qui va faire référence à deux comptes : et . 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é . Il va faire référence à la commande , 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 à utiliser les commandes , cela donnera la règle suivante :

ADMINS ALL=(ALL)   SYSTEM

Les utilisateurs et peuvent désormais exécuter toutes les commandes associées à l’alias .

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 à modifier les mots de passe des utilisateurs, sauf pour l’utilisateur . 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 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 , 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 () que vous souhaitez pour .

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

Defaults      timestamp_timeout=5

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

À ce sujet, voici quelques exemples supplémentaires :


VII. Le dossier /etc/sudoers.d

Désormais, nous allons laisser de côté le fichier pour parler du dossier . Ce dossier sert à stocker des fichiers déclaratifs pour qui seront lus en complément du fichier 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 sera toujours lu, dans tous les cas.

Pour créer un nouveau fichier nommé , nous utiliserons toujours la commande , 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 est la possibilité de tracer toutes les actions effectuées par les utilisateurs. Les commandes exécutées via sont enregistrées dans le fichier de logs (sur Debian/Ubuntu) ou (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 :


Nous comprenons que l’utilisateur a tenté d’exécuter la commande . 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 a fait usage de la pour exécuter la commande .


IX. Conclusion

Ce tutoriel sur l’utilisation de la commande et de la configuration de 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 , 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.

SOURCE