SUDO : Déléguer des droits sous Linux
Sudo est un logiciel libre permettant à un administrateur système de déléguer des droits et de donner la possibilité aux utilisateurs d’exécuter certaines commandes (ou même n’importe quelle commande) en tant que root ou tout autre utilisateur du système.
Introduction
La commande « sudo » est un outil crucial dans les systèmes d’exploitation Linux. Son nom est un acronyme de « Superuser Do » ou « Substitute User Do », ce qui illustre bien sa fonctionnalité principale : permettre à un utilisateur d’exécuter des commandes avec les privilèges d’un autre utilisateur, souvent celui du superutilisateur (aussi appelé « root »). En d’autres termes, « sudo » autorise un utilisateur à effectuer des tâches qui nécessitent des permissions élevées, habituellement réservées à l’administrateur du système.
Typiquement, un utilisateur standard peut utiliser « sudo » pour exécuter une commande en tant que superutilisateur après avoir fourni son propre mot de passe. Cela permet un contrôle granulaire sur les opérations système, améliorant ainsi la sécurité en limitant l’accès aux actions sensibles aux utilisateurs autorisés. L’usage de « sudo » est recommandé pour des raisons de sécurité, car il réduit l’exposition aux risques en limitant l’accès en tant que superutilisateur seulement lorsque nécessaire, et évite de devoir définir et partager un mot de passe pour l’utilisateur root.
Installation de « sudo »
Bien évidemment l’installation de sudo
dépend de la distribution que vous utilisez voire même du type d’installation que vous faites.
Dans la plupart des installations classiques et ce pour la plupart des distributions, sudo
sera déjà installé. Un moyen simple de le vérifier est d’essayer d’afficher la version du logiciel:
sudo --version
Si sudo
n’est pas déjà installé, vous pouvez le faire directement depuis les dépôts officiels de votre distribution. Il vous faudra lancer l’installation avec l’utilisateur root
. En cas de besoins vous pouvez vous référer aux articles sur apt, dnf et pacman.
Installer « sudo » sous Debian, Ubuntu et dérivés (deb)
apt install sudo
Installer « sudo » sous Red Hat, CentOS, Rocky Linux, Fedora, Almalinux (rpm)
dnf install sudo
Installer « sudo » sous Arch Linux
pacman -S sudo
Utilisation de base de « sudo »
Comme expliqué dans l’introduction, sudo
permet d’exécuter une commande, un script, … en prenant l’identité d’un autre utilisateur. A défaut de préciser quel utilisateur ou groupe, ce sera l’identité de root
qui sera utilisée.
L’utilisation la plus simple de sudo
est donc la suivante:
sudo commande
Si nous avons le droit d’exécuter la commande via sudo
, nous devons alors entrer notre propre mot de passe. Si cette authentification est réussie, par défaut elle restera valable pendant 5 minutes, ce qui nous évite de devoir entrer notre mot de passe à chaque commande.
Concrètement, à chaque fois que nous devons exécuter une commande qui requiert des privilèges élevés (l’identité de root
) nous ferons appel à sudo.
Comment ça marche ?
Si nous voulons l’utiliser correctement, nous devons comprendre comment sudo
fonctionne.
« sudo » a le bit setUID activé
Le premier point se cache dans les attributs de la commande:
Nous pouvons voir ici que la commande sudo
a le setUID qui est activé. Cela signifie que quand cette commande est exécutée ce sont les droits du propriétaire de la commande (dans ce cas: root
) qui sont utilisés et non ceux de celui qui l’exécute.
Les fichiers « sudoers »
Ensuite il faut nous intéresser au fichiers /etc/sudoers
qui est lu et interprété par sudo à l’excécution de la commande et qui contient les règles permettant ou non aux utilisateurs d’utiliser la commande sudo
.
Voici par exemple le contenu du fichier /etc/sudoers
sous Ubuntu 22.04 LTS
#
# This file MUST be edited with the 'visudo' command as root.
#
# Please consider adding local content in /etc/sudoers.d/ instead of
# directly modifying this file.
#
# See the man page for details on how to write a sudoers file.
#
Defaults env_reset
Defaults mail_badpass
Defaults secure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/snap/bin"
Defaults use_pty
# This preserves proxy settings from user environments of root
# equivalent users (group sudo)
#Defaults:%sudo env_keep += "http_proxy https_proxy ftp_proxy all_proxy no_proxy"
# This allows running arbitrary commands, but so does ALL, and it means
# different sudoers have their choice of editor respected.
#Defaults:%sudo env_keep += "EDITOR"
# Completely harmless preservation of a user preference.
#Defaults:%sudo env_keep += "GREP_COLOR"
# While you shouldn't normally run git as root, you need to with etckeeper
#Defaults:%sudo env_keep += "GIT_AUTHOR_* GIT_COMMITTER_*"
# Per-user preferences; root won't have sensible values for them.
#Defaults:%sudo env_keep += "EMAIL DEBEMAIL DEBFULLNAME"
# "sudo scp" or "sudo rsync" should be able to use your SSH agent.
#Defaults:%sudo env_keep += "SSH_AGENT_PID SSH_AUTH_SOCK"
# Ditto for GPG agent
#Defaults:%sudo env_keep += "GPG_AGENT_INFO"
# Host alias specification
# User alias specification
# Cmnd alias specification
# 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
# See sudoers(5) for more information on "@include" directives:
@includedir /etc/sudoers.d
Les lignes qui nous intéressent le plus les suivantes (notez qu’elles peuvent différer d’une distribution à l’autre):
root ALL=(ALL:ALL) ALL
%admin ALL=(ALL) ALL
%sudo ALL=(ALL:ALL) ALL
Ce sont là les règles qui définissent qui peut utiliser sudo
et ce que nous pouvons faire avec. Pour l’instant comprenez simplement que ces trois lignes définissent que l’utilisateur root, le groupe admin et le groupe sudo peuvent utiliser la commande sudo
pour exécuter n’importe quelle commande sous l’identité de n’importe quel utilisateur et n’importe quel groupe.
Par extension nous pouvons donc donner ces mêmes droits à n’importe quel utilisateur en l’ajoutant simplement au groupe sudo
(sous Rocky Linux c’est le groupe wheel qui est utilisé à la place).
D’ailleurs si sudo
est installé de base avec votre distribution, le premier utilisateur créé est généralement ajouté au groupe sudo ou wheel ou admin selon les distributions, ce que nous pouvons vérifier avec la commande id
.
Si un utilisateur n’est pas listé dans ce fichier et qu’aucun groupe auquel il appartient n’y est listé non plus, alors il ne pourra pas utilisé la commande sudo.
Notez que sur certaines distributions comme Ubuntu ou Debian vous trouverez l’instruction @includedir /etc/sudoers.d
dans le fichier /etc/sudoers
. Celle-ci permet d’importer tout fichier présent dans le dossier /etc/sudoers.d
, ce qui permet d’ajouter des règles et droits sans changer les fichiers de base de sudo
.
Connaître ses droits
Nous pouvons à tout moment afficher les droits que nous avons à travers la commande sudo:
sudo -l
Voici le résultat pour un utilisateur ayant des droits sudo…
Et maintenant pour un utilisateur n’ayant aucun droit avec la commande sudo…
Utilisation avancée de « sudo »
Outre le fait de simplement utiliser sudo
pour exécuter une commande avec les privilèges de l’utilisateur root, nous pouvons l’utiliser pour ouvrir un shell ou encore pour exécuter une action sous l’identité d’un utilisateur ou un groupe bien spécifique.
Voici les principales options de la commande sudo
:
Option courte | Option longue | Description |
---|---|---|
-b | --background | Exécute la commande en arrière plan |
-g | --group | Exécute la commande sous l’identité du groupe donné |
-i | --login | Lance un login shell sous l’identité de l’utilisateur donné (root par défaut) |
-l | --list | Liste les privilèges de l’utilisateur |
-s | --shell | Lance un shell (sans login) sous l’identité de l’utilisateur donné (root par défaut) |
-u | --user | Exécute la commande sous l’identité de l’utilisateur spécifié |
Exemples d’utilisation de la commande « sudo »
Voici une série d’exemple d’utilisation de la commande sudo
. Nous partons du principe ici que l’utilisateur a bien les privilèges requis pour l’exécution de sudo
.
Exécuter une commande en tant que root
sudo commande
Lancer un shell en tant que root
sudo -s
Lancer une commande avec l’identité d’un utilisateur spécifique
sudo -u utilisateur commande
Lancer un shell avec l’identité d’un utilisateur spécifique
sudo -s -u utilisateur
Les fichiers de configuration « sudoers »
Comme nous déjà vu, les droits et privilèges accordés aux utilisateurs sont décrits dans le fichier /etc/sudoers
. Si nous voulons profiter pleinement de cet outil, nous pouvons personnaliser les règles qui y sont décrites mais aussi en ajouter de nouvelles.
ATTENTION: il est fortement déconseillé d’éditer le fichier /etc/sudoers
directement à l’aide d’un éditeur de texte. Si vous voulez modifier ce fichier, il faut passer par la commande visudo
, sans quoi vous obtiendrai des résultats incohérents.
En ce qui me concerne je préfère de très loin laisser le fichier /etc/sudoers
intact et ajouter mes modifications dans des fichiers annexes localisés dans le dossier /etc/surdoers.d
. Ceci dit, cela ne change rien au résultat, les règles que nous créons sont exactement les mêmes.
Structure d’une règle « sudoers »
La structure d’une règle « sudo » est la suivante:
IDENTIFIANT HOTE=(UTILISATEUR:GROUPE) COMMANDES
IDENTIFIANT
: un nom d’utilisateur ou de groupe, le nom d’un groupe est précédé de%
.HOTE
: Sur quel hôte la commande sudo peut être exécutée.UTILISATEUR
: Quel identité d’utilisateur peut être utilisée.GROUPE
: Quel identité de groupe peut être utilisée.COMMANDES
: la liste des commandes qui peuvent être utilisées.
Il existe une série de mots clés prédéfinis que nous pouvons utiliser pour généraliser une règle. Par exemple ALL
peut être utilisé pour signifier n’importe quel hôte, utilisateur, groupe ou même n’importe quelle commande.
Notez que la plupart du temps, la partie HOTE
est ignorée (et définie à ALL
), les spécifications d’hôtes n’ont de sens que si la configuration de sudo est centralisée.
Exemples de règles « sudoers »
Dans les exemples suivants, nous partirons du principe que nous avons un utilisateur « joe » et un groupe « techos » qui existent sur le système.
Ces règles peuvent être ajoutées dans /etc/sudoers
en utilisant la commande visudo
ou, si l’instruction @includedir /etc/sudoers.d
est présente, dans n’importe quel fichier de ce dossier.
Donner tous les droits à un utilisateur
joe ALL=(ALL:ALL) ALL
Donner tous les droits à un groupe
%techos ALL=(ALL:ALL) ALL
N’autoriser que l’utilisation de l’identité de root pour n’importe quelle commande
joe ALL=(root:root) ALL
N’autoriser que l’utilisation des commandes « ps » et « ls » en tant que « root »
joe ALL=(root:root) /usr/bin/ls,/usr/bin/ps
Donner tous les privilèges et ne pas demander de mot de passe
joe ALL=(ALL:ALL) NOPASSWD:ALL
Notez que cette règle est extrêmement pratique et qu’il est tentant de l’utiliser tout le temps, mais l’utilisation d’un mot de passe est un gage de sécurité supplémentaire. Cette solution n’est à utiliser que dans des situations très spécifiques (ex: un labo de test).
Laisser un commentaire
Vous devez vous connecter pour publier un commentaire.