ROOT ET SUDO

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 GNU/Linux, on met en place au moins deux comptes :
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.
Un compte utilisateur auquel on peut attribuer n'importe quel nom («X», 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 autre utilisateur ou plusieurs utilisateurs
soit même pour des utilisations différentes que l'on veut tenir séparées
On pourrait ainsi faire, 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 X ne peut
aller supprimer ou modifier les fichiers de l'utilisateur Y. X peut faire aussi toutes les modifications dans Gnome (sur son
bureau : menus, couleurs, polices, images) sans importuner Bob 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 par leurs fonctions.
Sur le compte root l'administrateur peut tout faire (attention à ce que vous faites !)
Sur le compte utilisateur «X» ou «Y» l'utilisateur est limité à son répertoire respectif. X ne peut agir que sur son
répertoire /home/X et Y ne peut agir que sur /home/Y.
Ni Y ni X 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 «Xnet» est le compte qu'elle utilise pour surfer sur le Web, «X» son compte pour toutes les
autres opérations (écrire un roman, créer un site en local, hors connexion, dessiner, etc.).
La séparation des comptes est un gage de sécurité :
Z ne peut pas modifier le système ni le répertoire d'un autre utilisateur.
Quand Z surfe et au cas où une «attaque» d'un sale pirate se produirait, seul le répertoire de Z serait touché. C'est
pour cette raison qu'un compte (exemple : Xnet) juste pour surfer est parfois conseillé.
Comment un utilisateur peut-il devenir «Superutilisateur» ?
Une personne nommée W a installé une distribution GNU/Linux et a mis en place deux comptes utilisateur : un compte «X» et un
compte «Y».
Il est décidé que X aura le droit d'administrer la machine parce que W n'était là que pour aider X. W lui donne le mot
de passe de root et toutes les instructions nécessaires pour administrer le système.
Z est parti. Quand Max 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 W et passer en mode Superutilisateur. Il est déconseillé de quitter le compte
X («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).
X passe en mode root. Dans une distribution traditionnelle, ouvre une fenêtre de console (= terminal, xterm) qui affiche
cette invite :
X@Debian:~$
À la suite de l'invite, le curseur clignote ou non mais il est au moins bien visible sous forme de rectangle noir ou blanc ou
d'une autre couleur.
X 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. Z 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 Bob.
Après ce passage en mode root, l'invite a changé sur la fenêtre du terminal ; la voici :
root@Debian:/home/X #
Pour quitter le mode root et revenir au mode simple utilisateur ne pouvant démolir que son répertoire /home/X, X tape exit.
Si vous avez utilisé des CDs-Live comme Kaella ou Knoppix, votre compte est là par défaut sous le nom de «knoppix», sans mot de
passe. Voyez la dernière partie pour les détails.
Explications complètes des invites
Détail de l'invite en mode simple utilisateur
Z@Debian:~$
Z = 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 X) : on se trouve donc dans
le répertoire /home/X
le signe $ indique qu'on est en mode simple utilisateur.
Détail de l'invite en mode root
root@Debian:/home/X #
Vous voyez que par défaut, X qui est passé en mode root se trouve dans son propre répertoire. Le signe # rappelle que X est
en mode root.
X peut alors taper toutes les commandes désirées sans devoir retaper le mot de passe mais tant que X 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 faire 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 kdesu).
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) ou kdesu (pour Kubuntu) 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é par le simple utilisateur et aussi par le
Superutilisateur. Ici, un fichier qui ne peut être modifié que par le Superutilisateur.
NB : L'utilisation de gksudo et de kdesu 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, X tape sudo après l'invite et avant la commande ; voici un exemple et le
résultat :
X@ubuntu:~$ sudo cp /etc/apt/sources.list . [valider]
Password: [valider]
Ici X veut copier (= cp) le fichier «sources.list» du répertoire /etc/apt/ dans son répertoire personnel, ce que signifie le
point à la suite de l'espace.
Puis X 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 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 X. Le mot de passe de Y sur le compte Y ne pourra pas servir à passer en mode root,
sauf si on a expressément donné à Y accès au mode sudo.
Une fois que X 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 X@ubuntu:~$, ce qui signifie que Max est de nouveau en mode simple utilisateur. Pour exécuter
une autre commande accessible à root seul, Max 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 détaillé avec gksudo
Lancez le terminal. Exemple de commande :
tuxou@ubuntu:~$ gksudo gedit /etc/apt/sources.list [valider]
Password: [valider]
Vous voyez qu'ici X veut modifier le fichier /etc/apt/sources.list avec l'éditeur de texte Gedit. Ce fichier est lisible par
W 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
kdesu.
Pourquoi Sudo ?
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
Max.
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 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. Mais 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, comme chez Debian, 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 Root en tapant
dans le terminal
Max@ubuntu:/home/X su
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 «Y» ; voici la commande à taper :
sudo adduser Y 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 dans la documentation 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 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 Z 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 le
répertoire nommé «firefox» en entier (tous ses sous-répertoires et fichiers — cela 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" mais très raremement 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 en mode root.
Si vous devez faire une opération qui nécessite l'intervention de l'administrateur, tapez su dans une console, validez, tapez le
mot de passe (celui-ci n'apparaît pas, même pas sous la forme d'astérisques) ; quand vous avez fini, 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 le terminal :
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 avoir de compte root séparé et utilise sudo pour que l'utilisateur puisse
accéder aux tâches de l'administrateur. À l'installation, Ubuntu met en place 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. Voir 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 minuscules, en principe).
Il ne faut oublier d'ajouter Z 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/W/.mozilla). Ce
répertoire est caché par défaut (sécurité) mais peut être affiché par vous si besoin.
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.
Après l'installation, vous pouvez lancer Firefox comme simple utilisateur en cliquant sur une icône si elle existe ou en tapant
dans le terminal comme simple utilisateur:
$/opt/firefox/firefox
Votre profil est alors généré 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/".