Sudo (Français)

État de la traduction:
Cet article est la version francophone de
Sudo
. Date de la dernière traduction: 2022-10-03. Vous pouvez aider à synchroniser la traduction s'il y a eu des
changements
dans la version anglaise.
Related articles
Users and groups (Français)
su (Français)
doas
Sudo
permet à un administrateur système de déléguer l'autorité pour donner à certains utilisateurs - ou groupes d'utilisateurs - la possibilité d'exécuter des commandes en tant que root ou un autre utilisateur tout en fournissant une piste d'audit des commandes et de leurs arguments.
Sudo est une alternative à
su
pour exécuter des commandes en tant que root. Contrairement à
su
, qui lance un shell root permettant à toutes les autres commandes d'accéder à l'utilisateur root, sudo accorde une élévation temporaire des privilèges à une seule commande. En activant les privilèges root uniquement lorsque cela est nécessaire, l'utilisation de sudo réduit la probabilité qu'une faute de frappe ou un bug dans une commande invoquée ruine le système.
Sudo peut également être utilisé pour exécuter des commandes en tant qu'autres utilisateurs ; en outre, sudo enregistre toutes les commandes et les tentatives d'accès échouées à des fins d'audit de sécurité.
Installation
Installez
le paquet
sudo
.
Utilisation
Pour commencer à utiliser
sudo
en tant qu'utilisateur non privilégié, il doit être correctement configuré. Consultez
#Configuration
.
Pour utiliser
sudo
, il suffit de préfixer une commande et ses arguments par
sudo
et un espace :
$ sudo
cmd
Par exemple, pour utiliser pacman :
$ sudo pacman -Syu
Consultez
sudo(8)
pour plus d'informations.
Configuration
Squelette des paramètres par défaut
sudoers(5) § SUDOERS OPTIONS
liste toutes les options qui peuvent être utilisées avec la commande
Defaults
dans le fichier
/etc/sudoers
.
Consultez
[1]
pour obtenir une liste d'options (analysées à partir du code source de la version 1.8.7) dans un format optimisé pour
sudoers
.
Consultez
sudoers(5)
pour plus d'informations, comme la configuration du délai d'expiration du mot de passe.
Afficher les paramètres actuels
Exécutez
sudo -ll
pour imprimer la configuration sudo actuelle, ou
sudo -lU
user
pour un utilisateur spécifique.
Utilisation de visudo
Le fichier de configuration de sudo est
/etc/sudoers
. Il doit
toujours
être édité avec la commande
visudo(8)
. La commande
visudo
verrouille le fichier
sudoers
, enregistre les modifications dans un fichier temporaire, et vérifie qu'il n'y a pas d'erreurs de syntaxe avant de le copier dans
/etc/sudoers
.
Attention
Il est impératif que le fichier
sudoers
soit exempt d'erreurs de syntaxe ! Toute erreur rend sudo inutilisable. Il faut
toujours
l'éditer avec
visudo
pour éviter les erreurs.
visudo(8)
prévient que configurer
visudo
pour honorer les variables d'environnement de l'utilisateur pour l'éditeur de son choix peut être une faille de sécurité, puisqu'elle permet à l'utilisateur avec les privilèges de
visudo
d'exécuter des commandes arbitraires en tant que root sans journalisation simplement en définissant cette variable à quelque chose d'autre.
L'éditeur par défaut de
visudo
est
vi
. Le paquet
sudo
est compilé avec
--with-env-editor
et respecte l'utilisation des variables
SUDO_EDITOR
,
VISUAL
et
EDITOR
.
EDITOR
n'est pas utilisée lorsque
VISUAL
est définie.
Pour établir
nano
comme éditeur de
visudo
pour la durée de la session actuelle du shell, exportez
EDITOR=nano
; pour utiliser un éditeur différent une seule fois, il suffit de définir la variable avant d'appeler
visudo
:
# EDITOR=nano visudo
Vous pouvez également éditer une copie du fichier
/etc/sudoers
et la vérifier en utilisant
visudo -c
/copy/of/sudoers
. Cela peut s'avérer pratique si vous voulez contourner le verrouillage du fichier avec
visudo
.
Pour changer l'éditeur de façon permanente, consultez
Environment variables#Per user
. Pour changer l'éditeur de choix de façon permanente dans tout le système et seulement pour
visudo
, ajoutez ce qui suit à
/etc/sudoers
(en supposant que
nano
est votre éditeur préféré) :
# Réinitialiser l'environnement par défaut
Defaults      env_reset
# Définir l'ÉDITEUR par défaut à la version restreinte de nano, et ne pas autoriser visudo à utiliser EDITOR/VISUAL.
Defaults      editor=/usr/bin/rnano, !env_editor
Exemples d'entrées
Pour permettre à un utilisateur d'obtenir tous les privilèges de root lorsqu'il fait précéder une commande de
sudo
, ajoutez la ligne suivante :
USER_NAME   ALL=(ALL:ALL) ALL
Pour permettre à un utilisateur d'exécuter toutes les commandes comme n'importe quel utilisateur mais uniquement sur la machine dont le nom d'hôte est
HOST_NAME
:
USER_NAME   HOST_NAME=(ALL:ALL) ALL
Pour permettre aux membres du groupe
wheel
d'accéder à sudo :
%wheel ALL=(ALL:ALL) ALL
Astuce
Lors de la création de nouveaux administrateurs, il est souvent souhaitable d'activer l'accès sudo pour le groupe
wheel
et
ajouter l'utilisateur à ce groupe
, car par défaut
Polkit
traite les membres du groupe
wheel
comme des administrateurs. Si l'utilisateur n'est pas membre du groupe
wheel
, les logiciels utilisant Polkit peuvent demander à s'authentifier en utilisant le mot de passe root au lieu du mot de passe utilisateur.
Pour désactiver la demande de mot de passe pour l'utilisateur
USER_NAME
:
Attention
Cela permettra à tout processus s'exécutant sous votre nom d'utilisateur d'utiliser sudo sans demander la permission.
Defaults:USER_NAME      !authenticate
Active les commandes explicitement définies uniquement pour l'utilisateur
USER_NAME
sur l'hôte
HOST_NAME
:
USER_NAME HOST_NAME=/usr/bin/halt,/usr/bin/poweroff,/usr/bin/reboot,/usr/bin/pacman -Syu
Note
L'option la plus personnalisée doit être placée à la fin du fichier, car les lignes suivantes remplacent les précédentes. En particulier, cette ligne doit se trouver après la ligne
%wheel
si votre utilisateur fait partie de ce groupe.
Activer les commandes explicitement définies uniquement pour l'utilisateur
USER_NAME
sur l'hôte
HOST_NAME
sans mot de passe :
USER_NAME HOST_NAME= NOPASSWD: /usr/bin/halt,/usr/bin/poweroff,/usr/bin/reboot,/usr/bin/pacman -Syu
Un exemple détaillé de
sudoers
est disponible à
/usr/share/doc/sudo/examples/sudoers
. Sinon, consultez le
sudoers(5)
pour des informations détaillées.
Permissions par défaut des fichiers Sudoers
Le propriétaire et le groupe du fichier
sudoers
doivent tous deux être 0. Les permissions du fichier doivent être définies sur 0440. Ces permissions sont définies par défaut, mais si vous les modifiez accidentellement, vous devez les rétablir immédiatement, sinon sudo échouera.
# chown -c root:root /etc/sudoers
# chmod -c 0440 /etc/sudoers
Trucs et astuces
Désactiver la temporisation de l'invite de mot de passe
Un ennui courant est un processus de longue durée qui s'exécute sur un terminal en arrière-plan quelque part, qui fonctionne avec des permissions normales et ne s'élève que si nécessaire. Cela conduit à une demande de mot de passe sudo qui passe inaperçue et se termine, à ce moment-là le processus meurt et le travail effectué est perdu ou, au mieux, mis en cache. Les conseils les plus courants sont d'activer sudo sans mot de passe ou d'allonger le délai de mémorisation d'un mot de passe par sudo. Ces deux solutions ont des conséquences négatives sur la sécurité. Le délai d'attente de l'"invite" peut également être désactivé et puisque cela ne sert aucun objectif de sécurité raisonnable, ce devrait être la solution ici :
Defaults passwd_timeout=0
Ajouter une cloche de terminal à l'invite de mot de passe
Pour attirer l'attention sur une invite sudo dans un terminal en arrière-plan, les utilisateurs peuvent simplement lui faire renvoyer un
caractère «cloche»
:
Defaults passprompt="^G[sudo] password for %p: "
Notez que le
^G
est un caractère de cloche littéral. Par exemple, dans
vim
, insérer en utilisant la séquence
Ctrl+v
Ctrl+g
, ou dans
nano
,
Alt+v
Ctrl+g
.
Passer des alias
Les alias dans
Zsh
et
Bash
ne sont normalement développés que pour le premier mot d'une commande. Cela signifie que vos alias ne seront normalement pas développés lors de l'exécution de la commande
sudo
. Une façon de faire en sorte que le mot suivant soit développé est de créer un alias pour sudo se terminant par un espace. Ajoutez ce qui suit à votre
fichier de configuration du shell
:
alias sudo='sudo '
zshmisc(1) § ALIASING
décrit comment cela fonctionne :
Si le texte de remplacement se termine par un espace, le mot suivant dans l'entrée du shell est toujours éligible pour les expansions d'alias.
De même que
bash(1) § ALIASES
:
Si le dernier caractère de la valeur de l'alias est un espace, alors le mot de commande suivant l'alias est également vérifié pour l'expansion d'alias.
Désactiver un sudo par terminal
Attention
Cela laissera n'importe quel processus utiliser votre session sudo.
Si vous êtes gêné par les valeurs par défaut de sudo qui vous obligent à entrer votre mot de passe chaque fois que vous ouvrez un nouveau terminal, définissez
timestamp_type
à
global
:
Defaults timestamp_type=global
Réduire le nombre de fois où vous devez taper un mot de passe
Si vous êtes agacé par le fait de devoir saisir à nouveau votre mot de passe toutes les 5 minutes (valeur par défaut), vous pouvez changer cela en définissant une valeur plus longue pour
timestamp_timeout
(en minutes) :
Defaults timestamp_timeout=10
Si vous utilisez beaucoup de commandes sudo à la suite, il est plus logique de rafraîchir le délai d'attente à chaque fois que vous utilisez sudo que de
d'augmenter
timestamp_timeout
. Le rafraîchissement du délai d'attente peut être effectué avec
sudo -v
. (alors que
sudo -K
révoque immédiatement).
Vous pouvez automatiser cette opération en ajoutant ce qui suit à votre
.bashrc
:
alias sudo='sudo -v ; sudo '
Il est également possible d'utiliser une fonction bash ; pour plus de détails, consultez
stackexchange
.
Variables d'environnement
Si vous avez beaucoup de variables d'environnement, ou si vous exportez vos paramètres de proxy via
export http_proxy="..."
, lorsque vous utilisez sudo, ces variables ne sont pas transmises au compte root, sauf si vous exécutez sudo avec l'option
-E
.
$ sudo -E pacman -Syu
La méthode recommandée pour préserver les variables d'environnement est de les ajouter à
env_keep
:
/etc/sudoers
Défauts env_keep += "ftp_proxy http_proxy https_proxy no_proxy"
Mot de passe root
Les utilisateurs peuvent configurer sudo de manière à ce qu'il demande le mot de passe root au lieu du mot de passe utilisateur en ajoutant
targetpw
(utilisateur cible, par défaut root) ou
rootpw
à la ligne Defaults de
/etc/sudoers
:
Defaults targetpw
Pour éviter d'exposer votre mot de passe root aux utilisateurs, vous pouvez le restreindre à un groupe spécifique :
Defaults:%wheel targetpw
%wheel ALL=(ALL) ALL
Désactiver la connexion root
Les utilisateurs peuvent souhaiter désactiver la connexion root. Sans root, les attaquants doivent d'abord deviner un nom d'utilisateur configuré comme sudoer ainsi que le mot de passe de l'utilisateur. Consultez par exemple
OpenSSH#Deny
.
Attention
Prenez garde, vous pouvez vous bloquer en désactivant la connexion root. Sudo n'est pas automatiquement installé et sa configuration par défaut ne permet ni l'accès root sans mot de passe ni l'accès root avec votre propre mot de passe. Assurez-vous qu'un utilisateur est correctement configuré comme sudoer
avant
de désactiver le compte root !
Si vous avez modifié votre fichier sudoers pour utiliser rootpw par défaut, alors ne désactivez pas l'accès root avec l'une des commandes suivantes !
Si vous êtes déjà coincé, consultez
Password recovery
pour obtenir de l'aide.
Le compte peut être verrouillé via
passwd
:
# passwd -l root
Une commande similaire permet de déverrouiller root.
$ sudo passwd -u root
Vous pouvez également éditer
/etc/shadow
et remplacer le mot de passe chiffré de root par "!":
root:!:12345::::: :
Pour réactiver la connexion de root :
$ sudo passwd root
Astuce
Pour obtenir une invite interactive pour root, même après avoir désactivé le compte
root
, utilisez
sudo -i
.
kdesu
kdesu peut être utilisé sous
KDE
pour lancer des applications GUI avec les privilèges de root. Il est possible que par défaut, kdesu essaie d'utiliser su même si le compte root est désactivé. Heureusement, on peut dire à kdesu d'utiliser sudo au lieu de su. Créez/éditez le fichier
~/.config/kdesurc
:
[super-user-command]
super-user-command=sudo
ou utilisez la commande suivante :
$ kwriteconfig5 --file kdesurc --group super-user-command --key super-user-command sudo
Exemple de durcissement avec sudo
Disons que vous créez 3 utilisateurs : admin, devel, et joe. L'utilisateur "admin" est utilisé pour journalctl, systemctl, mount, kill et iptables ; "devel" est utilisé pour installer des paquets et éditer des fichiers de configuration ; et "joe" est l'utilisateur avec lequel vous vous connectez. Pour permettre à "joe" de redémarrer, d'arrêter et d'utiliser netctl, nous ferions ce qui suit :
Éditez
/etc/pam.d/su
et
/etc/pam.d/su-l
. Demandez à l'utilisateur d'être dans le groupe wheel, mais n'y mettez personne.
#%PAM-1.0
auth            sufficient      pam_rootok.so
# Uncomment the following line to implicitly trust users in the "wheel" group.
#auth           sufficient      pam_wheel.so trust use_uid
# Uncomment the following line to require a user to be in the "wheel" group.
auth            required        pam_wheel.so use_uid
auth            required        pam_unix.so
account         required        pam_unix.so
session         required        pam_unix.so
Limite la connexion SSH au groupe 'ssh'. Seul "joe" fera partie de ce groupe.
# groupadd -r ssh
# gpasswd -a joe ssh
# echo 'AllowGroups ssh' >> /etc/ssh/sshd_config
Redémarrez
sshd.service
.
Ajouter des utilisateurs à d'autres groupes.
# for g in réseau puissance ;do ;gpasswd -a joe $g ;done
# for g in network power storage ;do ;gpasswd -a admin $g ;done
Définissez les permissions sur les configs pour que devel puisse les modifier.
# chown -R devel:root /etc/{http,openvpn,cups,zsh,vim,screenrc}
Cmnd_Alias  POWER       =   /usr/bin/shutdown -h now, /usr/bin/halt, /usr/bin/poweroff, /usr/bin/reboot
Cmnd_Alias  STORAGE     =   /usr/bin/mount -o nosuid\,nodev\,noexec, /usr/bin/umount
Cmnd_Alias  SYSTEMD     =   /usr/bin/journalctl, /usr/bin/systemctl
Cmnd_Alias  KILL        =   /usr/bin/kill, /usr/bin/killall
Cmnd_Alias  PKGMAN      =   /usr/bin/pacman
Cmnd_Alias  NETWORK     =   /usr/bin/netctl
Cmnd_Alias  FIREWALL    =   /usr/bin/iptables, /usr/bin/ip6tables
Cmnd_Alias  SHELL       =   /usr/bin/zsh, /usr/bin/bash
%power      ALL         =   (root)  NOPASSWD: POWER
%network    ALL         =   (root)  NETWORK
%storage    ALL         =   (root)  STORAGE
root        ALL         =   (ALL)   ALL
admin       ALL         =   (root)  SYSTEMD, KILL, FIREWALL
devel	    ALL         =   (root)  PKGMAN
joe	    ALL         =   (devel) SHELL, (admin) SHELL
Avec cette configuration, vous n'aurez presque jamais besoin de vous connecter en tant qu'utilisateur root.
"joe" peut se connecter au WiFi de sa maison.
$ sudo netctl start home
$ sudo poweroff
"joe" ne peut pas utiliser netctl comme un autre utilisateur.
$ sudo -u admin -- netctl start home
Lorsque "Joe" a besoin d'utiliser journalctl ou de tuer un processus en cours, il peut passer à cet utilisateur.
$ sudo -i -u devel
$ sudo -i -u admin
Mais "joe" ne peut pas passer à l'utilisateur root.
$ sudo -i -u root
Si "Joe" veut démarrer une session gnu-screen en tant qu'administrateur, il peut le faire comme suit :
$ sudo -i -u admin
[admin]$ chown admin:tty `echo $TTY`
[admin]$ screen
Configurer sudo en utilisant les fichiers de dépôt dans /etc/sudoers.d
sudo
analyse les fichiers contenus dans le répertoire
/etc/sudoers.d/
. Cela signifie qu'au lieu de modifier
/etc/sudoers
, vous pouvez changer les paramètres dans des fichiers autonomes et les déposer dans ce répertoire. Cela présente deux avantages :
Il n'est pas nécessaire d'éditer un fichier
sudoers.pacnew
;
S'il y a un problème avec une nouvelle entrée, vous pouvez supprimer le fichier en question au lieu de modifier
/etc/sudoers
(mais consultez l'avertissement ci-dessous).
Le format des entrées dans ces fichiers de dépôt est le même que pour
/etc/sudoers
lui-même. Pour les modifier directement, utilisez
visudo -f /etc/sudoers.d/
somefile
. Consultez
sudoers(5) § Inclure d'autres fichiers dans sudoers
pour plus de détails.
Les fichiers du répertoire
/etc/sudoers.d/
sont analysés par ordre lexicographique, les noms de fichiers contenant
.
ou
~
sont ignorés. Pour éviter les problèmes de tri, les noms de fichiers doivent commencer par deux chiffres, par exemple
01_foo
.
Note
L'ordre des entrées dans les fichiers de dépôt est important : veillez à ce que les déclarations ne s'écrasent pas entre elles.
Attention
Les fichiers de
/etc/sudoers.d/
sont tout aussi fragiles que
/etc/sudoers
lui-même : tout fichier mal formaté empêchera
sudo
de fonctionner.  Ainsi, pour la même raison, il est fortement conseillé d'utiliser
visudo
Édition de fichiers
sudo -e
ou
sudoedit
vous permet de modifier un fichier en tant qu'autre utilisateur tout en exécutant l'éditeur de texte en tant que votre utilisateur.
Ceci est particulièrement utile pour éditer des fichiers en tant que root sans élever les privilèges de votre éditeur de texte, pour plus de détails lisez
sudo(8) § e
.
Notez que vous pouvez définir l'éditeur sur n'importe quel programme, donc par exemple on peut utiliser
meld
pour gérer les fichiers
pacnew
:
$ SUDO_EDITOR=meld sudo -e /etc/
fichier
{,.pacnew}
Activer les insultes
Les utilisateurs peuvent activer l’œuf de Pâques des insultes dans sudo en ajoutant la ligne suivante dans le fichier
sudoers
avec
visudo
.
/etc/sudoers
Defaults insults
Lors de la saisie d'un mot de passe incorrect, ceci remplacera le message
Sorry, try again.
par des insultes humoristiques.
Dépannage
Problème de SSH sans TTY
SSH n'alloue pas de tty par défaut lors de l'exécution d'une commande distante. Sans un tty alloué, sudo ne peut pas empêcher l'affichage du mot de passe. Vous pouvez utiliser l'option
-t
de ssh pour le forcer à allouer un tty.
L'option
Defaults requiretty
ne permet à l'utilisateur d'exécuter sudo que s'il dispose d'un tty.
# Désactivez "ssh hostname sudo <cmd>", car il affichera le mot de passe en clair. Vous devez exécuter "ssh -t hostname sudo <cmd>".
#
#Defaults requiretty
Permissive umask
Sudo fusionnera la valeur
umask
de l'utilisateur avec son propre umask (qui a la valeur 0022 par défaut). Cela empêche sudo de créer des fichiers avec des permissions plus ouvertes que celles autorisées par l'umask de l'utilisateur. Bien qu'il s'agisse d'une valeur par défaut saine si aucun umask personnalisé n'est utilisé, cela peut conduire à des situations où un utilitaire exécuté par sudo peut créer des fichiers avec des permissions différentes de celles de l'utilisateur root. Si des erreurs surviennent, sudo fournit un moyen de corriger l'umask, même si l'umask souhaité est plus permissif que celui que l'utilisateur a spécifié. L'ajout de cette option (en utilisant
visudo
) annulera le comportement par défaut de sudo :
Defaults umask = 0022
Defaults umask_override
Ceci définit l'umask de sudo sur l'umask par défaut de root (0022) et annule le comportement par défaut, en utilisant toujours l'umask indiqué, quel que soit l'umask défini par l'utilisateur.