Appearance
Root, su et sudo - Système d'exploitation Linux
Table des matières
root et utilisateurs
Le compte root
Sur les systèmes UNIX et leurs dérivés, le compte root représente le super-administrateur disposant de privilèges complets sur l'ensemble du système. Le terme « root » fait référence à la racine (en anglais), car cet utilisateur possède les autorisations pour modifier tous les éléments depuis la racine du système de fichiers (/).
Le compte root dispose de privilèges étendus lui permettant de :
- Modifier l'intégralité du système d'exploitation
- Gérer l'installation et la désinstallation de logiciels
- Administrer les comptes utilisateurs (création, suppression, modification)
- Accéder et modifier tous les fichiers de configuration système
⚠️ Attention !
Il est important d'utiliser le compte root avec prudence, car toute action peut avoir de graves conséquences sur la stabilité et la sécurité du système.
L'utilisateur root est également appelé superuser (super-utilisateur), car il dispose d'un accès illimité.
Principe de base de GNU/Linux
La base de GNU/Linux repose sur la séparation des comptes :
- Un administrateur qui peut tout faire
- Des utilisateurs qui sont restreints à leur répertoire personnel
Cette séparation est une question de sécurité du système.
Installation et configuration des comptes
Lors de l'installation d'une distribution GNU/Linux, on met en place au moins deux comptes :
Le compte
root- Nom :
root - Rôle : Super-utilisateur ou administrateur du système
- Quantité : Un seul administrateur système possible
- Prompt :
root@debian:~#(le#indiquant les privilèges élevés)
- Nom :
Un compte utilisateur
- Nom : le nom de votre choix
- Rôle : Utilisateur standard avec privilèges limités
- Quantité : Autant de comptes que d'utilisateurs nécessaires
- Prompt :
username@debian:~$(le$indiquant des privilèges limités)
💡 Conseil : Il est vivement conseillé de créer autant de comptes qu'il y a d'utilisateurs. GNU/Linux est vraiment conçu pour le partage d'un ordinateur ou de plusieurs ordinateurs sur un réseau.
Répertoires utilisateurs
Répertoire indépendant
Chaque utilisateur dispose de son propre répertoire indépendant et protégé qui, par défaut, n'est accessible que par lui-même et par root.
Exemple de structure :
/home/
├── compte1/ (répertoire de l'utilisateur compte1)
├── gilles/ (répertoire de l'utilisateur gilles)
└── autreuser/ (répertoire d'un autre utilisateur)Sécurité
La séparation des comptes est un gage de sécurité :
- Un utilisateur ne peut pas modifier le système.
- Un utilisateur ne peut pas accéder au répertoire d'un autre utilisateur.
- En cas d'attaque, seul le répertoire de l'utilisateur concerné serait touché.
Administrateur et utilisateur
Une même personne peut être à la fois administrateur et utilisateur. Les deux comptes restent indépendants :
- Sur le compte
root: l'administrateur peut tout faire. - Sur un compte utilisateur : l'utilisateur est limité à son répertoire personnel (
/home/username).
Installation de logiciels
Les utilisateurs standards sont restreints dans l'installation de logiciels au niveau système via les gestionnaires de paquets comme APT ou Synaptic (que nous verrons plus tard). Cependant, ils conservent la possibilité de :
- Installer des applications localement dans leur répertoire personnel.
- Utiliser des programmes portables distribués sous forme d'archives
.tar.gz.
Commande su
La commande su (abréviation de « substitute user » ou « switch user ») est l'un des outils fondamentaux de l'administration système sous GNU/Linux. Elle permet de changer temporairement d'identité utilisateur durant une session de terminal, offrant ainsi la possibilité d'accéder aux privilèges et ressources d'un autre compte sans avoir à se déconnecter et se reconnecter.
Cette fonctionnalité est particulièrement utile pour :
- Effectuer des tâches administratives nécessitant les privilèges de
root. - Accéder aux fichiers et répertoires d'un autre utilisateur (avec les permissions appropriées).
Cette commande trouve principalement son utilité pour acquérir temporairement les privilèges d'administration depuis une session utilisateur standard, permettant ainsi d'effectuer des opérations système sans quitter l'environnement de travail habituel.
Fonctionnement
Syntaxe :
bash
su [nom_utilisateur]Processus :
- Exécuter la commande
suavec le nom d'utilisateur cible. - Saisir le mot de passe du compte cible.
- Une fois authentifié, vous avez accès aux privilèges et ressources du compte.
Limites de su
Par défaut, su conserve l'environnement actuel au lieu de charger celui du compte cible. Cette approche présente des inconvénients majeurs : les variables d'environnement (notamment $PATH) et le répertoire de travail restent inchangés, ce qui peut créer des situations ambiguës et des erreurs d'administration.
La variable
$PATHdéfinit les répertoires dans lesquels le système cherche les commandes exécutables. Si l'environnement n'est pas chargé correctement, des commandes pourraient ne pas être trouvées.
Exemple concret :
Imaginons que l'utilisateur gilles se connecte en tant qu'utilisateur invite.
bash
# L'utilisateur gilles est dans son répertoire personnel
gilles@machine:~$ pwd
/home/gilles
# Il passe sur le compte 'invite'
gilles@machine:~$ su invite
Mot de passe :
# L'utilisateur est maintenant 'invite', mais le répertoire de travail
# est toujours celui de 'gilles' !
invite@machine:/home/gilles$ pwd
/home/gilles
# De plus, la variable d'environnement PATH est celle de gilles,
# pas celle qui serait chargée pour une nouvelle session 'invite'.
invite@machine:/home/gilles$ echo $PATH
/usr/local/bin:/usr/bin:/bin:/home/gilles/binCe comportement peut être source d'erreurs, car on pourrait modifier des fichiers dans le répertoire de l'utilisateur d'origine en pensant être dans celui du nouvel utilisateur. De plus, les commandes spécifiques à l'environnement de invite pourraient ne pas fonctionner.
L'argument -
Pour simuler une vraie connexion et charger l'environnement de l'utilisateur cible :
bash
su - [nom_utilisateur]L'argument - (ou -l, --login) indique de démarrer un shell de connexion. Cela charge l'environnement complet de l'utilisateur cible, y compris les variables d'environnement comme $PATH, ce qui garantit que toutes les commandes de l'utilisateur seront disponibles.
Se connecter en tant que root
Pour se connecter en tant que root :
bash
su # Sans chargement d'environnement
su - # Avec chargement d'environnement (recommandé)Quitter une session su
bash
exitou Ctrl+D.
Commande sudo
Rôle et utilité de sudo
La commande sudo constitue l'outil principal pour appliquer le principe du moindre privilège sur les systèmes GNU/Linux. Elle permet à un utilisateur standard d'exécuter des commandes spécifiques avec les privilèges d'un autre utilisateur, typiquement root, sans lui accorder un accès administratif permanent.
Cette approche offre un équilibre optimal entre sécurité et fonctionnalité : les utilisateurs peuvent accomplir les tâches administratives nécessaires tout en conservant leurs privilèges limités pour les opérations courantes.
💡 Principe du moindre privilège
Le principe du moindre privilège stipule que chaque utilisateur ou programme ne doit disposer que des privilèges strictement nécessaires pour accomplir ses tâches. Cela réduit les risques de compromission du système en limitant l'impact potentiel des erreurs ou des attaques.
Cas d'usage courants
sudo est particulièrement utilisé pour :
- Gestion des paquets : Installation, mise à jour et suppression de logiciels système.
- Administration système : Redémarrage et gestion des services (
systemctl). - Configuration réseau : Modification des paramètres réseau, gestion des interfaces.
- Maintenance système : Montage/démontage de systèmes de fichiers, nettoyage du système.
- Gestion des utilisateurs : Création et modification de comptes (en tant qu'administrateur délégué).
⚠️
La commande sudo signifie Substitute User Do et permet d'exécuter une commande avec des privilèges de super-utilisateur sans changer d'utilisateur.
Fonctionnement
Syntaxe :
bash
sudo [commande]Processus :
- Exécuter
sudosuivi de la commande. - Entrer votre propre mot de passe (pas celui de
root). - La commande s'exécute avec des privilèges administratifs.
Particularités de sudo
- Exécution ponctuelle :
sudon'affecte que la commande spécifiée. - Authentification temporaire : après une première authentification,
sudomémorise l'autorisation pendant un certain temps. - Sécurité renforcée :
sudoutilise le mot de passe de l'utilisateur, pas celui deroot. De plus, les actions peuvent être journalisées (enregistrées dans des fichiers journaux) pour être auditées plus tard.
Prérequis : appartenir au groupe sudo
Pour utiliser sudo, l'utilisateur doit faire partie du groupe sudo (ou wheel sur certaines distributions comme CentOS/RHEL).
Ajouter un utilisateur au groupe sudo (en tant que root) :
bash
usermod -aG sudo nom_utilisateurEnsuite, il faut se déconnecter et se reconnecter pour que les changements prennent effet.
Vérifier l'appartenance aux groupes :
bash
groups nom_utilisateurDistinction importante
sudo est une commande, pas un super-utilisateur. Cette commande permet d'exécuter d'autres commandes avec les accès d'un super-utilisateur de manière ponctuelle, contrôlée et sécurisée, selon les règles définies dans le fichier /etc/sudoers.
Sur certaines distributions, la commande sudo n'est pas installée par défaut. Il faut alors l'installer via le gestionnaire de paquets.
Configuration avancée de sudo avec sudoers
La véritable puissance de sudo réside dans son fichier de configuration, /etc/sudoers, qui permet de définir des politiques de sécurité très granulaires.
Le fichier /etc/sudoers
Ce fichier contient les règles qui déterminent quel utilisateur peut exécuter quelle commande, sur quelle machine, et en se faisant passer pour quel autre utilisateur.
⚠️ Attention ! Il ne faut jamais éditer le fichier
/etc/sudoersdirectement avec un éditeur de texte classique commenanoouvim. Une erreur de syntaxe pourrait vous empêcher d'utilisersudoet vous bloquer hors du système (si le compterootest désactivé).
Nous verrons la configuration de ce fichier plus tard dans le cours.
Résumé des différences
| Caractéristique | su | sudo |
|---|---|---|
| Principe | Change d'utilisateur | Exécute une commande avec des privilèges |
| Mot de passe | Celui du compte cible | Celui de l'utilisateur actuel |
| Durée | Jusqu'à exit | Ponctuel (pour une commande) |
| Environnement | Optionnel (avec -) | Conserve l'environnement actuel |
| Sécurité | Accès complet au compte | Accès contrôlé, granulaire et auditable |
| Configuration | Aucune (natif) | Configurable via /etc/sudoers (avec visudo) |
Bonnes pratiques
- Utilisez votre compte utilisateur pour les tâches quotidiennes.
- Utilisez
sudopour les tâches administratives ponctuelles. - Réservez
su -pour les sessions d'administration prolongées. - Ne restez jamais connecté en
rootplus longtemps que nécessaire. - Créez des comptes séparés pour chaque utilisateur du système.
- Utilisez
visudopour toute modification du fichiersudoers. - Appliquez le principe du moindre privilège : n'accordez que les permissions strictement nécessaires.
🔒 Principe de sécurité : Toujours utiliser le compte avec les privilèges minimaux nécessaires pour accomplir une tâche.
Quiz 🎉
👋🏾 Cliquez sur la bonne réponse.
1 / 18 👉🏾 Quel est le rôle principal du compte `root` sur un système GNU/Linux ?
A. Exécuter des applications graphiques
B. Naviguer sur internet en toute sécurité
C. Avoir des privilèges complets sur l'ensemble du système
D. Gérer uniquement les fichiers de l'utilisateur courant