Aller au contenu principal

Notions fondamentales sur les Serveur Linux

Dans cette section, nous allons apprendre les bases sur ce qu'est un Serveur Linux et son fonctionnement.

Qu'est-ce que Linux

Linux est un système d'exploitation de type Unix Open Source qui est largement utilisé dans le monde pour faire tourner des serveurs en raison de sa fiabilité, de sa flexibilité et de sa sécurité.

Comme tout autre système d'exploitation, comme Windows ou MacOs, il gère les ressources matérielles d'un système telles que le processeur, la RAM et le stockage. Le noyau (kernel) interface le système d'exploitation et le matériel sous-jacent et facilite la communication entre les deux.

Qu'est-ce qu'un Serveur Linux ?

Un serveur Linux est un ordinateur sur lequel tourne le système d'exploitation Linux pour fournir des services, des ressources ou des données à d'autres ordinateurs (appelés clients) sur un réseau informatique.

Différence entre un système d'exploitation de bureau et un serveur

Un système d'exploitation de type bureau est un OS doté d'une interface utilisateur graphique et d'applications conviviales pour répondre aux besoins quotidiens. En revanche, un serveur Linux est configuré pour fonctionner en arrière-plan, sans interface graphique, en se concentrant sur la fourniture de services de manière fiable et sécurisée.

Les différentes distributions Linux pour Serveurs

Linux est disponible sous de nombreuses distributions, chacune ayant ses propres caractéristiques et avantages. Parmi les distributions populaires pour les serveurs, on trouve Ubuntu Server, CentOS, Debian et Red Hat Enterprise Linux (RHEL). Chacune de ces distributions a ses propres caractéristiques en termes de support, de gestion des paquets, de stabilité, etc. Le choix d'une distribution dépendra donc de vos besoins spécifiques.

Comment fonctionne un serveur Linux

Qu'est-ce que le noyau (kernel) d'un système Linux

Au cœur de tout système Linux se trouve le noyau (kernel en anglais). Le noyau est ce qui distingue Linux des autres systèmes d'exploitation. Il s'agit du composant central du système d'exploitation qui sert de pont entre les applications au niveau utilisateur et les composants matériels sous-jacents.

Il permet la communication entre le logiciel et le matériel physique sous-jacent. Le noyau gère tous les processus en cours, la mémoire, les fichiers, etc. En résumé, le noyau s'occupe des tâches suivantes :

  • Gestion de la mémoire : Le noyau assure le suivi de l'utilisation de la mémoire par les diverses applications tournant sur le système.
  • Gestion des périphériques : Il gère également les divers périphériques connectés au système, tels que les périphériques d'entrée et de sortie.
  • Gestion des processus : Le noyau gère les processus en cours afin d'éviter des conflits et des blocages.
  • Appels système et sécurité : Le noyau reçoit et gère les demandes de service des processus.

Comme mentionné précédemment, le noyau se trouve en plein milieu des processus utilisateur et du matériel sous-jacent qui comprend la RAM, le processeur, les périphériques d'E/S, le stockage, les graphiques et la mise en réseau.

Outre le noyau, le système d'exploitation Linux comprend d'autres composants essentiels tels que les utilitaires système, les applications installées et bien d'autres. Tous ces éléments regroupés constituent un système d’exploitation fonctionnel.

Le système de fichiers Linux

Le système de fichiers Linux est un mécanisme permettant d'organiser, de stocker, d'accéder et de gérer des données sur un système d'exploitation Linux. Il joue un rôle central dans la gestion des fichiers et des répertoires, ainsi que dans la manière dont les données sont stockées sur les dispositifs de stockage, tels que les disques durs, les SSD et les systèmes de fichiers en réseau (NFS entre autres).

Le système de fichiers Linux est organisé de manière hiérarchique sous forme d'arborescence. L'arborescence des répertoires commence par le répertoire racine / et se divise ensuite en sous-répertoires. Chaque répertoire peut contenir des fichiers et d'autres sous-répertoires. Cette structure forme une hiérarchie d'arborescence de fichiers et de répertoires.

Le répertoire racine / est le point de départ de l'arborescence. Il contient tous les autres fichiers et répertoires du système de fichiers Linux. Tous les chemins absolus commencent par /.

Les fichiers et les répertoires sont référencés par des chemins d'accès, qui indiquent leur emplacement dans l'arborescence. Un chemin absolu commence par le répertoire racine / et spécifie le chemin complet depuis la racine jusqu'au fichier ou au répertoire. Par exemple, /home/utilisateur/documents/mon_fichier.txt est un chemin absolu.

L'arborescence des principaux répertoires système

L'arborescence des principaux répertoires système dans un système d'exploitation Linux suit une structure standardisée qui organise les fichiers et les répertoires de manière logique et cohérente. Voici une description des principaux répertoires système :

├── bin -> usr/bin
├── boot
├── dev
├── etc
├── home
│  └── user1
├── lib -> usr/lib
├── lib32 -> usr/lib32
├── lib64 -> usr/lib64
├── libx32 -> usr/libx32
├── media
├── mnt
├── opt
├── proc
├── recovery
├── root
├── run
├── sbin -> usr/sbin
├── srv
├── sys
├── tmp
├── usr
└── var
   ├── log
   └── ...
  1. / (root) : Le répertoire racine est le point de départ de l'arborescence du système de fichiers Linux. Tous les autres répertoires et fichiers sont situés sous la racine. Il est généralement représenté comme / dans les chemins absolus.

  2. /bin (Binaires système) : Ce répertoire contient les binaires système essentiels nécessaires au démarrage et à la réparation du système. Vous y trouverez des commandes de base telles que ls, cp, mv, mkdir, rm, etc.

  3. /boot (Démarrage) : Les fichiers nécessaires au processus de démarrage du système se trouvent ici, y compris le noyau Linux et les fichiers de configuration du gestionnaire de démarrage (comme GRUB ou LILO).

  4. /dev (Périphériques) : Ce répertoire contient les fichiers spéciaux qui représentent les périphériques matériels du système, tels que les disques, les lecteurs de CD-ROM, les ports série, etc.

  5. /etc (Configuration) : Les fichiers de configuration du système sont stockés dans ce répertoire. Il contient des fichiers de configuration pour le noyau, le réseau, les services, les utilisateurs et bien d'autres.

  6. /home (Répertoires personnels) : Ce répertoire contient les répertoires personnels des utilisateurs du système. Chaque utilisateur a généralement son propre sous-répertoire sous /home pour stocker ses fichiers personnels.

  7. /lib (Bibliothèques partagées) : Les bibliothèques partagées essentielles nécessaires au fonctionnement du système sont stockées ici. Ces bibliothèques sont utilisées par les programmes pour accéder aux fonctionnalités du système.

  8. /media (Périphériques montés) : Les supports amovibles tels que les clés USB, les disques durs externes et les CD/DVD sont montés automatiquement sous ce répertoire lorsqu'ils sont connectés au système.

  9. /mnt (Points de montage) : Ce répertoire est utilisé pour monter temporairement d'autres systèmes de fichiers, tels que des disques réseau ou d'autres partitions de disque.

  10. /opt (Options) : Les logiciels tiers et les applications optionnelles peuvent être installés dans ce répertoire. Il est souvent utilisé pour les logiciels non inclus dans la distribution Linux de base.

  11. /proc (Système de fichiers proc) : Ce répertoire est un système de fichiers virtuel qui fournit des informations en temps réel sur les processus en cours d'exécution et d'autres informations relatives au noyau.

  12. /root (Répertoire personnel du super-utilisateur) : C'est le répertoire personnel du superutilisateur (root). Il est différent du répertoire personnel des autres utilisateurs.

  13. /sbin (Binaires système système) : Ce répertoire contient des binaires système essentiels, principalement destinés à être utilisés par le super-utilisateur (root) pour la gestion du système.

  14. /srv (Données des services) : Ce répertoire est utilisé pour stocker les données spécifiques aux services fournis par le système, tels que les fichiers de données des serveurs web.

  15. /tmp (Répertoire temporaire) : Ce répertoire est utilisé pour stocker des fichiers temporaires créés par les utilisateurs et les applications. Les fichiers temporaires sont généralement supprimés lors du redémarrage.

  16. /usr (Ressources système) : Ce répertoire contient des données et des programmes qui ne sont pas nécessaires au démarrage du système, mais qui sont utilisés par les utilisateurs et les applications, y compris les binaires, les bibliothèques, la documentation, etc.

  17. /var (Données variables) : Les données variables telles que les journaux système, les fichiers de base de données et les fichiers temporaires du système sont stockées ici. Ce répertoire peut contenir des données qui changent fréquemment.

  18. /var/log (Journaux systèmes) : Le répertoire /var/log est un répertoire important dans l'arborescence des répertoires système Linux. Il est spécifiquement destiné au stockage des fichiers journaux du système, également appelés "logs". Les fichiers journaux enregistrent des informations sur divers événements et activités du système, ce qui est essentiel pour la surveillance, le dépannage et la gestion du système.

    On y trouve :

    • Le fichier /var/log/boot.log, enregistrent des informations sur le processus de démarrage du système.
    • Le fichier /var/log/messages ou /var/log/syslog (selon la distribution) contiennent des informations générales sur l'état du système, y compris les messages du noyau, les informations sur le matériel, les messages de démarrage, etc.
    • Le fichier /var/log/auth.log ou /var/log/secure (selon la distribution) enregistre les informations d'authentification des utilisateurs, notamment les connexions réussies et les tentatives de connexion échouées.
    • Le fichier /var/log/dpkg.log (sur les systèmes basés sur Debian) ou /var/log/yum.log (sur les systèmes basés sur Red Hat) enregistre les opérations de gestion de paquets, telles que l'installation, la mise à jour ou la suppression de logiciels.
    • De nombreux autres fichiers créés par les services système et logiciels tiers. Par exemple, Apache peut avoir ses journaux dans /var/log/apache2/, et MySQL peut avoir ses journaux dans /var/log/mysql/....

Cette structure d'arborescence des répertoires système est cohérente sur la plupart des distributions Linux, bien que certaines distributions puissent avoir des répertoires supplémentaires ou des variations mineures dans la structure. Elle permet d'organiser efficacement les fichiers et les répertoires du système, facilitant ainsi la gestion et l'accès aux ressources système.

Les permissions dans le système de fichiers Linux

La gestion des permissions ou droits dans le système de fichiers Linux est un élément essentiel de la sécurité du système. Linux utilise un système de contrôle d'accès basé sur les permissions pour déterminer qui peut accéder aux fichiers et aux répertoires, qui peut les modifier et qui peut les exécuter. Cela se fait principalement à l'aide de trois types de permissions : lecture, écriture et exécution, pour trois catégories d'utilisateurs : le propriétaire, le groupe et les autres.

Voici une explication détaillée de la gestion des permissions dans le système de fichiers Linux :

Les types de permissions

  • Lecture (r) : Permission de lire le contenu d'un fichier ou de lister le contenu d'un répertoire.
  • Écriture (w) : Permission de modifier le contenu d'un fichier ou de créer, supprimer et renommer des fichiers dans un répertoire.
  • Exécution (x) : Permission d'exécuter un fichier (dans le cas des fichiers exécutables) ou d'accéder à un répertoire (important !).

Les Catégories d'utilisateurs

  • Le Propriétaire (u) : L'utilisateur qui a créé ou possède le fichier ou le répertoire.
  • Le Groupe (g) : Un groupe d'utilisateurs auquel le fichier ou le répertoire est attribué. Les membres du groupe ont les mêmes permissions que le groupe.
  • Les Autres (o) : Tous les autres utilisateurs du système qui ne sont ni le propriétaire ni les membres du groupe. Ces permissions sont également appelées "permissions publiques".

Les Attributs spéciaux

  • Sticky bit (t) : Le bit sticky peut être attribué à un répertoire pour empêcher la suppression de fichiers par des utilisateurs autres que le propriétaire, même si ces utilisateurs ont les permissions d'écriture sur le répertoire. C'est couramment utilisé pour les répertoires temporaires.
  • Setgid (s) : Lorsqu'un répertoire a le bit setgid activé, les fichiers créés dans ce répertoire héritent du groupe du répertoire parent, au lieu du groupe de l'utilisateur qui les crée.
  • Setuid (s) : Lorsqu'un fichier exécutable a le bit setuid activé, il s'exécute avec les permissions de l'utilisateur propriétaire du fichier, plutôt qu'avec les permissions de l'utilisateur qui l'exécute. Cela peut être utilisé pour permettre à des utilisateurs ordinaires d'exécuter des commandes avec des privilèges spécifiques.

Les formats d'écriture des permissions

On distingue deux modes d'écriture des permissions le mode octal et le symobolique. Le mode octal est celui le plus couramment utilisé une fois compris.

Le mode octal

Le mode octal des permissions est une manière concise de représenter les permissions d'un fichier ou d'un répertoire dans le système de fichiers Linux en utilisant des chiffres octaux (base 8). Il est couramment utilisé pour définir rapidement et précisément les permissions en combinant les droits de lecture (4), d'écriture (2) et d'exécution (1) pour chaque catégorie d'utilisateurs (propriétaire, groupe, autres).

Voici comment fonctionne le mode octal des permissions :

Chaque catégorie d'utilisateurs (propriétaire, groupe, autres) est représentée par une combinaison de trois chiffres octaux :

  • Le premier chiffre représente les permissions du propriétaire.
  • Le deuxième chiffre représente les permissions du groupe.
  • Le troisième chiffre représente les permissions pour les autres utilisateurs.

Les chiffres octaux sont utilisés pour attribuer des valeurs aux droits de lecture, d'écriture et d'exécution :

  • Lecture (4) : Représenté par le chiffre 4, indique que l'utilisateur a la permission de lire le fichier ou de lister le contenu du répertoire.
  • Écriture (2) : Représenté par le chiffre 2, indique que l'utilisateur a la permission d'écrire ou de modifier le fichier ou de créer, supprimer et renommer des fichiers dans le répertoire.
  • Exécution (1) : Représenté par le chiffre 1, indique que l'utilisateur a la permission d'exécuter un fichier (dans le cas des fichiers exécutables) ou d'accéder à un répertoire.

Pour définir les permissions, vous attribuez la somme des valeurs numériques correspondantes aux droits dont vous avez besoin pour chaque catégorie d'utilisateurs.

Par exemple, si vous souhaitez attribuer des droits de lecture et d'exécution au propriétaire, des droits de lecture au groupe et des droits de lecture aux autres, vous obtenez la valeur octale 5 pour le premier chiffre, 4 pour le deuxième chiffre et 4 pour le troisième chiffre. En mode octal, cela s'écrit 544. Si vous souhaitez attribuer tous les droits au propriétaire, mais uniquement les droits de lecture aux autres, vous obtenez la valeur octale 7 pour le premier chiffre et 4 pour les deuxième et troisième chiffres. En mode octal, cela s'écrit 744.

Le format symbolique

Le format symbolique permet de représenter les permissions dans le système de fichiers Linux. Il utilise des lettres et des symboles pour représenter les permissions. Les permissions sont spécifiées pour le propriétaire, le groupe et les autres utilisateurs, ainsi que pour les types de fichiers spéciaux (comme les fichiers exécutables et les liens symboliques).

Le format symbolique des permissions comprend les éléments suivants :

  • Propriétaire (u) : Représenté par la lettre "u". Les permissions du propriétaire sont définies avec les lettres "r" pour la lecture (read), "w" pour l'écriture (write) et "x" pour l'exécution (execute).
  • Groupe (g) : Représenté par la lettre "g". Les permissions du groupe sont définies avec les mêmes lettres que pour le propriétaire : "r" pour la lecture, "w" pour l'écriture et "x" pour l'exécution.
  • Autres (o) : Représentés par la lettre "o". Les permissions pour les autres utilisateurs sont également définies avec les mêmes lettres : "r" pour la lecture, "w" pour l'écriture et "x" pour l'exécution.
  • Tous (a) : Représenté par la lettre "a". Lorsque vous utilisez "a", vous définissez les permissions pour tous les utilisateurs (propriétaire, groupe et autres) en même temps.
  • Négation (-) : Représenté par le symbole "-". Vous pouvez utiliser "-" pour retirer des permissions spécifiques.

Voici quelques exemples d'utilisation du format symbolique des permissions :

  • Pour attribuer la permission de lecture et d'exécution au propriétaire, la permission de lecture au groupe et aucune permission aux autres : u=rx,g=r,o=.
  • Pour retirer la permission d'écriture au groupe et aux autres : go-w.

Attributs spéciaux : Il existe également des symboles spéciaux pour représenter des attributs spécifiques comme le sticky bit (t) et le setgid (s).

Commandes pour gérer et afficher les permissions

Gestion des permissions

Il s'agit de la commande chmod vu ici.

Affichage des permissions

Vous pouvez afficher les permissions d'un fichier ou d'un répertoire en utilisant la commande ls -l. Cela affiche une liste détaillée des fichiers avec des informations sur les permissions, le propriétaire, le groupe, etc.

Voici un exemple de sortie de la commande ls -l :

ls -l

-rw-r--r--  1 utilisateur groupe  1024 nov.  1 15:30 mon_fichier.txt
drwxr-xr-x  2 utilisateur groupe  4096 nov.  1 15:30 mon_repertoire/

Dans cet exemple, les lettres rw-r--r-- représentent les permissions pour le propriétaire, le groupe et les autres, respectivement.

Le fichier mon_fichier.txt est modifiable par son propriétaire et accessible en lecture à tous les autres utilisateurs.

La gestion des utilisateurs sous Linux

La gestion des utilisateurs sous Linux est une partie essentielle de l'administration système. Linux utilise un système d'authentification basé sur des utilisateurs et des groupes pour contrôler l'accès aux ressources système et pour différencier les droits et les autorisations entre les utilisateurs.

Linux gère les utilisateurs en les associant à des groupes. Chaque utilisateur est membre d'au moins un groupe. Les groupes permettent de définir collectivement des permissions et des droits pour un ensemble d'utilisateurs.

Le super-utilisateur

Le super-utilisateur, appelé root, est un utilisateur spécial avec des privilèges étendus qui lui permettent de faire des modifications système critiques. L'utilisateur root a le plus haut niveau d'accès et peut effectuer des opérations qui sont normalement interdites aux utilisateurs standards. L'accès au compte root doit être soigneusement contrôlé pour des raisons de sécurité.

Gestion des utilisateurs et groupes

Les administrateurs système, ayant des privilèges, peuvent créer de nouveaux utilisateurs en utilisant des commandes telles que useradd ou adduser. Ces commandes ajoutent une entrée dans /etc/passwd, créent un répertoire personnel pour l'utilisateur et ajoutent l'utilisateur à un groupe initial.

Ces administrateurs peuvent modifier les comptes d'utilisateurs existants à l'aide de commandes telles que usermod. Cela permet de changer le répertoire personnel, le groupe par défaut, le shell, etc.

Ces administrateurs peuvent supprimer des comptes d'utilisateurs à l'aide de la commande userdel. La suppression d'un compte supprime également le répertoire personnel de l'utilisateur par défaut.

Chaque utilisateur doit avoir un mot de passe pour sécuriser son compte. Les mots de passe sont stockés de manière sécurisée dans le fichier /etc/shadow, qui est accessible uniquement par le super-utilisateur (root).

Où sont stockées les informations sur les groupes et utilisateurs

Les informations sur les utilisateurs sont stockées dans des fichiers d'authentification, principalement dans /etc/passwd et /etc/group. Ces fichiers contiennent des entrées pour chaque utilisateur et groupe, respectivement.

  • Le fichier /etc/passwd : Contient des informations sur les utilisateurs, telles que leur nom d'utilisateur, leur numéro d'identification d'utilisateur (UID), leur numéro d'identification de groupe par défaut (GID), leur répertoire personnel et leur shell par défaut.
  • Le fichier /etc/group : Contient des informations sur les groupes, telles que leur nom de groupe, leur GID et la liste des utilisateurs qui sont membres du groupe.

Chaque utilisateur doit avoir un nom d'utilisateur unique (également appelé login) et un UID unique. Le système utilise ces identificateurs pour suivre et gérer les utilisateurs.

C'est quoi l'élévation de privilèges

L'élévation de privilèges (ou privilege escalation en anglais) fait référence au processus par lequel un utilisateur ou un processus tente d'acquérir des privilèges ou des autorisations supplémentaires au sein d'un système informatique, lui permettant ainsi d'exécuter des actions pour lesquelles il n'avait pas initialement les droits.

Les raisons pour lesquelles quelqu'un peut essayer d'élever ses privilèges sont diverses et elles peuvent inclure :

  • L'accès à des fichiers, des données ou des ressources auxquels l'utilisateur ou le processus n'a pas initialement accès.
  • L'exécution de certaines actions qui nécessitent des privilèges spécifiques, tels que l'installation de logiciels, la modification de la configuration du système, la gestion des utilisateurs, etc.

Cependant, l'élévation de privilèges peut être un comportement indésirable, notamment lorsqu'il est effectué par un logiciel malveillant ou un attaquant, car cela peut entraîner des risques pour la sécurité du système. Les administrateurs système prennent des mesures pour limiter et contrôler l'élévation de privilèges, particulièrement en configurant correctement les autorisations des fichiers et des répertoires, en utilisant des systèmes de contrôle d'accès, en surveillant les journaux système pour détecter des activités suspectes et en mettant en place des politiques de sécurité solides.

L'élévation de privilèges est également un sujet important dans le domaine de la sécurité informatique, car les vulnérabilités qui permettent une élévation de privilèges peuvent être exploitées pour compromettre la sécurité d'un système. Les correctifs de sécurité sont souvent publiés pour corriger de telles vulnérabilités et empêcher les attaquants d'acquérir des privilèges non autorisés.