Sudo (Français)

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.

É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.

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 .

Consultez pour obtenir une liste d'options (analysées à partir du code source de la version 1.8.7) dans un format optimisé pour .

Consultez 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 . Il doit toujours être édité avec la commande . La commande visudo verrouille le fichier , 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 .

L'éditeur par défaut de visudo est vi. Le paquet sudo est compilé avec et respecte l'utilisation des variables , et . n'est pas utilisée lorsque est définie.

Pour établir nano comme éditeur de visudo pour la durée de la session actuelle du shell, exportez ; 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 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 à (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  :

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  :

Defaults:USER_NAME      !authenticate

Active les commandes explicitement définies uniquement pour l'utilisateur sur l'hôte  :

USER_NAME HOST_NAME=/usr/bin/halt,/usr/bin/poweroff,/usr/bin/reboot,/usr/bin/pacman -Syu

Activer les commandes explicitement définies uniquement pour l'utilisateur sur l'hôte 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 est disponible à . Sinon, consultez le pour des informations détaillées.

Permissions par défaut des fichiers Sudoers

Le propriétaire et le groupe du fichier 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 est un caractère de cloche littéral. Par exemple, dans vim, insérer en utilisant la séquence , ou dans nano, .

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  :

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 à  :

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 (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 . Le rafraîchissement du délai d'attente peut être effectué avec . (alors que révoque immédiatement).

Vous pouvez automatiser cette opération en ajoutant ce qui suit à votre  :

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 , 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 à  :

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 (utilisateur cible, par défaut root) ou à 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.

Le compte peut être verrouillé via  :

# passwd -l root

Une commande similaire permet de déverrouiller root.

$ sudo passwd -u root

Vous pouvez également éditer et remplacer le mot de passe chiffré de root par "!":

root:!:12345::::: :

Pour réactiver la connexion de root :

$ sudo passwd root

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 et . 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 .

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 . 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 ;
  • 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 pour plus de détails.

Les fichiers du répertoire 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.

Édition de fichiers

ou  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 .

Notez que vous pouvez définir l'éditeur sur n'importe quel programme, donc par exemple on peut utiliser 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 avec visudo.

Lors de la saisie d'un mot de passe incorrect, ceci remplacera le message 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 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.

gollark: `-O3` for performance.
gollark: `cat src/*.c > /tmp/no-race-conditions-here; gcc /tmp/no-race-conditions-here -O3`
gollark: Okay, FINE.
gollark: `cat src/*.c | gcc /dev/stdin`
gollark: `cat`
This article is issued from Archlinux. The text is licensed under Creative Commons - Attribution - Sharealike. Additional terms may apply for the media files.