Root et Sudo: GNU/Linux fort en sécurité

tags:

Root et Sudo ne sont pas des barbares. La base de GNU/Linux et, dans un certaine mesure, des systèmes Unix, est la séparation des comptes entre un administrateur qui peut tout faire et un utilisateur qui est restreint à son répertoire personnel. Question de sécurité du système.

Root, utilisateur et sudo : les bases

Traditionnellement, lors de l'installation d'une distribution de Linux, on crée au moins deux comptes :

  1. Le compte root dont le nom est root et à qui on attribue un mot de passe. C'est le Superutilisateur ou l'administrateur du système.
  2. Un compte utilisateur auquel on peut attribuer n'importe quel nom («tuxou» par exemple).

Une même personne, qui est alors l'administrateur du système, peut créer plusieurs comptes dits «utilisateurs» pour différentes personnes partageant le même ordinateur ou un réseau d'ordinateurs.

Après l'installation il est bien sûr possible de créer un autre compte ou plusieurs comptes utilisateurs :

  • soit pour un ou plusieurs utilisateurs
  • soit même pour des utilisations différentes que l'on veut tenir séparées

On pourrait ainsi créer en plus du compte utilisateur principal un compte pour surfer et un compte pour utiliser Apache en local.

Il est vivement conseillé de créer autant de comptes qu'il y a d'utilisateurs. GNU/Linux est vraiment fait pour le partage d'un ordinateur ou de plusieurs ordinateurs (liés en un réseau). Ainsi, chaque utilisateur dispose de son propre répertoire indépendant et protégé qui, par défaut, n'est accessible qu'à lui-même et bien sûr au root. Ainsi l'utilisateur tuxou ne peut aller supprimer ou modifier les fichiers de l'utilisateur zozo. Tuxou peut faire aussi toutes les modifications dans Gnome (sur son bureau : menus, couleurs, polices, images) sans importuner zozo qui, lui, est libre d'en faire à sa tête.

Une même personne peut être à la fois l'administrateur et l'utilisateur ; cela ne change rien : les deux comptes sont séparés par leur nom, parfois par leur mot de passe et leurs fonctions.

  • Sur le compte root l'administrateur peut tout faire (attention à ce que vous faites !).
  • Sur le compte utilisateur «tuxou» ou «zozo» l'utilisateur est limité à son répertoire respectif. Tuxou ne peut agir que sur son répertoire /home/tuxou et zozo ne peut agir que sur /home/zozo.

Ni zozo ni tuxou ne peuvent installer de logiciels pour l'ensemble du système mais ils peuvent (contrairement à ce qui se passe sous M$Windows et sous Mac OS X dans certains cas) installer tous les logiciels qu'ils veulent dans leur répertoire respectif — installation de fichiers binaires .tar.gz. — mais l'installation par APT ou Synaptic leur est impossible. Ces logiciels ne seront ainsi accessibles que par l'utilisateur qui les a installés puisqu'ils sont installés dans le répertoire d'un utilisateur précis.

Une même personne qui a installé la distribution GNU/Linux peut aussi utiliser le compte root, et deux comptes utilisateurs ou plus. Elle peut décider que «tuxounet» est le compte qu'elle utilise pour surfer sur le Web, «tuxou» son compte pour toutes les autres opérations (écrire un roman, apprendre l'Esperanto, dessiner, etc.).

La séparation des comptes est un gage de sécurité :

  • Tuxou ne peut pas modifier le système ni le répertoire d'un autre utilisateur.
  • Quand tuxou surfe et au cas où une attaque d'un sale pirate se produirait, seul le répertoire de tuxou serait touché. C'est pour cette raison qu'un compte (exemple : tuxounet) juste pour surfer peut être une bonne idée.

Comment un utilisateur peut-il devenir «Superutilisateur» ?

Une personne nommée Pilou a installé une distribution GNU/Linux et a créé deux comptes utilisateur : un compte «tuxou» et un compte «zozo».

Il est décidé que tuxou aura le droit d'administrer la machine parce que Pilou n'était là que pour aider tuxou. Pilou lui donne le mot de passe de root et toutes les instructions nécessaires pour administrer le système.

Pilou est parti(e). Quand tuxou veut mettre à jour un logiciel installé sur le système (par défaut quand une distribution comprend de nombreux logiciels), il doit se débrouiller sans Pilou et passer en mode Superutilisateur. Il est déconseillé de quitter le compte tuxou («fermer la session») pour aller sur le compte root dans le cas où ce compte existe car alors le système est ouvert tant que le compte root n'est pas quitté (= «quitter ou fermer la session root»).

Tuxou passe en mode root. Dans une distribution traditionnelle, tuxou ouvre une fenêtre de console (= terminal, xterm) qui affiche cette invite :

tuxou@Debian:~$

À la suite de l'invite, le curseur clignote ou au moins est bien visible sous la forme d'un rectangle noir ou blanc ou autre couleur selon la couleur du fond de la fenêtre de la console.

Tuxou tape su et valide en appuyant sur la touche «Entrée» du clavier. Le mot de passe de root est demandé. Rien ne s'affiche sur la fenêtre, pas même des astérisques. Tuxou valide et ainsi est maintenant passé en mode root et peut tout faire, même démolir tout le système, ainsi que les fichiers de zozo.

Après ce passage en mode root, l'invite a changé sur la fenêtre de la console, comme vous le voyez ici :

root@Debian:/home/tuxou #

Pour quitter le mode root et revenir au mode simple utilisateur ne pouvant démolir que son répertoire /home/tuxou, tuxou tape exit et valide sa commande.

Si vous avez utilisé des CDs-Live comme Kaella ou Knoppix, votre compte est créé par défaut sous le nom de «knoppix», sans mot de passe. Voir dernière partie pour les détails.

Explications complètes des invites

Détail de l'invite mode simple utilisateur

tuxou@Debian:~$

  • tuxou = identité de l'utilisateur
  • @Debian ou @ubuntu : nom de l'ordinateur qui par défaut est celui de la distribution GNU/Linux — le nom peut être modifié en mode root.
  • le tilde ~ indique le répertoire de l'utilisateur indiqué par le premier nom de l'invite (ici tuxou) : on se trouve donc dans le répertoire /home/tuxou
  • le signe $ indique qu'on est en mode simple utilisateur.

Détail de l'invite en mode root

root@Debian:/home/tuxou #
Vous voyez que, par défaut, tuxou qui est passé en mode root se trouve dans son propre répertoire. Le signe dièse # rappelle que tuxou est en mode root.

Tuxou peut alors taper toutes les commandes désirées sans devoir retaper le mot de passe mais tant que tuxou n'a pas tapé exit, le système est en mode root, donc ouvert à tous les vents.

Root et Sudo sous Ubuntu

Si vous avez installé Ubuntu ou une variante (Kubuntu, Xubuntu, Ubuntu-studio...), il ne vous a pas été demandé de créer un compte root et un compte d'utilisateur mais seulement un compte d'utilisateur avec un mot de passe.

Le mot de passe du premier utilisateur sera également celui du Superutilisateur. Donc, il n'y a pas deux comptes visibles (un root, un utilisateur) mais un seul par défaut (vous pouvez évidemment rajouter autant de comptes que vous voulez).

En revanche, il y a deux modes, mode Superutilisateur ou root et mode utilisateur et deux manières de passer en mode Superutilisateur (sudo et gksudo ou kdesudo).

sudo

sudo est utilisé pour les commandes qui ne sont accessibles qu'au root ou pour les applications non graphiques.

Exemple : sudo aptitude update (APT est une application non graphique et en plus inaccessible au simple utilisateur).

gksudo

gksudo (pour Ubuntu et Xubuntu, environnement Gnome) ou kdesudo (pour Kubuntu, environnement KDE), est utilisé pour les applications graphiques qui sont accessibles au simple utilisateur.

Exemple : gksudo gedit /etc/apt/sources.list

Gedit est une application graphique (éditeur de texte) qui peut être utilisée par le simple utilisateur et aussi par le Superutilisateur. Ici, le fichier /etc/apt/sources.list ne peut être modifié que par le Superutilisateur.

NB : L'utilisation de gksudo et de kdesudo devrait être valable pour toutes les distributions GNU/Linux si vous avez Gnome ou KDE comme environnement graphique ou si votre environnement utilise GTK, comme Xfce (environnement graphique de Xubuntu).

Exemple détaillé avec sudo

Pour passer en mode Superutilisateur sous Ubuntu, tuxou tape sudo après l'invite et avant la commande; voici un exemple et le résultat :

tuxou@ubuntu:~$ sudo cp /etc/apt/sources.list . (valider)
Password:     (valider)

Ici tuxou veut copier (= cp) le fichier sources.list du répertoire /etc/apt/ dans son répertoire personnel, qui est signifié par le point à la suite de l'espace.

Puis tuxou valide sa commande en appuyant sur la touche [Entrée]; ici j'ai ajouté «(valider)» pour indiquer cette action. Il ne s'agit pas de taper le mot «valider».

Le résultat de la validation est l'affichage du mot «Password:» ou sa traduction selon la langue de votre GNU/Linux («Mot de passe», par exemple).

Vous tapez votre mot de passe — le mot de passe de root est celui de l'utilisateur créé lors de l'installation d'Ubuntu ; dans notre exemple c'est le mot de passe de tuxou. Le mot de passe de zozo sur le compte zozo ne pourra pas servir à passer en mode root, sauf si on a expressément donné à zozo accès au mode sudo.

Une fois que tuxou a tapé son mot de passe (aucun signe n'est affiché) et a validé, la commande est exécutée.

Puis la console affiche l'invite tuxou@ubuntu:~$, ce qui signifie que tuxou est de nouveau en mode simple utilisateur. Pour exécuter une autre commande accessible à root seul, tuxou tapera de nouveau sudo suivi de la commande puis validera. Le mot de passe ne lui sera pas redemandé si cette action se situe dans les 15 mns suivant la première demande de mot de passe.

Exemple avec gksudo

Lancez le terminal. Exemple de commande :

tuxou@ubuntu:~$ gksudo gedit /etc/apt/sources.list (valider)
Password:     (valider)

Vous voyez qu'ici tuxou veut modifier le fichier /etc/apt/sources.list avec l'éditeur de texte Gedit. Ce fichier est lisible par tuxou comme simple utilisateur mais ne peut être modifié que par le Superadministrateur. Gedit étant une application graphique accessible au simple utilisateur, il est recommandé de passer par gksudo, sous Ubuntu et Xubuntu. Adaptez pour Kubuntu en tapant kdesudo.

Sudo et ses pouvoirs

Le mode sudo a des pouvoirs limités, ce qui est un garde-fou. Dans certains cas très rares, il sera cependant nécessaire de passer en console root. Voici comment accéder à une console root, sous Ubuntu et Xubuntu :
Commande sudo -s à taper dans la console, ce qui vous donne l'invite suivante root@ubuntu:~#. Le répertoire en cours est celui de tuxou.

Ubuntu a fait le choix de sudo pour que les utilisateurs n'aient pas la tentation d'aller sur un compte root sans se rendre compte que c'est une zone dangereuse. Par exemple, il ne faut jamais surfer en étant sur le compte root car le système entier est ouvert. En mode root, vous risquez aussi de détruire des répertoires entiers.

Au moins, en tapant sudo, vous avez conscience de devenir l'administrateur et au pire un quart d'heure plus tard vous n'êtes plus qu'un simple utilisateur. De même, lorsque vous lancez des applications que seul le root peut utiliser, comme Synaptic par exemple (pour installer facilement de nouveaux logiciels ou de nouvelles versions de logiciels déjà installés), une petite boîte («popup window») surgit, vous demandant votre mot de passe.

Ne lancez pas non plus Firefox avec sudo — ce serait curieux puisque l'icône vous tend les bras, si l'on peut dire, et là c'est vous, comme simple utilisateur, qui lancez Firefox d'un clic de souris.

Ubuntu conseille de changer souvent le mot de passe de l'utilisateur qui a accès au sudo.

Venant de Libranet avec un compte et un mot de passe root, ainsi qu'un compte utilisateur, j'ai été d'abord assez mal à l'aise avec sudo qui me demande mon mot de passe d'utilisateur (mais on s'habitue rapidement). Il est évidemment plus facile de se souvenir d'un mot de passe que de deux mais il faut s'habituer à penser que ce sudo est aussi fiable que le traditionnel root.

Pendant les 15 mns qu'il reste actif, ce sudo, que pourrait-il se passer? Pour quitter le mode superutilisateur avant la fin du quart d'heure, vous pouvez taper: sudo -k.

Dernier point : sudo est un Superutilisateur limité par rapport à root ; pour certaines tâches il faut passer par le Root Terminal (voir menu «Applications» > «Système») qui vous demande votre mot de passe et affiche cette invite dans la console :
root@linux:/home/tuxou #

Donner à un autre utilisateur l'accès à sudo

Le compte créé lors de l'installation d'Ubuntu a bien sûr accès à sudo. Si vous créez un nouveau compte, ce ne sera pas le cas. Évitez de toucher au fichier /etc/sudoers. Il suffit de ajouter le nouvel utilisateur au groupe «admin». Imaginons que le compte de votre nouvel utilisateur s'apelle «zozo» ; voici la commande à taper :

sudo adduser zozo admin

Vous pouvez aussi passer par l'application graphique : Menu «Applications» > «Système» > «Utilisateurs et groupes» (pour quelque chose d'approchant) mais c'est beaucoup moins rapide !

Plus d'informations sur la page «RootSudo» du Wiki d'Ubuntu (en) ou la page en français «sudo:generalites» d'Ubuntu-fr.

Root et Sudo : suite

De manière conventionnelle, quelque que soit la manière de passer en mode root, on indique dans la documentation sur GNU/Linux le mode nécessaire pour exécuter telle ou telle commande, par les signes $ et #.

  • $ = mode simple utilisateur
  • # = mode root

Exemple :

$ cd /opt
$ ls
# rm -rf /opt/firefox/

Ici, trois commandes à taper l'une après l'autre en validant chacune d'elles. Chaque commande exécutée (= validée) donne un résultat qui s'affiche ou non dans le terminal. Attention, la troisième commande détruit un répertoire entier, celui où tuxou a installé son Firefox depuis un fichier binaire. Ce n'est sans doute pas votre cas puisque Firefox est déjà installé dans votre Ubuntu et il est mis à jour avec tout le reste.

La première commande est exécutable par tuxou qui a la droit de se déplacer dans le répertoire /opt, par exemple pour afficher ce qu'il contient (2e commande : ls).

La troisième commande ne peut être exécutée que par le Superutilisateur ou en passant en mode root : cette commande supprime tout le répertoire firefox avec tous ses sous-répertoires et fichiers. Cette commande supprime donc l'application Firefox qui a été installée dans /opt à partir d'un fichier TAR.GZ.

Selon votre distribution, vous passerez en mode root par la commande su, ou sudo ou encore gksudo dans la console, ou par une console Root ou encore, dans quelques cas, en tapant sudo -s dans une console.

Sudo n'a pas tout à fait autant de pouvoirs que root. Dans quelques très rares cas, il est nécessaire d'ouvrir une console de Superutilisateur dans une distribution de style «sudo» voire de quitter le compte utilisateur et d'ouvrir une session root.

Même si vous avez accès au mode root par la commande traditionnelle su, vous n'êtes pas censés passer votre temps dans le compte root. Si vous devez faire une opération qui nécessite l'intervention de l'administrateur, vous tapez su dans une console, vous validez, vous tapez le mot de passe (celui-ci n'apparaît pas, même pas sous la forme d'astérisques) ; quand vous avez fini, vous tapez exit pour sortir du mode root et pour retourner comme simple utilisateur avec des droits restreints.

Sudo, au contraire, est utilisé dans les versions Live des distributions comme Knoppix ou Kaella puisque vous ne pouvez pas créer de compte indépendant de celui que le CD-Live vous attribue d'office : knoppix, dans ce cas précis.

Sudo, sous Kaella ou Knoppix, ne vous demande pas de mot de passe. Si vous voulez, par exemple, rétrécir une partition Windows avant d'installer Kaella ou autre, vous pouvez utiliser Qtparted mais vous ne pouvez pas le faire comme simple utilisateur. Vous devez taper dans la console le mot sudo, suivi de la commande, qtparted : voici ce que donne la console :

knoppix@1knoppix$ sudo qtparted

knoppix@1knoppix$ : cette partie s'affiche lorsqu'on lance une console sous Kaella : c'est «l'invite». On tape la commande à la suite de l'invite.

Il existe parfois un terminal en mode Superutilisateur qui se trouve, parfois aussi, au fin fond d'un menu (c'est le cas dans KDE) ou parfois dans le menu ou sous-menu «Outils système». Fouillez bien.

Une distribution comme Ubuntu a choisi de ne pas créer de compte root et utilise sudo pour que l'utilisateur puisse accéder aux tâches de l'administrateur. À l'installation, Ubuntu crée un compte utilisateur dont le mot de passe sera aussi celui du root — c'est vous, bien sûr, qui choisissez votre nom d'utilisateur et votre mot de passe. Voyez, plus haut, la partie consacrée à Ubuntu.

Sudo sous Debian

Il est aussi possible d'utiliser sudo sous Debian. Il faut modifier le fichier /etc/sudoers avec la commande visudo :

# visudo

Il sufit de coller le morceau suivant ou de décommenter les lignes pour obtenir ceci :

# User privilege specification
root    ALL=(ALL) ALL# Members of the admin group may gain root privileges
%admin ALL=(ALL) ALL

Pour vous déplacer dans le fichier, touches de direction, touche Origine et fin pour se déplacer dans une ligne. Pour quitter sans enregistrer vos modifications : touche [Ctrl-X], pour les enregistrer [Ctrl-O] (ça marche avec les lettres minuscules).

Il ne faut oublier d'ajouter tuxou au groupe admin !

Coller ? voyez Copier-coller à la molette.

Aller plus loin

Lors de l'installation de certains logiciels, il est important de réfléchir à cette séparation entre le mode utilisateur et le mode root.

Prenons le cas des Mozilla : vous profitez de Firefox pré-installé dans votre distribution GNU/Linux : vous lancez Firefox la première fois et un profil est créé par défaut dans votre compte personnel (dans notre exemple, /home/tuxou/.mozilla). Ce répertoire est caché par défaut (sécurité) mais peut être affiché par vous, si nécessaire.

Plus tard, quand vous mettez à jour Firefox avec APT ou Synaptic, (en mode root) votre profil dans votre répertoire personnel est conservé.

Imaginons que vous installiez Firefox à partir des fichiers binaires. Vous l'installez en mode root dans /usr/local ou dans /opt pour que d'autres utilisateurs puissent en profiter.

Vous quittez vite le mode root en tapant exit et vous lancez Firefox comme simple utilisateur : en cliquant sur une icône si elle existe ou en tapant dans une console (comme simple utilisateur) :

$/opt/firefox/firefox

Votre profil est alors créé et vous pouvez naviguer sur le Web.

Vous voyez dans cet exemple qu'un même répertoire /opt/firefox est accessible au Superutilisateur et à l'utilisateur mais pas avec les mêmes permissions. Le simple utilisateur ne peut qu'«exécuter» le fichier /opt/firefox/firefox, c'est-à-dire lancer l'application Firefox mais pas «écrire» (= modifier, supprimer des fichiers) dans le répertoire /opt/ ni dans le répertoire /opt/firefox/.

Conventions

N'oubliez pas de lire Conventions pour les commandes GNU/Linux