====== La commande sudo comme alternative au compte root ======
Logo de **sudo** : {{ :wiki:os:gnu_linux:tutos:admin:sudo_logo.png?nolink&120 |}}
===== Présentation 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**.
===== Installation de sudo =====
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
===== Lié un utilisateur à sudo =====
==== Par la méthode traditionnel ====
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//.
==== En passant par le groupe utilisateur sudo ====
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.
===== Utilisation de la commande sudo =====
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
==== Quelques commandes sudo ====
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.