Differences between revisions 17 and 19 (spanning 2 versions)
Revision 17 as of 2019-10-18 21:21:50
Size: 12220
Editor: vauss
Comment: sync with English version
Revision 19 as of 2020-02-09 20:34:39
Size: 12700
Editor: vauss
Comment: sync with English version
Deletions are marked like this. Additions are marked like this.
Line 27: Line 27:
Pour qu'un utilisateur exécute `sudo`, il faut qu'il appartienne au groupe `sudo`. Dans sa configuration par défaut Debian permet aux utilisateurs dans le groupe `sudo` d'exécuter n'importe quelle commande via `sudo`.
Line 203: Line 203:
=== Personnaliser le délai d'expiration du cache des informations d'identification ===

Par défaut, après avoir demandé un mot de passe, vos informations d'identification sont mises en cache par `sudo` durant 15 minutes. Vous pouvez changer cela en utilisant la commande {{{visudo}}} et personnaliser le délai d'expiration pour un utilisateur spécifique :

~-{{{#!plain
Defaults:foobar timestamp_timeout=30
}}}-~

Translation(s): العربية - English - Español - Français - Italiano - Русский


Root > sudo


Sudo (Parfois considéré comme l'abréviation de Super-user do) est un programme dont l'objectif de permettre à l'administrateur du système d'autoriser certains utilisateurs à exécuter des commandes en tant que superutilisateur (ou qu'un autre utilisateur). La philosophie qui sous-tend cela est de donner aussi peu que possible de droits, mais de permettre quand même aux utilisateurs de faire leur travail. Sudo est aussi un moyen efficace d'enregistrer qui a exécuté quelle commande et quand.

Pour ajouter l'utilisateur toto au groupe sudo :

  • # adduser toto sudo

Une fois que l'utilisateur a été ajouté au nouveau groupe, il doit se déconnecter puis se reconnecter pour que l'appartenance au nouveau groupe soit effective. En effet, l'appartenance à un groupe est accordée à un utilisateur au moment de sa connexion. Une des erreurs les plus communes est que les utilisateurs se rajoutent à un groupe mais oublient de se déconnecter puis de se reconnecter : ils rencontrent alors des problèmes parce que leur appartenance n'est pas effective. On peut vérifier les groupes auxquels on appartient avec la commande id.

Pourquoi sudo ?

Utiliser sudo est meilleur (plus sûr) que d'ouvrir une session en tant que superutilisateur pour un certain nombre de raisons dont :

  • Personne n'a à connaitre le mot de passe du superutilisateur (sudo demande le mot de passe de l'utilisateur courant). Des droits supplémentaires peuvent être accordés temporairement à des utilisateurs puis retirés sans qu'il soit besoin de changer de mot de passe.

  • Il est facile de n'exécuter que les commandes qui nécessitent des droits spéciaux avec sudo et le reste du temps, on travaille en tant qu'utilisateur non-privilégié, ce qui réduit les dommages que l'on peut commettre par erreur.

  • Contrôler et enregistrer : quand une commande sudo est exécutée, le nom de l'utilisateur et la commande sont enregistrés.

Pour toutes les raisons ci-dessus, la possibilité de basculer en superutilisateur en utilisant sudo -i (ou sudo su) est habituellement désapprouvé parce que cela annule les avantages cités ci-dessus.

Utilisateurs et sudo

Dans sa configuration par défaut Debian permet aux utilisateurs dans le groupe sudo d'exécuter n'importe quelle commande via sudo.

Vérifier l'appartenance au groupe sudo

Une fois connecté comme utilisateur, vous pouvez vérifier si l'utilisateur appartient ou non au groupe sudo en utilisant soit la commande id soit la commande groups. Par exemple, l'utilisateur foo tapera

  • $ groups

et obtiendra en sortie

  • foo sudo

Si sudo n'est pas présent à l'affichage en sortie, l'utilisateur n'appartient pas à ce groupe. De même, la commande id, plus complexe, devrait sortir quelque chose comme

  • uid=1001(foo) gid=1001(foo) groups=1001(foo),27(sudo)

Ajouter un utilisateur existant à partir de la ligne de commande

Pour ajouter l'utilisateur foo au groupe sudo :

  • $ sudo adduser foo sudo

Autrement, vous pouvez d'abord vous connecter comme superutilisateur (par exemple, sudo su -) et ensuite exécuter les mêmes commandes sans le préfixe sudo :

  • # adduser foo
    # adduser foo sudo

Après s'être ajouté à un nouveau groupe, l'utilisateur doit se déconnecter et se reconnecter afin que le changement pour le nouveau groupe soit effectif. C'est une erreur assez répandue de s'ajouter à un groupe mais de ne pas ensuite se déconnecter et reconnecter, ce qui occasionne des problèmes car le groupe n'est pas encore assigné ; vérifiez l'appartenance aux groupes.

Créer des utilisateurs avec sudo

Vous pouvez également créer des utilisateurs avec l'appartenance au groupe sudo :

Créer un nouvel utilisateur pendant l'installation de l'OS

Depuis Squeeze, si vous donnez au superutilisateur (root) un mot de passe vide durant l'installation, sudo sera installé et le premier utilisateur sera capable de l'utiliser pour obtenir l'accès du superutilisateur (actuellement, l'utilisateur sera ajouté au groupe sudo). Le système configurera également gksu et aptitude pour utiliser sudo. Vous devriez toujours [#Vérifier_l'appartenance_au_groupe_sudo|vérifiez l'appartenance aux groupes]] après vous être connecté comme l'utilisateur de l'installation.

Créer un nouvel utilisateur à partir de la ligne de commande

Un utilisateur qui est déjà membre du groupe sudo peut créer un autre utilisateur (par exemple foo) comme membre du groupe sudo à partir de la ligne de commande :

  • $ sudo adduser foo -G sudo

(ou connectez-vous d'abord en tant que superutilisateur comme dans la section précédente). Vous devez alors vous connecter en tant qu'utilisateur nouvellement créé et vérifiez l'appartenance aux groupes.

Aperçu de configuration

Maintenant, si vous souhaitez autoriser certains utilisateurs à exécuter certains programmes, voici un exemple rapide (pour plus d'informations, lisez le manuel).

# /etc/sudoers
#
# This file MUST be edited with the 'visudo' command as root.
#
# See the man page for details on how to write a sudoers file.
#

Defaults        env_reset
Defaults secure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"

# Host alias specification
User_Alias      MYADMINS = toto

# User alias specification

# Cmnd alias specification
Cmnd_Alias      SHUTDOWN = /sbin/reboot, /sbin/poweroff
Cmnd_Alias      PKGMGMT = /usr/bin/dpkg, /usr/bin/apt-get, /usr/bin/aptitude

# User privilege specification

# Users listed above (MYADMINS) can run package managers and reboot the system.
MYADMINS ALL = PKGMGMT, SHUTDOWN

# Allow members of group sudo to execute any command
%sudo ALL=(ALL:ALL) ALL

#Default rule for root.
root    ALL=(ALL) ALL

#includedir /etc/sudoers.d

Problèmes et conseils

PATH non configuré

Voici une erreur classique qui survient dans l'utilisation de sudo pour installer un paquet :

dpkg: warning: 'ldconfig' not found in PATH or not executable.
dpkg: warning: 'start-stop-daemon' not found in PATH or not executable.
dpkg: error: 2 expected programs not found in PATH or not executable.
Note: root's PATH should usually contain /usr/local/sbin, /usr/sbin and /sbin.

Le fichier /etc/sudoers fourni par le paquet contient cette ligne :

Defaults secure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"

Les anciennes versions ne contenaient pas cette ligne. Dans le cas où vous auriez modifié le fichier local /etc/sudoers (et beaucoup le font) et puis, lors de la mise à jour, conservé la version modifiée en local, alors cette ligne est absente. Le fichier ne modifie plus votre PATH quand vous utilisez sudo. Le résultat le plus probable est que le PATH n'est pas configuré comme il faut et donc il n'inclut pas les répertoires systèmes. Pour corriger cela, il faut intégrer vos changements locaux au nouveau fichier /etc/sudoers installé par le paquet. Une autre solution est de placer vos changements locaux dans un nouvel emplacement dans /etc/sudoers.d/ sous la forme d'un fichier qui doit se nommer /etc/sudoers.d/local-sudoers. Voir 639841 pour plus de détails.

Désolé, l'utilisateur toto n'est pas autorisé à exécuter la commande ...

Une session classique se déroule comme ceci :

  • $ sudo test
    
    We trust you have received the usual lecture from the local System
    Administrator. It usually boils down to these three things:
    
        #1) Respect the privacy of others.
        #2) Think before you type.
        #3) With great power comes great responsibility.
    
    [sudo] password for toto: 
    Sorry, user toto is not allowed to execute '/usr/bin/test' as root on localhost.

Ce message signifie exactement ce qu'il dit : l'utilisateur qui est en fonction n'est pas autorisé à exécuter la commande donnée sur cette machine. Une raison possible qui peut introduire une confusion est que l'administrateur a seulement ajouté l'utilisateur toto à un groupe privilégié - mais vous utilisez encore une vieille session qui n'a pas l'information de la nouvelle appartenance au groupe et donc qui n'a pas les nouveaux droits pour se servir de sudo. Dans ce cas, l'utilisateur est habituellement prévenu qu'il doit quitter totalement la session puis se reconnecter, bien qu'il soit parfois possible de s'en sortir en exécutant la commande pour « se reconnecter à chaud » avec su - $USER.

La directive inclue

Le fichier /etc/sudoers standard à partir de la version 1.8.2-1 de Wheezy se termine avec la ligne :

  •  #includedir /etc/sudoers.d

Cela permet à d'autres paquets de fournir des bouts de code dans /etc/sudoers.d/<nom de paquet> qui modifient la configuration de sudo. On peut croire qu'il est nécessaire de modifier la ligne pour retirer le caractère # initial (le dièse), mais non, le '#' fait partie de la commande !

sudoers est en lecture seule

Oui, le fichier /etc/sudoers est intentionnellement en lecture seule, même pour le superutilisateur !

L'explication que l'on donne habituellement est que cette configuration est faite pour que seuls les administrateurs puissent modifier le fichier et cela seulement avec la commande visudo. Néanmoins, cette théorie ne tient pas la route. Être en mode 0440 ne sert à rien pour empêcher de faire sudo nano /etc/sudoers - la plupart des éditeurs de texte vous laisseront modifier le fichier sans râler à cause de la marque lecture seule. En plus, chaque fois que vous massacrez le fichier /etc/sudoers, la réparation est aussi simple que la commande su -c visudo, ce qui n'est rien comparé à la procédure de récupération qu'il faut mettre en œuvre si vous 'cassez' un fichier comme /etc/inittab (mode 0644). Donc, s'il y a une bonne raison pour ces droits non-orthodoxes, elle reste mystérieuse - toute information est bienvenue.

Mauvais HOME (et mauvaise configuration du profil)

Si on rencontre un problème quand on utilise sudo dans son shell et que son $HOME (et la configuration du profil) ne fonctionne pas comme prévu parce que votre nouveau HOME est /root, il faut savoir que dans Squeeze la configuration par défaut de sudo rétablit toutes les variables d'environnement. Pour rétablir l'ancien comportement qui préservait les variables d'environnement du $HOME de l'utilisateur, il faut ajouter ceci à son fichier de configuration /etc/sudoers :

Defaults env_keep += HOME

Demander le mot de passe du compte administrateur (« root »)

Si vous souhaitez que le mot de passe du compte administrateur (« root ») soit demandé à chaque utilisation de sudo à la place du mot de passe de l'utilisateur, ajoutez la ligne :

Defaults   rootpw

Aucune invite de mot de passe pour l'utilisateur sudo

Si vous voulez que les membres du groupe sudo exécutent des commandes sans mot de passe, ajoutez la ligne :

%sudo ALL=(ALL) NOPASSWD: ALL

Pour plus d'informations, lisez la liste originale des changements de la version 1.7.4.

Personnaliser le délai d'expiration du cache des informations d'identification

Par défaut, après avoir demandé un mot de passe, vos informations d'identification sont mises en cache par sudo durant 15 minutes. Vous pouvez changer cela en utilisant la commande visudo et personnaliser le délai d'expiration pour un utilisateur spécifique :

Defaults:foobar timestamp_timeout=30

Voir aussi