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 :

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 :

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

Pour qu'un utilisateur exécute sudo, il faut qu'il appartienne au groupe 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

et obtiendra en sortie

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

Ajouter un utilisateur existant à partir de la ligne de commande

Pour ajouter l'utilisateur foo au groupe 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 :

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 on installe la tâche Desktop pendant l'installation, cela installe sudo avec une configuration par défaut qui octroie automatiquement les droits d'utiliser sudo pour chacun des membres du groupe sudo. Selon les comptes utilisateurs que l'on configure lors de l'installation, il est possible qu'on ne soit pas ajouté à ce groupe. 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 :

(ou connectez-vous d'abord en tant que superutilisateur comme dans la section précédente). L'auteur de cet article ne connait pas la manière de réaliser cela en une seule commande (autre que ce concaténer les deux commandes avec ;, ce qui n'est pas la même chose).

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 :

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 :

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

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

Voir aussi