Configuration initiale d'un serveur Ubuntu : 9 étapes pour démarrer sur un serveur Ubuntu fraîchement installé

Environnement de testFamille DebianUbuntu 24.04.5 LTSroot · compte utilisateur standard
Travaux de configuration initiale du serveur Ubuntu vérifiés

Quand vous recevez un nouveau serveur, vous effectuez une fois la configuration initiale du serveur Ubuntu avant d'y déployer des services. Sur un serveur Ubuntu 24.04 créé chez DigitalOcean, nous nous sommes connectés en root et avons tout configuré dans l'ordre, des mises à jour des paquets à un utilisateur sudo, la connexion par clé, le pare-feu, le fuseau horaire, les mises à jour de sécurité automatiques et le swap, puis avons vérifié que les réglages restaient en place après un redémarrage.

Les cadres de résultat ci-dessous sont la sortie des commandes exécutées dans cet ordre. L'IP du serveur 203.0.113.10 est une valeur d'exemple, et le nouvel utilisateur standard s'appelle deploy.

🎯 Points clés
Mises à jour des paquets et vérification du redémarrage nécessaire
sudo activé pour l'utilisateur standard deploy
deploy (connexion par clé vérifiée), puis root (connexion bloquée)
ufw n'autorise que SSH, 80 et 443
Changement de fuseau horaire et vérification des mises à jour de sécurité automatiques
Fichier swap de 2GB et réglages conservés après redémarrage
Prérequis
À lire d'abordssh-keygenssh Commande
Connexionroot : clé SSH pour se connecter et un serveur Ubuntu 24.04

1️⃣ Mise à jour des paquets Ubuntu

Même un serveur tout juste créé a des mises à jour en attente. Après avoir téléchargé une liste de paquets à jour, vérifiez ce qui va changer avant d'installer quoi que ce soit.

🔲 apt-get update

export DEBIAN_FRONTEND=noninteractive

Les commandes apt-get ci-dessous ont été exécutées après avoir d'abord défini cette valeur. Avec elle, aucune fenêtre ne demande de réglage pendant l'installation des paquets et les réponses par défaut s'appliquent.

apt-get update
Hit:1 http://mirrors.digitalocean.com/ubuntu noble InRelease
Hit:2 http://mirrors.digitalocean.com/ubuntu noble-updates InRelease
Hit:3 http://mirrors.digitalocean.com/ubuntu noble-backports InRelease
Hit:4 https://repos-droplet.digitalocean.com/apt/droplet-agent main InRelease
Hit:5 http://security.ubuntu.com/ubuntu noble-security InRelease
Reading package lists...

🔲 apt-get -s upgrade

apt-get -s upgrade
Calculating upgrade...
The following upgrades have been deferred due to phasing:
  libsqlite3-0
The following packages will be upgraded:
  apt apt-transport-https apt-utils bind9-dnsutils bind9-host bind9-libs
  cloud-init distro-info-data gir1.2-glib-2.0 git git-man libapt-pkg6.0t64
  libbrotli1 libglib2.0-0t64 libglib2.0-bin libglib2.0-data liblzma5
  libmspack0t64 libpcre2-8-0 python3-jwt python3-twisted tmux
  ubuntu-pro-client ubuntu-pro-client-l10n xz-utils zlib1g
26 upgraded, 0 newly installed, 0 to remove and 1 not upgraded.

L'option -s est une exécution simulée qui calcule seulement le résultat sans rien installer. Sur ce serveur, 26 paquets étaient à mettre à niveau, et libsqlite3-0 a été écarté de cette mise à niveau avec [deferred due to phasing]. Le nombre de paquets varie d'un serveur à l'autre selon la date de création du serveur et l'image utilisée.

🔲 apt-get -y upgrade

apt-get -y upgrade
26 upgraded, 0 newly installed, 0 to remove and 1 not upgraded.
Need to get 15.4 MB of archives.
After this operation, 398 kB of additional disk space will be used.

Une fois l'installation terminée, la liste des services redémarrés s'affiche ensuite.

Running kernel seems to be up-to-date.

Restarting services...
 /etc/needrestart/restart.d/systemd-manager
 systemctl restart cron.service fwupd.service multipathd.service packagekit.service polkit.service ssh.service systemd-journald.service systemd-networkd.service systemd-resolved.service systemd-timesyncd.service systemd-udevd.service udisks2.service

Service restarts being deferred:
 systemctl restart ModemManager.service
 /etc/needrestart/restart.d/dbus.service
 systemctl restart systemd-logind.service
 systemctl restart unattended-upgrades.service

Quand une mise à jour qui nécessite un redémarrage est installée, le fichier /var/run/reboot-required est créé. Cette fois, [Running kernel seems to be up-to-date.] s'est affiché et le fichier n'a pas été créé, nous sommes donc passés à l'étape suivante sans redémarrer.

2️⃣ Ubuntu : ajouter un utilisateur et les droits sudo

Le travail courant se fait avec un utilisateur standard, et seules les commandes d'administration s'exécutent avec sudo. sudo élève les droits avec votre propre mot de passe au lieu de celui de root, si bien qu'il reste une trace de qui a exécuté quelle commande.

🔲 adduser deploy

adduser deploy
info: Adding user `deploy' ...
info: Selecting UID/GID from range 1000 to 59999 ...
info: Adding new group `deploy' (1000) ...
info: Adding new user `deploy' (1000) with group `deploy (1000)' ...
info: Creating home directory `/home/deploy' ...
info: Copying files from `/etc/skel' ...
New password: 
Retype new password: 
passwd: password updated successfully
Changing the user information for deploy
Enter the new value, or press ENTER for the default
	Full Name []: 
	Room Number []: 
	Work Phone []: 
	Home Phone []: 
	Other []: 
Is the information correct? [Y/n] Y
info: Adding new user `deploy' to supplemental / extra groups `users' ...
info: Adding user `deploy' to group `users' ...

adduser est une surcouche de useradd : il crée le dossier personnel et le groupe, puis demande tour à tour le mot de passe et les informations de l'utilisateur. Le mot de passe ne s'affiche pas à l'écran pendant la saisie, et les informations comme le nom ou le numéro de téléphone peuvent rester vides avec Entrée.

🔲 usermod -aG sudo deploy

usermod -aG sudo deploy
groups deploy
deploy : deploy sudo users

🔲 su

Les utilisateurs du groupe sudo peuvent exécuter des commandes d'administration avec sudo. Passez au compte deploy avec su et vérifiez ses droits.

su - deploy
To run a command as administrator (user "root"), use "sudo <command>".
See "man sudo_root" for details.
whoami
deploy
sudo whoami
[sudo] password for deploy: 
root
exit

Avec sudo, le mot de passe de deploy est demandé et, s'il est correct, la commande s'exécute avec les droits root.

3️⃣ Enregistrer la clé SSH du nouvel utilisateur

Au départ, seul root a une clé SSH enregistrée, donc la connexion par clé ne fonctionne pas avec deploy. Copiez le authorized_keys de root dans le dossier personnel de deploy.

🔲 install -o deploy -g deploy

install -d -m 700 -o deploy -g deploy /home/deploy/.ssh
install -m 600 -o deploy -g deploy /root/.ssh/authorized_keys /home/deploy/.ssh/authorized_keys
ls -la /home/deploy/.ssh
total 12
drwx------ 2 deploy deploy 4096 Nov  5 11:48 .
drwxr-x--- 3 deploy deploy 4096 Nov  5 11:48 ..
-rw------- 1 deploy deploy  100 Nov  5 11:48 authorized_keys

install crée le dossier, copie le fichier et définit le propriétaire et les droits en une seule fois. sshd vérifie les droits et le propriétaire des fichiers de l'utilisateur avant d'accepter une connexion (StrictModes), donc réglez le dossier .ssh sur 700 et authorized_keys sur 600.

🔲 ssh deploy@203.0.113.10

Ne fermez pas la fenêtre root ouverte ; vérifiez d'abord dans une nouvelle fenêtre de terminal que vous pouvez vous connecter en deploy.

ssh deploy@203.0.113.10
whoami
deploy
🧭 Un ordre de configuration qui ne vous enferme pas dehors
Schéma explicatif
🧭 Étapes
🔑① Copier la cléClé root vers deploy
➜
🪟② Vérifier dans une nouvelle fenêtreFenêtre root laissée ouverte
➜
⛔③ Bloquer rootPermitRootLogin no
➜
🪟④ Vérifier dans une nouvelle fenêtreConnexion deploy intacte
✅⑤ Autoriser SSHufw allow OpenSSH
➜
🧱⑥ Activer ufwSeuls les ports autorisés sont ouverts
➜
🪟⑦ Vérifier dans une nouvelle fenêtreConnexion intacte
Copiez le authorized_keys de root dans le dossier personnel de deploy.
Ne fermez pas la fenêtre root ouverte ; vérifiez dans une nouvelle fenêtre de terminal que la connexion par clé fonctionne en deploy.
Bloquez la connexion root seulement après avoir confirmé la connexion deploy. Si la connexion échoue dans la nouvelle fenêtre, annulez la modification dans la fenêtre restée ouverte.
Après avoir rechargé les réglages SSH, vérifiez dans une nouvelle fenêtre que la connexion deploy fonctionne toujours.
Avant d'activer le pare-feu, ajoutez d'abord la règle qui autorise SSH.
Dès qu'il est activé, toute connexion non autorisée est bloquée, la règle qui autorise SSH doit donc être en place avant.
Après avoir activé le pare-feu, vérifiez dans une nouvelle fenêtre que vous pouvez de nouveau vous connecter en deploy.

4️⃣ Bloquer la connexion root en SSH

Sous Ubuntu 24.04, la ligne Include en haut de sshd_config charge d'abord les fichiers du dossier /etc/ssh/sshd_config.d/, et pour un même réglage c'est la valeur lue en premier qui s'applique. Avant de modifier quoi que ce soit, vérifiez donc la valeur appliquée actuellement et le fichier qui la contient.

/etc/ssh└─ sshd_config  en haut : Include /etc/ssh/sshd_config.d/*.conf   ├─ ① sshd_config.d/50-cloud-init.conf         PasswordAuthentication no   ├─ ② sshd_config.d/60-cloudimg-settings.conf  PasswordAuthentication no   └─ ③ sshd_config ligne 42                     PermitRootLogin yes → no

🔲 sshd -T

sudo sshd -T | grep -E '^(permitrootlogin|passwordauthentication) '
permitrootlogin yes
passwordauthentication no
sudo grep -rn 'PasswordAuthentication' /etc/ssh/sshd_config.d/
/etc/ssh/sshd_config.d/60-cloudimg-settings.conf:1:PasswordAuthentication no
/etc/ssh/sshd_config.d/50-cloud-init.conf:1:PasswordAuthentication no

La connexion par mot de passe est déjà désactivée dans deux fichiers de sshd_config.d ; la seule chose à changer est la ligne de connexion root dans le fichier principal.

🔲 sed -i PermitRootLogin

sudo grep -n '^PermitRootLogin' /etc/ssh/sshd_config
42:PermitRootLogin yes
sudo sed -i 's/^PermitRootLogin yes/PermitRootLogin no/' /etc/ssh/sshd_config
sudo grep -n '^PermitRootLogin' /etc/ssh/sshd_config
42:PermitRootLogin no

🔲 systemctl reload ssh

sudo sshd -t
sudo systemctl reload ssh
sudo sshd -T | grep -E '^(permitrootlogin|passwordauthentication) '
permitrootlogin no
passwordauthentication no

sshd -t vérifie la syntaxe de la configuration, et si rien ne s'affiche, il n'y a pas d'erreur. Après le rechargement, confirmez dans une nouvelle fenêtre que la connexion deploy fonctionne toujours, puis connectez-vous en root pour constater le refus.

ssh root@203.0.113.10
root@203.0.113.10: Permission denied (publickey).

Même avec la bonne clé, vous ne pouvez pas entrer en root ; les tâches d'administration se font en vous connectant en deploy et en utilisant sudo.

5️⃣ Pare-feu Ubuntu ufw

ufw est l'outil de pare-feu par défaut d'Ubuntu, mais il est désactivé au départ. Dès qu'il est activé, toute connexion non autorisée est bloquée, donc ajoutez d'abord la règle qui autorise SSH et activez-le en dernier.

sudo ufw status verbose
Status: inactive

🔲 ufw allow OpenSSH

sudo ufw app list
Available applications:
  OpenSSH
sudo ufw allow OpenSSH
Rules updated
Rules updated (v6)
sudo ufw allow 80/tcp
Rules updated
Rules updated (v6)
sudo ufw allow 443/tcp
Rules updated
Rules updated (v6)
sudo ufw show added
Added user rules (see 'ufw status' for running firewall):
ufw allow OpenSSH
ufw allow 80/tcp
ufw allow 443/tcp

OpenSSH est un profil qui ouvre le port 22, et 80 et 443 sont les ports utilisés par un serveur web. Les règles s'appliquent à la fois à IPv4 et à IPv6.

🔲 ufw enable

sudo ufw enable
Command may disrupt existing ssh connections. Proceed with operation (y|n)? y
Firewall is active and enabled on system startup
sudo ufw status verbose
Status: active
Logging: on (low)
Default: deny (incoming), allow (outgoing), disabled (routed)
New profiles: skip

To                         Action      From
--                         ------      ----
22/tcp (OpenSSH)           ALLOW IN    Anywhere                  
80/tcp                     ALLOW IN    Anywhere                  
443/tcp                    ALLOW IN    Anywhere                  
22/tcp (OpenSSH (v6))      ALLOW IN    Anywhere (v6)             
80/tcp (v6)                ALLOW IN    Anywhere (v6)             
443/tcp (v6)               ALLOW IN    Anywhere (v6)             

Les connexions entrantes sont bloquées par défaut, seuls les trois ports autorisés sont ouverts, et le pare-feu s'active aussi au démarrage. Après l'activation, reconnectez-vous en deploy dans une nouvelle fenêtre et vérifiez les numéros de règles.

sudo ufw status numbered
Status: active

     To                         Action      From
     --                         ------      ----
[ 1] OpenSSH                    ALLOW IN    Anywhere                  
[ 2] 80/tcp                     ALLOW IN    Anywhere                  
[ 3] 443/tcp                    ALLOW IN    Anywhere                  
[ 4] OpenSSH (v6)               ALLOW IN    Anywhere (v6)             
[ 5] 80/tcp (v6)                ALLOW IN    Anywhere (v6)             
[ 6] 443/tcp (v6)               ALLOW IN    Anywhere (v6)             

6️⃣ Réglage du fuseau horaire sur Ubuntu

Le fuseau horaire initial est Etc/UTC. Pour aligner l'heure des journaux et des tâches planifiées sur la région du serveur, ce serveur créé dans la région de Singapour a été réglé sur Asia/Singapore.

timedatectl
               Local time: Thu 2026-11-05 12:00:31 UTC
           Universal time: Thu 2026-11-05 12:00:31 UTC
                 RTC time: Thu 2026-11-05 12:00:31
                Time zone: Etc/UTC (UTC, +0000)
System clock synchronized: yes
              NTP service: active
          RTC in local TZ: no

🔲 timedatectl list-timezones

timedatectl list-timezones | grep Singapore
Asia/Singapore

🔲 timedatectl set-timezone

sudo timedatectl set-timezone Asia/Singapore
timedatectl
               Local time: Thu 2026-11-05 20:00:32 +08
           Universal time: Thu 2026-11-05 12:00:32 UTC
                 RTC time: Thu 2026-11-05 12:00:32
                Time zone: Asia/Singapore (+08, +0800)
System clock synchronized: yes
              NTP service: active
          RTC in local TZ: no

Seules les lignes Local time et Time zone changent ; la synchronisation de l'horloge (NTP) et l'heure UTC restent identiques.

7️⃣ unattended upgrades : mises à jour de sécurité automatiques

Ubuntu installe automatiquement les mises à jour de sécurité avec le paquet unattended-upgrades, installé et activé dès le départ. Dans cette étape, vérifiez donc qu'il est activé et ce qu'il installe automatiquement.

🔲 dpkg-query -W

dpkg-query -W unattended-upgrades
unattended-upgrades	2.9.1+nmu4ubuntu1
systemctl is-enabled unattended-upgrades apt-daily.timer apt-daily-upgrade.timer
enabled
enabled
enabled

🔲 cat 20auto-upgrades

cat /etc/apt/apt.conf.d/20auto-upgrades
APT::Periodic::Update-Package-Lists "1";
APT::Periodic::Unattended-Upgrade "1";

Le 1 des deux valeurs signifie une fois par jour, et le passer à 0 désactive les mises à jour automatiques. Ce qui est installé est défini par le fichier 50unattended-upgrades.

grep -vE '^[[:space:]]*(//|$)' /etc/apt/apt.conf.d/50unattended-upgrades
Unattended-Upgrade::Allowed-Origins {
	"${distro_id}:${distro_codename}";
	"${distro_id}:${distro_codename}-security";
	"${distro_id}ESMApps:${distro_codename}-apps-security";
	"${distro_id}ESM:${distro_codename}-infra-security";
};
Unattended-Upgrade::Package-Blacklist {
};
Unattended-Upgrade::DevRelease "auto";

Les origines autorisées comprennent -security mais pas -updates, donc les mises à jour normales ne sont pas installées automatiquement et seules les mises à jour de sécurité le sont. Pour recevoir aussi les mises à jour normales automatiquement, décommentez la ligne -updates dans ce fichier.

🔲 unattended-upgrade

sudo unattended-upgrade --dry-run --debug
Starting unattended upgrades script
Allowed origins are: o=Ubuntu,a=noble, o=Ubuntu,a=noble-security, o=UbuntuESMApps,a=noble-apps-security, o=UbuntuESM,a=noble-infra-security

Ce sont les deux dernières lignes de la même exécution.

No packages found that can be upgraded unattended and no pending auto-removals
The list of kept packages can't be calculated in dry-run mode.

--dry-run calcule seulement ce que ferait la mise à jour automatique, sans rien installer. Comme les mises à jour des paquets étaient déjà faites, il n'y avait aucun paquet à installer automatiquement. Les journaux des exécutions réelles sont conservés dans le dossier /var/log/unattended-upgrades/.

sudo ls -l /var/log/unattended-upgrades/
total 32
-rw-r--r-- 1 root root     0 Nov  5 20:00 unattended-upgrades-dpkg.log
-rw-r--r-- 1 root root     0 Nov  5 17:34 unattended-upgrades-shutdown.log
-rw-r--r-- 1 root root 29093 Nov  5 20:04 unattended-upgrades.log

8️⃣ Configuration de la mémoire swap sur Ubuntu

Ce serveur a 1GB de mémoire et pas de swap au départ. Avant d'y déployer des applications, créez un fichier swap de 2GB et inscrivez-le dans /etc/fstab pour qu'il soit aussi activé après un redémarrage.

free -h
               total        used        free      shared  buff/cache   available
Mem:           961Mi       328Mi       161Mi       4.0Mi       631Mi       633Mi
Swap:             0B          0B          0B
df -h /
Filesystem      Size  Used Avail Use% Mounted on
/dev/vda1        24G  2.0G   22G   9% /

🔲 fallocate -l 2G /swapfile

sudo fallocate -l 2G /swapfile
sudo chmod 600 /swapfile
ls -lh /swapfile
-rw------- 1 root root 2.0G Nov  5 20:04 /swapfile

🔲 mkswap /swapfile

sudo mkswap /swapfile
Setting up swapspace version 1, size = 2 GiB (2147479552 bytes)
no label, UUID=0b43ccd8-5b4a-4048-9b84-eee12667b387

🔲 swapon /swapfile

sudo swapon /swapfile
swapon --show
NAME      TYPE SIZE USED PRIO
/swapfile file   2G   0B   -2
free -h
               total        used        free      shared  buff/cache   available
Mem:           961Mi       328Mi       160Mi       4.0Mi       632Mi       632Mi
Swap:          2.0Gi          0B       2.0Gi

🔲 tee -a /etc/fstab

swapon l'active seulement pour le moment ; pour qu'il soit aussi activé après un redémarrage, ajoutez une ligne dans fstab.

echo '/swapfile none swap sw 0 0' | sudo tee -a /etc/fstab
/swapfile none swap sw 0 0

9️⃣ Vérification de la configuration initiale du serveur Ubuntu

Une fois que vous avez vérifié que les réglages survivent à un redémarrage, la configuration initiale d'Ubuntu est terminée.

🔲 systemctl reboot

sudo systemctl reboot

🔲 uptime -p

Après le redémarrage, reconnectez-vous en deploy.

uptime -p
up 2 minutes
swapon --show
NAME      TYPE SIZE USED PRIO
/swapfile file   2G   0B   -2
sudo sshd -T | grep -E '^(permitrootlogin|passwordauthentication) '
permitrootlogin no
passwordauthentication no
sudo ufw status verbose
Status: active
Logging: on (low)
Default: deny (incoming), allow (outgoing), disabled (routed)
New profiles: skip

To                         Action      From
--                         ------      ----
22/tcp (OpenSSH)           ALLOW IN    Anywhere                  
80/tcp                     ALLOW IN    Anywhere                  
443/tcp                    ALLOW IN    Anywhere                  
22/tcp (OpenSSH (v6))      ALLOW IN    Anywhere (v6)             
80/tcp (v6)                ALLOW IN    Anywhere (v6)             
443/tcp (v6)               ALLOW IN    Anywhere (v6)             
timedatectl | head -n 4
               Local time: Thu 2026-11-05 20:06:35 +08
           Universal time: Thu 2026-11-05 12:06:35 UTC
                 RTC time: Thu 2026-11-05 12:06:35
                Time zone: Asia/Singapore (+08, +0800)
systemctl is-active unattended-upgrades ssh.socket
active
active

Le swap, les réglages SSH, le pare-feu, le fuseau horaire et les mises à jour automatiques sont tous identiques à avant le redémarrage. Ensuite, une application Node.js est déployée sur ce serveur avec PM2 et Nginx.

🔢 FAQ & contenus recommandés

Vous pouvez le laisser tel quel. Un paquet écarté avec [deferred due to phasing] est une mise à jour en déploiement progressif. Ubuntu publie certaines mises à jour d'abord pour une partie des serveurs seulement et, s'il n'y a pas de problème, élargit le déploiement à tous. Les mises à jour de sécurité ne sont pas déployées progressivement, et le paquet écarté est installé à la mise à niveau suivante une fois le déploiement élargi.

La tâche de mise à jour automatique s'exécute une fois par jour, et les deux minuteurs apt-daily.timer et apt-daily-upgrade.timer la lancent avec un retard aléatoire après une heure fixe. Sur ce serveur, la prochaine exécution de apt-daily-upgrade.timer était prévue le lendemain à 06:27:59 (+08). Si le serveur est éteint et manque cette heure, la tâche peut s'exécuter dès le démarrage suivant, si bien que les tâches apt attendent parfois un instant juste après le démarrage.

Pas avec les réglages par défaut. La valeur par défaut de Automatic-Reboot dans 50unattended-upgrades est false, et cette ligne n'est pas activée non plus dans les réglages de ce serveur. Quand une mise à jour qui nécessite un redémarrage est installée, le fichier /var/run/reboot-required est créé ; redémarrez vous-même quand ce fichier existe.

ℹ️ Mention d'affiliation
Le contenu de ce site contient des liens d'affiliation. Lorsqu'un visiteur achète un produit ou un service via l'un de ces liens, le site perçoit une commission du vendeur. Le montant payé par l'acheteur(il baisse lors des promotions ↓), lui, n'augmente pas. Les prix, remises et stocks indiqués correspondent à la date de rédaction et peuvent différer ; vérifiez-les donc auprès du vendeur avant d'acheter. Les produits sont choisis et évalués selon nos propres critères, et les commissions n'influencent ni l'ordre de présentation ni le contenu des évaluations.

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Prouvez que vous êtes humain : 4   +   1   =