Comment utiliser sudo sous Linux ? Notre guide complet avec des exemples
Sommaire
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 utilisantsudo
- La troisième ligne est identique à la règle du groupe
admin
, mais cette fois pour les utilisateurs appartenant au groupesudo
.
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 :
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'utilisateurroot
(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.
C’est Lynis qui va etre en sueur quand il verras que l’utilisateur a des droits sudo automatiquement :p
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 :-/.
C’est chaud. Les utilisateurs qui ont les autorisations peuvent tout faire. La sécurité va prendre un coup.
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.