Liste de contrôle post-installation de Linux : configuration initiale du serveur | INTROSERV
EUR
european

EUR

usa

USD

French Fr
Ex. VAT Ex. VAT 0%

Liste de contrôle post-installation de Linux : configuration initiale du serveur

Niveau : débutant / intermédiaire
Durée estimée : ~40 minutes
Objectif : réaliser la configuration initiale essentielle d'un VPS Linux – durcir l'accès SSH, créer un utilisateur sudo, configurer un pare-feu, mettre en place les mises à jour de sécurité automatiques et planifier des tâches de maintenance de base avec cron.

Introduction

Les 30 premières minutes suivant le provisionnement d'un VPS sont les plus importantes. Un serveur Linux fraîchement installé est grand ouvert : la connexion root via SSH est généralement activée, aucune règle de pare-feu n'est en place et les paquets sont déjà obsolètes. Cette liste de contrôle post-installation Linux couvre toutes les étapes essentielles pour un environnement de production ou de développement – de la création d'un utilisateur sudo et de la configuration de l'authentification par clé SSH à l'activation d'UFW et à la planification des mises à jour de sécurité automatiques. Suivre ce guide une fois vous protège des vecteurs d'attaque les plus courants avant même de déployer quoi que ce soit dessus.

Ce guide couvre les instances VPS sous Ubuntu, Debian et AlmaLinux (compatible RHEL).

Prérequis

Avant de commencer, assurez-vous que les conditions suivantes sont remplies :

  • Système d'exploitation : Ubuntu 20.04/22.04/24.04 LTS, Debian 11/12/13 ou AlmaLinux 8/9/10
  • Accès : accès SSH root au serveur (par mot de passe ou par clé – vous le durcirez au cours de ce guide)
  • Machine locale : un client SSH disponible (ssh sous Linux/macOS, PuTTY ou Windows Terminal sous Windows)
  • Connaissances requises : utilisation de base de la ligne de commande Linux – navigation dans les répertoires, édition de fichiers avec nano
  • Durée estimée : ~40 minutes pour une première exécution sans accroc

Info

Ce guide a été testé sur Ubuntu 24.04 LTS, Debian 12/13 et AlmaLinux 9/10. Les étapes sont identiques, sauf indication contraire.

Étape 1 : définir le nom d'hôte du serveur

Un nom d'hôte approprié rend les journaux lisibles et évite les confusions lors de la gestion de plusieurs serveurs.

Commencez par mettre à jour le fichier /etc/hosts afin que le système puisse résoudre localement son nouveau nom d'hôte. Ouvrez le fichier :

sudo nano /etc/hosts

Ajoutez ou modifiez la ligne correspondant à 127.0.1.1 (ou 127.0.0.1 si 127.0.1.1 n'existe pas) pour qu'elle corresponde à votre nouveau nom d'hôte. Par exemple, si vous prévoyez d'utiliser web-01 :

127.0.1.1 web-01

Enregistrez et quittez (Ctrl+O, Entrée, Ctrl+X).

Définissez ensuite le nom d'hôte de manière globale avec hostnamectl :

sudo hostnamectl set-hostname <YOUR_HOSTNAME>

Vérifiez qu'il a bien été appliqué :

hostnamectl

Sortie attendue :

Static hostname: web-01 Icon name: computer-vm Chassis: vm Machine ID: a1b2c3d4e5f6... Boot ID: ... Operating System: Ubuntu 24.04.1 LTS Kernel: Linux 6.8.0-31-generic Architecture: x86-64

Tip

De nombreux services – dont Postfix (messagerie) et les outils de certificats SSL comme Certbot – exigent que le nom d'hôte soit résolvable localement. Mettre à jour /etc/hosts avant d'exécuter hostnamectl évite des défauts de résolution difficiles à repérer.

Étape 2 : mettre à jour tous les paquets

Effectuez immédiatement une mise à jour complète du système. Les paquets fournis avec une image VPS neuve sont presque toujours en retard.

Ubuntu/Debian (APT) :

sudo apt update && sudo apt upgrade -y

AlmaLinux/RHEL (DNF) :

sudo dnf update -y

Une fois la mise à jour terminée, vérifiez si un redémarrage est nécessaire.

Debian/Ubuntu :

cat /var/run/reboot-required 2>/dev/null && echo "Reboot required" || echo "No reboot needed"

AlmaLinux/RHEL :

sudo dnf install -y dnf-utils needs-restarting -r

Si un redémarrage est nécessaire, effectuez-le maintenant avant de poursuivre – certaines mises à jour du noyau et des bibliothèques ne prennent effet qu'après un redémarrage :

sudo reboot

Warning

Ignorer le redémarrage lorsqu'il est nécessaire signifie que le noyau en cours d'exécution et certaines bibliothèques restent dans l'ancienne version. Des vulnérabilités connues peuvent ainsi rester non corrigées même après la mise à jour.

Étape 3 : créer un utilisateur sudo

Se connecter en root pour le travail quotidien n'est pas sûr et constitue une mauvaise pratique. Créez un utilisateur ordinaire et accordez-lui les privilèges sudo.

3.1 Ajouter l'utilisateur

sudo adduser <YOUR_USERNAME>

Sous Ubuntu/Debian, la commande vous invite à définir un mot de passe et à renseigner des champs de contact facultatifs. Saisissez le mot de passe ; ignorez le reste en appuyant sur Entrée.

Sous AlmaLinux/RHEL, adduser est un lien symbolique vers useradd et s'exécute de façon non interactive, sans demander de mot de passe, ce qui laisse le compte verrouillé. Vous devez définir le mot de passe manuellement :

sudo passwd <YOUR_USERNAME>

3.2 Accorder les privilèges sudo

Ubuntu/Debian – ajoutez l'utilisateur au groupe sudo :

sudo usermod -aG sudo <YOUR_USERNAME>

AlmaLinux/RHEL – ajoutez l'utilisateur au groupe wheel :

sudo usermod -aG wheel <YOUR_USERNAME>

3.3 Vérifier l'accès

Basculez vers le nouvel utilisateur et testez sudo :

su - <YOUR_USERNAME> sudo whoami

Sortie attendue :

root

Si vous voyez root, l'utilisateur dispose de privilèges sudo fonctionnels. Vous pouvez maintenant fermer la session root :

exit

Info

Sous AlmaLinux, l'appartenance au groupe wheel est définie dans /etc/sudoers par la ligne %wheel ALL=(ALL) ALL, activée par défaut. Sous Ubuntu/Debian, le groupe sudo remplit la même fonction.

Étape 4 : configurer l'authentification par clé SSH

L'authentification SSH par mot de passe est vulnérable aux attaques par force brute. L'authentification par clé SSH remplace le mot de passe par une paire de clés cryptographiques, bien plus difficile à attaquer. C'est l'une des bonnes pratiques de configuration SSH les plus importantes que vous puissiez appliquer.

4.1 Générer une paire de clés SSH (sur votre machine locale)

Si vous ne disposez pas déjà d'une paire de clés SSH, générez-en une sur votre machine locale (pas sur le serveur) :

ssh-keygen -t ed25519 -C "<YOUR_USERNAME>@<YOUR_HOSTNAME>"

Acceptez l'emplacement de fichier par défaut. Définissez une phrase secrète (passphrase) lorsque vous y êtes invité – elle protège la clé si votre machine locale venait à être compromise.

Info

ed25519 est le type de clé recommandé. Il est plus rapide, plus court et plus sûr que l'ancien type rsa (2048 bits). Si votre client SSH ne le prend pas en charge, utilisez plutôt ssh-keygen -t rsa -b 4096.

4.2 Copier la clé publique sur le serveur

Depuis votre machine locale, copiez la clé vers le compte du nouvel utilisateur :

ssh-copy-id <YOUR_USERNAME>@<YOUR_SERVER_IP>

Si ssh-copy-id n'est pas disponible (par exemple sous Windows), copiez manuellement le contenu de ~/.ssh/id_ed25519.pub et ajoutez-le à la fin de ~/.ssh/authorized_keys sur le serveur.

4.3 Tester la connexion par clé

Ouvrez une nouvelle fenêtre de terminal (ne fermez pas encore la session actuelle) et testez la connexion :

ssh <YOUR_USERNAME>@<YOUR_SERVER_IP>

Vous devriez vous connecter sans qu'un mot de passe vous soit demandé (seule la phrase secrète de la clé l'est, si vous en avez défini une).

Warning

Ne fermez pas votre session SSH existante tant que vous n'avez pas confirmé que la connexion par clé fonctionne. En cas de mauvaise configuration, vous conserverez ainsi une session pour corriger le problème.

Étape 5 : durcir la configuration SSH et désactiver la connexion root

Une fois la connexion par clé confirmée (étape 4), verrouillez le démon SSH. Désactiver la connexion root et l'authentification par mot de passe via SSH est l'une des mesures les plus efficaces de toute liste de contrôle de durcissement d'un serveur Linux.

Sur les trois distributions, le fichier /etc/ssh/sshd_config contient, près du début, une ligne Include /etc/ssh/sshd_config.d/*.conf , et SSH applique la première valeur trouvée pour chaque paramètre. Des fichiers drop-in fournis par les distributions sont déjà présents et l'emportent sur tout ce que vous ajouteriez ensuite dans le fichier principal :

  • Ubuntu 24.04 : 50-cloud-init.conf définit PasswordAuthentication yes
  • AlmaLinux : 50-redhat.conf définit X11Forwarding yes

Pour cette raison, modifier le fichier principal sshd_config n'est pas fiable. Créez plutôt un fichier drop-in de durcissement portant un numéro bas (00-), afin qu'il soit lu en premier et l'emporte sur les fichiers des distributions. Le même fichier fonctionne sur les trois distributions.

Créez le fichier drop-in :

sudo tee /etc/ssh/sshd_config.d/00-hardening.conf > /dev/null <<'EOF' PermitRootLogin no PasswordAuthentication no PubkeyAuthentication yes AuthorizedKeysFile .ssh/authorized_keys X11Forwarding no EOF

Le préfixe 00- garantit que ce fichier est analysé avant les fichiers drop-in des distributions, tels que 50-cloud-init.conf et 50-redhat.conf. Comme SSH applique la règle « la première correspondance l'emporte », vous n'avez pas besoin de modifier ces fichiers.

Validez la syntaxe de la configuration avant de redémarrer le service :

sudo sshd -t

Si la commande n'affiche rien, la syntaxe est valide. Vérifiez maintenant les paramètres effectifs que le démon utilisera réellement :

sudo sshd -T | grep -iE "permitrootlogin|passwordauthentication|x11forwarding"

Sortie attendue :

permitrootlogin no passwordauthentication no x11forwarding no

Warning

Confirmez que les trois valeurs sont correctes avant de redémarrer. Si passwordauthentication affiche toujours yes, un fichier drop-in d'une distribution remplace le vôtre – vérifiez que 00-hardening.conf a été correctement enregistré. Ne fermez pas votre session SSH existante tant que vous n'avez pas vérifié que la connexion par clé fonctionne toujours.

Redémarrez le démon SSH pour appliquer les modifications.

Ubuntu 24.04 (activation par socket) :

sudo systemctl restart ssh.socket

Debian et Ubuntu plus anciennes :

sudo systemctl restart ssh

AlmaLinux/RHEL :

sudo systemctl restart sshd

Vérifiez que le service fonctionne (utilisez sshd sous AlmaLinux, ssh.socket sous Ubuntu 24.04) :

sudo systemctl status ssh

Vous devriez voir Active: active (running) (ou active (listening) pour SSH à activation par socket).

Confirmez maintenant que la connexion root est bloquée. Depuis votre machine locale :

ssh root@<YOUR_SERVER_IP>

Résultat attendu : la connexion est refusée avec le message Permission denied (publickey). La connexion root via SSH est désormais désactivée.

Étape 6 : configurer le pare-feu (UFW)

UFW (Uncomplicated Firewall) est l'outil de pare-feu standard sous Ubuntu et Debian. Sous AlmaLinux, firewalld est l'outil par défaut, mais UFW peut aussi y être installé. Cette étape couvre les deux approches.

Warning

Avant d'activer un pare-feu, assurez-vous que SSH (port 22) est explicitement autorisé. Une erreur à ce stade vous verrouillerait hors du serveur.

6.1 UFW (Ubuntu/Debian)

Sous Debian (en particulier Debian 13), ufw n'est peut-être pas installé par défaut. Installez-le d'abord :

sudo apt update && sudo apt install -y ufw

Vérifiez l'état actuel :

sudo ufw status

Autorisez SSH avant d'activer le pare-feu :

sudo ufw allow ssh

Autorisez HTTP et HTTPS si vous prévoyez d'exécuter un serveur web :

sudo ufw allow http sudo ufw allow https

Activez le pare-feu :

sudo ufw enable

Vérifiez les règles actives :

sudo ufw status verbose

Sortie attendue :

Status: active Logging: on (low) Default: deny (incoming), allow (outgoing), disabled (routed) To Action From -- ------ ---- 22/tcp ALLOW IN Anywhere 80/tcp ALLOW IN Anywhere 443/tcp ALLOW IN Anywhere

6.2 Firewalld (AlmaLinux/RHEL)

Activez et démarrez firewalld :

sudo systemctl enable --now firewalld

Autorisez SSH, HTTP et HTTPS :

sudo firewall-cmd --permanent --add-service=ssh sudo firewall-cmd --permanent --add-service=http sudo firewall-cmd --permanent --add-service=https sudo firewall-cmd --reload

Vérifiez :

sudo firewall-cmd --list-all

Info

Configurer un pare-feu sous Linux consiste à choisir l'outil adapté à votre distribution et à ne pas exécuter deux démons de pare-feu en même temps. Si vous avez installé UFW sous AlmaLinux, désactivez d'abord firewalld avec sudo systemctl disable --now firewalld.

Étape 7 : synchroniser l'horloge système (NTP)

Une heure exacte est indispensable aux protocoles de sécurité (validation SSL/TLS, Kerberos), à l'horodatage correct des journaux et aux tâches planifiées. Une horloge désynchronisée peut provoquer des erreurs de certificat SSL, des échecs d'authentification et des entrées de journal déroutantes.

Vérifiez l'état actuel de la synchronisation :

timedatectl status

Sortie attendue :

System clock synchronized: yes NTP service: active

Info

Sous Ubuntu 24.04 et Debian 13, NTP est généralement actif via systemd-timesyncd. Sous AlmaLinux 10, il l'est généralement via chrony. Si timedatectl affiche System clock synchronized: yes et NTP service: active, vous n'avez rien à modifier.

Si le service NTP apparaît comme inactive ou n/a, installez et activez chrony – le démon NTP recommandé pour les serveurs de production :

Ubuntu/Debian :

sudo apt install chrony -y sudo systemctl enable --now chrony

Tip

Sous Debian 13, l'installation de chrony peut amener `timedatectl` à afficher `NTP service: n/a`. Utilisez plutôt `chronyc tracking` pour vérifier.

AlmaLinux/RHEL :

sudo dnf install chrony -y sudo systemctl enable --now chronyd

Attendez 30 à 60 secondes après le démarrage du service, puis vérifiez que la synchronisation est active :

chronyc tracking

Recherchez Leap status: Normal. Cela confirme que l'horloge système est synchronisée et que NTP fonctionne correctement.

Tip

Si vous gérez des serveurs dans plusieurs fuseaux horaires, définissez le fuseau horaire du système avant de configurer NTP afin que les horodatages des journaux soient à l'heure locale attendue. Exemple : sudo timedatectl set-timezone Europe/Warsaw.

Étape 8 : activer les mises à jour de sécurité automatiques

Les mises à jour manuelles fonctionnent, mais elles dépendent de votre capacité à ne pas les oublier. Les mises à jour de sécurité automatiques constituent un filet de sécurité – particulièrement crucial pour les instances VPS sans surveillance. Voici comment configurer les mises à jour de sécurité automatiques sous Linux sans nuire à la stabilité.

8.1 Ubuntu/Debian – unattended-upgrades

Installez le paquet :

sudo apt install unattended-upgrades -y

Activez-le et configurez-le :

sudo dpkg-reconfigure --priority=low unattended-upgrades

Warning

Il est essentiel de sélectionner Yes (Oui) lorsque la question est posée. Si vous sélectionnez No (Non), le fichier de configuration nécessaire (/etc/apt/apt.conf.d/20auto-upgrades) ne sera pas créé et les vérifications suivantes échoueront avec l'erreur « No such file or directory ». Cela active l'installation automatique des seules mises à jour de sécurité – les mises à jour de fonctionnalités ordinaires restent manuelles.

Vérifiez la configuration :

cat /etc/apt/apt.conf.d/20auto-upgrades

Sortie attendue :

APT::Periodic::Update-Package-Lists "1"; APT::Periodic::Unattended-Upgrade "1";

Pour tester sans appliquer de modifications :

sudo unattended-upgrade --dry-run --debug

8.2 AlmaLinux/RHEL – dnf-automatic

Installez :

sudo dnf install dnf-automatic -y

Ouvrez le fichier de configuration et définissez le type de mise à niveau sur « sécurité uniquement ». Faites d'abord une sauvegarde :

sudo cp /etc/dnf/automatic.conf /etc/dnf/automatic.conf.bak sudo nano /etc/dnf/automatic.conf

Recherchez et définissez :

apply_updates = yes upgrade_type = security

Activez et démarrez le minuteur (timer) :

sudo systemctl enable --now dnf-automatic.timer

Vérifiez :

sudo systemctl status dnf-automatic.timer

Étape 9 : planifier la maintenance de base avec cron

Cron gère les tâches planifiées – celles qui doivent s'exécuter régulièrement sans intervention manuelle. Une simple tâche cron pour le nettoyage des journaux ou la vérification du renouvellement des certificats est une pratique courante sur tout serveur géré.

Préparation pour AlmaLinux/RHEL :

Sur une installation propre d'AlmaLinux 10, nano peut ne pas être installé, et crontab -e ouvrira alors vi. Pour utiliser nano à la place, exécutez cette commande en une seule ligne, qui s'exécute proprement dans l'ordre et garantit la persistance de la variable d'environnement :

sudo dnf install nano -y && export EDITOR=nano && crontab -e

Sur les autres systèmes (comme Ubuntu/Debian), ouvrez simplement le crontab de l'utilisateur courant :

crontab -e

Lors de la première exécution (sous Ubuntu/Debian), il vous sera demandé de choisir un éditeur. Sélectionnez nano (option 1).

Exemples de tâches cron courantes

Exécuter une tâche chaque nuit à 2 h 00 :

0 2 * * * /usr/local/bin/my-maintenance-script.sh >> /var/log/maintenance.log 2>&1

Renouveler les certificats SSL chaque semaine (pour les utilisateurs de Certbot) :

0 3 * * 0 certbot renew --quiet >> /var/log/certbot-renew.log 2>&1

Supprimer les fichiers temporaires chaque mois :

0 4 1 * * find /tmp -type f -atime +30 -delete

Info

Cron utilise le format minute heure jour-du-mois mois jour-de-la-semaine commande. La partie >> /var/log/task.log 2>&1 redirige à la fois stdout et stderr vers un fichier journal, ce qui vous permet de consulter ensuite ce qui s'est passé.

Vérifiez que vos tâches cron sont bien enregistrées :

crontab -l

Vous devriez voir les entrées que vous avez ajoutées. Cron relit le fichier automatiquement – aucun rechargement n'est nécessaire. Pour vérifier que le service cron fonctionne, utilisez :

Ubuntu/Debian :

sudo systemctl status cron

AlmaLinux/RHEL :

sudo systemctl status crond

Vérification

Parcourez cette liste de contrôle pour confirmer que tout a été correctement appliqué :

Vérifiez le nom d'hôte :

hostnamectl | grep hostname

Confirmez que la connexion SSH root et l'authentification par mot de passe sont désactivées (cela vérifie la configuration active à l'exécution) :

sudo sshd -T | grep -iE "permitrootlogin|passwordauthentication"

Attendu :

permitrootlogin no passwordauthentication no

Confirmez que le service SSH fonctionne :

# For Ubuntu 24.04: sudo systemctl status ssh.socket # For Debian / Older Ubuntu: sudo systemctl status ssh # For AlmaLinux: sudo systemctl status sshd

Vérifiez l'état du pare-feu (Ubuntu/Debian) :

sudo ufw status verbose

Vérifiez la synchronisation NTP :

timedatectl status | grep -E "synchronized|NTP"

Attendu :

System clock synchronized: yes NTP service: active

Vérifiez les mises à jour automatiques (Ubuntu/Debian) :

cat /etc/apt/apt.conf.d/20auto-upgrades

Listez les tâches cron actives :

crontab -l

Retour arrière (rollback)

Pour annuler certaines étapes en cas de problème :

Réactiver la connexion SSH root (si vous vous êtes verrouillé hors du serveur et que vous récupérez l'accès via la console) :

# Re-enable root/password login temporarily for recovery sudo rm /etc/ssh/sshd_config.d/00-hardening.conf sudo sshd -t # Restart SSH (use the variant for your system): sudo systemctl restart ssh.socket # Ubuntu 24.04 sudo systemctl restart ssh # Debian / older Ubuntu sudo systemctl restart sshd # AlmaLinux/RHEL

Désactiver UFW :

sudo ufw disable

Supprimer unattended-upgrades (Ubuntu/Debian) :

sudo apt remove unattended-upgrades -y

Supprimer dnf-automatic (AlmaLinux) :

sudo systemctl disable --now dnf-automatic.timer sudo dnf remove dnf-automatic -y

Supprimer une tâche cron :

crontab -e # Delete the relevant line, save and exit

Warning

Réactiver la connexion root ou l'authentification par mot de passe annule l'essentiel du durcissement de sécurité réalisé dans ce guide. Ne le faites que temporairement pour récupérer l'accès, puis verrouillez à nouveau.

Conclusion

Voilà pour la liste de contrôle post-installation Linux complète. Vous disposez désormais d'un serveur avec un nom d'hôte approprié, des paquets entièrement à jour, un utilisateur sudo non root, l'authentification par clé SSH en place, la connexion root désactivée, un pare-feu configuré, NTP synchronisé, des mises à jour de sécurité automatiques en service et un planning de tâches cron prêt à être étendu. C'est la configuration de base d'un serveur Linux après installation que tout VPS devrait avoir avant que quoi que ce soit d'autre y soit déployé.

La suite logique dépend de la finalité du serveur :

  • Serveur web : installez Nginx ou Apache, configurez un hôte virtuel (virtual host) et mettez en place SSL avec Certbot
  • Base de données : installez et durcissez MySQL/MariaDB ou PostgreSQL
  • Supervision : mettez en place l'agrégation des journaux (par ex. logrotate) ou un agent de supervision léger
  • Contrôle d'accès : examinez la configuration de sudoers et ajoutez les membres de l'équipe selon le même schéma qu'à l'étape 3

La liste de contrôle de configuration initiale d'un serveur Linux ne s'arrête pas ici – elle évolue avec le rôle du serveur. Mais cette base constitue le point de départ incontournable.

Version du document : 1.0
Dernière mise à jour : mai 2026
Propriétaire : équipe de documentation technique

VAT

  • Other

    Ex. VAT

    0%
  • austria

    Austria

    20%
  • Belgium

    Belgium

    21%
  • Bulgaria

    Bulgaria

    20%
  • Croatia

    Croatia

    25%
  • Cyprus

    Cyprus

    19%
  • Czech Republic

    Czech Republic

    21%
  • Denmark

    Denmark

    25%
  • Estonia

    Estonia

    22%
  • France

    France

    20%
  • Finland

    Finland

    24%
  • Germany

    Germany

    19%
  • Greece

    Greece

    24%
  • Hungary

    Hungary

    27%
  • Ireland

    Ireland

    23%
  • Italy

    Italy

    22%
  • Latvia

    Latvia

    21%
  • Lithuania

    Lithuania

    21%
  • Luxembourg

    Luxembourg

    17%
  • Malta

    Malta

    18%
  • Netherlands

    Netherlands

    21%
  • Poland

    Poland

    23%
  • Portugal

    Portugal

    23%
  • Romania

    Romania

    19%
  • Slovakia

    Slovakia

    20%
  • Slovenia

    Slovenia

    22%
  • Spain

    Spain

    21%
  • Sweden

    Sweden

    25%
  • USA

    USA

    0%
european
states
  • germany
  • Español
  • Italiano
  • Poland
  • Русский
  • Slovenski
  • Türkçe
  • kingdom
  • French
  • Hrvatska
  • Other
  • Austria
  • Belgium
  • Bulgaria
  • Croatia
  • Cyprus
  • Czech Republic
  • Denmark
  • Estonia
  • Finland
  • France
  • Germany
  • Greece
  • Hungary
  • Ireland
  • Italy
  • Latvia
  • Lithuania
  • Luxembourg
  • Malta
  • Netherlands
  • Poland
  • Portugal
  • Romania
  • Slovakia
  • Slovenia
  • Spain
  • Sweden
  • USA