Chapitre 3. Comment donner certains droits root à un utilisateur (Sudo)

Table des matières
1. Description
2. Pré-requis
3. Installer
4. Configurer
4.1. Fichier de configuration
4.2. Exemple de configuration
5. Utiliser
6. Désinstaller

Tableau 3-1. Evolution de cet article

DateAjout(s) / Modification(s)
20 août 2003Version initiale soumise par Stephane (stephane@cheska.net). Cette version a été relue et modifiée.
27 octobre 2003Relecture.

1. Description

Comme vous l'avez compris en lisant ce guide, un simple utilisateur n'a pas beaucoup de pouvoir sur le système global, ce privilège étant réservé au compte root. Toutefois, l'administrateur lui-même travaille le plus souvent sous un autre compte, principalement pour des raisons de sécurité. A la longue il peut être pénible de devoir utiliser la commande su pour effectuer des opérations brèves comme l'installation d'un programme avec apt-get par exemple. Le programme sudo permet de s'affranchir de cette contrainte et d'exécuter des commandes en tant que root ou qu'un autre utilisateur sans utiliser la commande su. De plus comme sudo permet de logguer tous les évènements, on sait qui a fait quoi et quand.

2. Pré-requis

2.1. Pré-requis théorique

Le principe de la commande su doit être connu. Connaître VI(m) est un plus pour utiliser la commande visudo.

3. Installer

Nous allons installer le paquet sudo :

# apt-get install sudo

4. Configurer

4.1. Fichier de configuration

Toute la configuration se fait par l'intermédiaire d'un seul fichier : /etc/sudoers.

L'édition de /etc/sudoers se fait par une commande spéciale: visudo. Cet éditeur se présente comme VI(m) mais il est optimisé pour sudo. En particulier, vous pouvez utiliser la commande :

# visudo -c

pour contrôler le fichier de configuration et repérer les erreurs de syntaxe.

Voici comment se présente le fichier /etc/sudoers par défaut :

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

# Host alias specification

# User alias specification

# Cmnd alias specification

# User privilege specification

root ALL=(ALL) ALL

On peut voir 4 rubriques après les commentaires :

  • Host alias specification

    Cette section permet de définir des groupes de machines ou réseaux : j'avoue ne pas avoir vraiment cherché, n'en ayant pas l'utilité. En gros, cela veut dire que vous pourrez recopier votre fichier sudoers sur des machines différentes et n'autoriser que certains des droits supplémentaires en fonction de la machine sur laquelle on se trouve.

  • User alias specification

    Cette partie permet de définir des alias pour les utilisateurs auquel sudo va donner des droits particuliers. Par exemple, vous pouvez décider que les utilisateur gaelle, barnabe et chris auront tous des droits identiques dans sudo: alors au lieu de bêtement retaper ces droits, vous pouvez définir un groupe qui les concernera tous les trois. Voici ce que cela donne :

    User_Alias STAFF=gaelle,barnabe,chris

    Désormais, lorsque vous donnerez des droits à STAFF, ce sont Gaelle, Barnabe et Chris qui en bénéficieront.

  • Cmnd alias specification

    Cette partie permet de définir des alias pour les commandes que vont pouvoir exécuter les utilisateurs. En regroupant les commandes, vous pouvez ainsi éviter d'avoir à retaper toute la liste pour tel ou tel utilisateur. Par exemple :

    Cmnd_Alias NET=/bin/ping,/usr/bin/traceroute, /usr/bin/ftp,/usr/bin/nmap

    Désormais, en attribuant la commande NET, vous autorisez le ping, le traceroute, le ftp et le nmap.

  • User privilege specification

    root ALL=(ALL) ALL

    Cette section, la plus importante, permet de donner effectivement les droits à un utilisateur. Vous pouvez remarquer que par défaut une ligne est déjà présente: elle concerne l'utilisateur root qui a droit à tout, partout, tout le temps (pas un scoop: pourquoi root irait utiliser sudo je vous le demande).

    Voyons quand même cette ligne d'un peu plus près:

    • root : Premier argument, il s'agit de l'utilisateur à qui l'on donne des droits sur cette ligne. Bien entendu il peut s'agir d'un User Alias, qui regroupe alors plusieurs users.

    • Le premier ALL : Il s'agit de la machine sur laquelle les droits de la ligne sont valables. Le plus souvent ce n'est pas très important, mais lorsqu'on désire exporter son fichier sudoers sur plusieurs machines, cela devient vraiment un paramètre intéressant (à utiliser avec la directive 'Host alias')

    • Le second ALL : Il s'agit de l'utilisateur dont root prend les droits. Par défaut ce paramètre est root. Mais vous pouvez le spécifier vous-même. Par exemple si vous souhaitez que le user toto dispose des droits de l'utilisateur 'jerome' vous avez une ligne du type:

      toto ALL=(jerome) ALL

      Elle signifie que pour toutes les commandes que va taper toto (avec sudo devant ou après s'être authentifié avec sudo) cumuleront ses droits à lui et ceux de jerome. Plus concrètement il pourra tout détruire dans le /home de Jerome quoi.

    • Le dernier ALL : Ce sont les commandes auxquelles root à droit. On pourrait y mettre des commandes simples espacées de virgules ou alors un groupe de commande comme celui défini dans Cmnd_Alias.

4.2. Exemple de configuration

Reprenons notre fichier de configuration depuis le début, avec notre exemple:

# Host alias specification

# User alias specification
User_Alias STAFF=gaelle,barnabe,chris

# Cmnd alias specification
Cmnd_Alias NET=/bin/ping,/usr/bin/traceroute,/usr/bin/ftp,/usr/bin/nmap

# User privilege specification
root ALL=(ALL) ALL
STAFF ALL=(ALL) NET

Grâce à ce fichier sudoers, les utilisateurs gaelle,barnabe et chris peuvent désormais exécuter des pings, des traceroutes, des transferts FTP et des nmap comme si ils étaient root.

Vous pouvez trouver de nombreux exemples de la syntaxe de sudoers dans la page de manuel (man sudoers) avec les explications correspondantes, et vous verrez que de nombreuses possibilités existent en plus de celles que nous venons de voir.

5. Utiliser

Vous êtes maintenant à même de définir votre politique sudo sur la machine, toutefois pour rester dans le concret, la première utilisation qu'on en fait, c'est d'autoriser son utilisateur à effectuer des opérations sans passer root. Pour cela il suffit d'ajouter la ligne suivante avec visudo :

Cedric ALL=(ALL) NOPASSWD:ALL

Désormais, pour passer root, il suffira à Cédric de taper la commande sudo suivie de la touche "ENTREE". On ne lui réclamera pas de mot de passe à cause de la directive NOPASSWD. Sans cette directive _son_ mot de passe lui serait réclamé (j'insiste: le sien, pas celui du compte root).

Mais il y a une autre manière bien commode d'utiliser la commande: lorsqu'on souhaite effectuer une commande ponctuelle en tant que root, il suffit de faire précéder la commande en question par "sudo". Voici ce que ca donne :

$ sudo rm mp3blaster-3.1.3.tar.gz

Cette commande efface le fichier même s'il est interdit à l'utilisateur de le faire et sans demander de mot de passe ou de confirmation. C'est pourquoi il faut être très prudent quand on utilise sudo, surtout avec la directive :

"NOPASSWD:ALL".

6. Désinstaller

# apt-get remove sudo

AstuceSupprimer toute trace du package précédement installé
 

Lorsque vous décidez de retirer un package de votre Debian GNU/Linux APT n'efface par les fichiers de configuration de ce package. Ceci permet de réinstaller plus rapidement la package. Cependant si vous souhaitez faire table rase et ne plus entendre parler du package, vous pouvez ajouter l'option --purge lors de la suppression.
# apt-get remove --purge <package>