Differences between revisions 6 and 7
Revision 6 as of 2013-12-20 20:16:22
Size: 9512
Editor: Optiplaste
Comment:
Revision 7 as of 2014-04-09 20:12:37
Size: 9500
Comment: may be safer to only allow dedicated commands
Deletions are marked like this. Additions are marked like this.
Line 47: Line 47:
Cmnd_Alias SHUTDOWN = /sbin/shutdown, /sbin/reboot, /sbin/halt Cmnd_Alias SHUTDOWN = /sbin/reboot, /sbin/poweroff

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 ?super-utilisateur (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.

Avec 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 - on peut le vérifier en exécutant la commande groups.

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 super-utilisateur pour un certain nombre de raisons dont :

  • Personne n'a à connaître le mot de passe du super-utilisateur (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 super-utilisateur en utilisant sudo -i (ou sudo su) est habituellement désapprouvé parce que cela annule les avantages cités ci-dessus.

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 no 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 super-utilisateur !

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 super-administrateur

Si vous souhaitez que le mot de passe du super-administrateur soit demandé à chaque utilisation de sudo à la place du mot de passe de l'utilisateur, ajouter la ligne :

Defaults   rootpw

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

Voir aussi