Skip to content

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 :

  1. 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)
  2. 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 :

  1. Exécuter la commande su avec le nom d'utilisateur cible.
  2. Saisir le mot de passe du compte cible.
  3. 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 $PATH dé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/bin

Ce 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
exit

ou 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 :

  1. Exécuter sudo suivi de la commande.
  2. Entrer votre propre mot de passe (pas celui de root).
  3. La commande s'exécute avec des privilèges administratifs.

Particularités de sudo

  • Exécution ponctuelle : sudo n'affecte que la commande spécifiée.
  • Authentification temporaire : après une première authentification, sudo mémorise l'autorisation pendant un certain temps.
  • Sécurité renforcée : sudo utilise le mot de passe de l'utilisateur, pas celui de root. 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_utilisateur

Ensuite, il faut se déconnecter et se reconnecter pour que les changements prennent effet.

Vérifier l'appartenance aux groupes :

bash
groups nom_utilisateur

Distinction 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/sudoers directement avec un éditeur de texte classique comme nano ou vim. Une erreur de syntaxe pourrait vous empêcher d'utiliser sudo et vous bloquer hors du système (si le compte root est désactivé).

Nous verrons la configuration de ce fichier plus tard dans le cours.


Résumé des différences

Caractéristiquesusudo
PrincipeChange d'utilisateurExécute une commande avec des privilèges
Mot de passeCelui du compte cibleCelui de l'utilisateur actuel
DuréeJusqu'à exitPonctuel (pour une commande)
EnvironnementOptionnel (avec -)Conserve l'environnement actuel
SécuritéAccès complet au compteAccès contrôlé, granulaire et auditable
ConfigurationAucune (natif)Configurable via /etc/sudoers (avec visudo)

Bonnes pratiques

  1. Utilisez votre compte utilisateur pour les tâches quotidiennes.
  2. Utilisez sudo pour les tâches administratives ponctuelles.
  3. Réservez su - pour les sessions d'administration prolongées.
  4. Ne restez jamais connecté en root plus longtemps que nécessaire.
  5. Créez des comptes séparés pour chaque utilisateur du système.
  6. Utilisez visudo pour toute modification du fichier sudoers.
  7. 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

.