wiki:os:gnu_linux:tutos:admin:sudo

La commande sudo comme alternative au compte root

Logo de sudo :

La commande sudo (substitute user do) est une commande qui permet de lancer des commandes administratives sans nécessité d'accès au compte root (superutilisateur sous les systèmes Unix) mais également des applications graphiques d'administrations tel que GParted. Il existe une commande similaire à sudo du nom de doas qui provient du projet OpenBSD.

Pour les distributions Linux n'ayant pas sudo par défaut, il faut d'abord vous connectez en tant que root :

su -

puis entrez votre mot de passe root.

Sous Debian :

apt install sudo

Sous Fedora :

dnf install sudo

Sous openSUSE :

zypper install sudo

Sous Mageia :

urpmi sudo

Sous Arch Linux :

pacman -S sudo

Suite à l'installation de sudo, un fichier de configuration est créé du nom de sudoers, /etc/sudoers sous Linux ou /usr/local/etc/sudoers sous FreeBSD.

Pour éditer ce fichier de manière sécurisée, il y a l'utilitaire visudo qui utilise votre éditeur de texte par défaut.
Entrez en root :

visudo

ouvre le fichier /etc/sudoers avec votre éditeur de texte.

Copier la ligne root ALL=(ALL:ALL) ALL et ajoutez au fichier tom ALL=(ALL:ALL) ALL, tom est à remplacer par votre nom d'utilisateur. L'ajout de tom ALL=(ALL:ALL) ALL au fichier sudoers vous donne tous les droits du compte root de manière immédiate. Vous pouvez évidemment peaufiner votre réglage et n'attribuer que quelques autorisations à votre utilisateur.

Sous Debian, en root :

adduser tom sudo

ajoute l'utilisateur tom au groupe sudo.

Toutes distributions Linux confondues, en root :

usermod -aG sudo tom

ajoute l'utilisateur tom au groupe sudo. Évidemment il faut remplacer tom par votre nom d'utilisateur !

À noter que l'ajout de votre utilisateur au groupe sudo n'a pas un effet immédiat, il faut vous déconnectez et vous reconnectez avec votre utilisateur.

Par défaut l'ajout de votre utilisateur au groupe sudo vous donnes les mêmes droits que root.
Sur les distributions Linux actuels, privilégiez la méthode d'ajout du groupe sudo à votre utilisateur. Mais pour n'importe quel système Unix, privilégiez l'édition du fichier sudoers, qui fonctionne sur tout OS de type Unix.

Pour avoir une information complète sur la commande sudo :

man sudo

Pour avoir un bref résumé de l'utilisation de la commande sudo :

sudo --help

qui affiche :

sudo – exécute une commande en tant qu'un autre utilisateur

usage: sudo -h | -K | -k | -V
usage: sudo -v [-ABkNnS] [-g group] [-h host] [-p prompt] [-u user]
usage: sudo -l [-ABkNnS] [-g group] [-h host] [-p prompt] [-U user] [-u user] [command [arg ...]]
usage: sudo [-ABbEHkNnPS] [-r role] [-t type] [-C num] [-D directory] [-g group] [-h host] [-p prompt] [-R directory] [-T timeout] [-u user]
            [VAR=value] [-i | -s] [command [arg ...]]
usage: sudo -e [-ABkNnS] [-r role] [-t type] [-C num] [-D directory] [-g group] [-h host] [-p prompt] [-R directory] [-T timeout] [-u user] file ...

Options:
  -A, --askpass                 utiliser un programme adjoint pour demander le mot de passe
  -b, --background              exécuter la commande en arrière-plan
  -B, --bell                    émettre un signal sonore lors d'une demande
  -C, --close-from=num          fermer tous les descripteurs de fichiers >= n°
  -D, --chdir=directory         changer le répertoire de travail avant d'exécuter la commande
  -E, --preserve-env            préserver l'environnement de l'utilisateur en exécutant la commande
      --preserve-env=list       préserver les variables d'environnement spécifiques
  -e, --edit                    éditer les fichiers au lieu d'exécuter une commande
  -g, --group=group             exécuter la commande en tant que le nom ou ID de groupe spécifié
  -H, --set-home                assigner à la variable HOME le répertoire personnel de l'utilisateur cible
  -h, --help                    afficher le message d'aide et terminer
  -h, --host=host               exécuter la commande sur l'hôte (si supporté par le greffon)
  -i, --login                   exécuter le shell de login comme l'utilisateur cible. Une commande peut aussi être spécifiée
  -K, --remove-timestamp        supprime complètement le fichier d'horodatage
  -k, --reset-timestamp         invalide le fichier d'horodatage
  -l, --list                    afficher les privilèges de l'utilisateur ou vérifie une commande spécifique. Utilisez deux fois pour une forme
                                plus longue
  -n, --non-interactive         mode non interactif, aucune invite utilisée
  -P, --preserve-groups         préserve le vecteur des groupes au lieu de le changer en celui de la cible
  -p, --prompt=prompt           utiliser l'invite de mot de passe spécifié
  -R, --chroot=directory        changer le répertoire racine avant d'exécuter la commande
  -r, --role=role               créer le contexte de sécurité SELinux avec le rôle spécifié
  -S, --stdin                   lire le mot de passe depuis l'entrée standard
  -s, --shell                   exécuter le shell en tant que l'utilisateur cible. Une commande peut aussi être spécifiée
  -t, --type=type               créer le contexte de sécurité SELinux avec le type spécifié
  -T, --command-timeout=timeout terminer la commande après la limite de temps spécifiée
  -U, --other-user=user         en mode liste, afficher les privilèges de l'utilisateur
  -u, --user=user               exécuter la commande (ou éditer le fichier) sous le nom d'utilisateur ou le ID spécifié
  -V, --version                 afficher les informations de version et terminer
  -v, --validate                mettre à jour l'horodatage de l'utilisateur sans exécuter de commande
  --                            arrêter de traiter les arguments en ligne de commande

Pour vous connecter en tant que root via votre utilisateur :

sudo su -

ou :

sudo -i

Exécuter une commande administrative avec les droits root sous sudo :

sudo cmd_admin

exemple :

sudo apt update

Exécuter une commande avec sudo en choisissant votre utilisateur :

sudo -u tom fdisk -l

exécute la commande fdisk -l via l'utilisateur tom avec des droits root.

Vous connectez en tant que root en spécifiant un shell Unix installé :

sudo -s tcsh

vous connectes en root avec le shell tcsh.

Terminer une session sudo, pour devoir retaper le mot de passe de votre utilisateur après une nouvelle commande sudo :

sudo -k
Il existe encore bon nombres d'options pour la commande sudo, je vous laisse plonger dans le man de la commande.
  • wiki/os/gnu_linux/tutos/admin/sudo.txt
  • Dernière modification : 2025/04/09 17:52
  • de Thibault Seguin