La sécurité d’un serveur Ubuntu commence dès sa configuration initiale. Dans ce guide pratique, nous allons voir comment mettre en place les bases d’une configuration sécurisée en créant un utilisateur avec droits sudo, en configurant l’authentification SSH par clé et en désactivant l’accès root.
Pourquoi sécuriser votre serveur ?
Par défaut, les serveurs Ubuntu sont souvent configurés avec un accès root direct et une authentification par mot de passe. Cette configuration présente des risques importants :
- Les attaques par force brute sur le compte root sont courantes
- Les mots de passe peuvent être compromis
- Un accès root direct offre un contrôle total sans aucune barrière
En suivant ce guide, vous allez mettre en place une configuration bien plus robuste.
Étape 1 : Créer un utilisateur avec droits limités
La première étape consiste à créer un utilisateur dédié. Dans cet exemple, nous créons l’utilisateur ben.
Connectez-vous à votre serveur en tant que root (ou avec un compte ayant déjà les droits sudo) et exécutez :
adduser benLe système vous demandera de définir un mot de passe et quelques informations optionnelles. Ce mot de passe sera temporaire si vous souhaitez utiliser uniquement l’authentification par clé SSH.
Étape 2 : Attribuer les droits sudo
Pour permettre à votre nouvel utilisateur d’effectuer des tâches administratives, ajoutez-le au groupe sudo :
usermod -aG sudo benVotre utilisateur ben peut maintenant exécuter des commandes avec sudo en préfixant ses commandes.
Étape 3 : Configurer l’authentification SSH par clé
L’authentification par clé SSH est bien plus sécurisée qu’un mot de passe. Voici comment la mettre en place.
3.1 Générer une paire de clés SSH
Sur votre poste client (votre ordinateur local), générez une paire de clés si vous n’en avez pas déjà :
ssh-keygen -t ed25519 -C "ben@monserveur"Cette commande crée deux fichiers :
~/.ssh/id_ed25519: votre clé privée (à garder secrète)~/.ssh/id_ed25519.pub: votre clé publique (à copier sur le serveur)
3.2 Copier la clé publique sur le serveur
La méthode la plus simple est d’utiliser ssh-copy-id :
ssh-copy-id ben@IP_DU_SERVEURSi cette commande n’est pas disponible, vous pouvez copier manuellement le contenu de ~/.ssh/id_ed25519.pub dans le fichier /home/ben/.ssh/authorized_keys sur votre serveur.
Vérifiez ensuite les permissions (important pour que SSH accepte la clé) :
chmod 700 /home/ben/.ssh
chmod 600 /home/ben/.ssh/authorized_keys
chown -R ben:ben /home/ben/.ssh3.3 Désactiver l’authentification par mot de passe
Maintenant que l’authentification par clé fonctionne, désactivons les mots de passe dans SSH.
Éditez le fichier de configuration SSH :
sudo nano /etc/ssh/sshd_configModifiez ou ajoutez ces lignes :
PermitRootLogin no
PasswordAuthentication no
PubkeyAuthentication yes
PrintMotd no
UsePAM yes
#Include /etc/ssh/sshd_config.d/*.confExplications des paramètres :
PermitRootLogin no: Interdit la connexion directe en tant que rootPasswordAuthentication no: Désactive l’authentification SSH par mot de passePubkeyAuthentication yes: Active l’authentification par clé publiquePrintMotd no: Désactive l’affichage du MOTD statique (on utilisera uniquement les scripts dynamiques PAM)UsePAM yes: Active PAM pour la gestion des sessions et des scripts dynamiques (comme le MOTD)#Include /etc/ssh/sshd_config.d/*.conf: Commente l’inclusion des fichiers de configuration supplémentaires
Sauvegardez et rechargez le service SSH :
sudo systemctl restart ssh⚠️ Avertissement important
Avant de fermer votre session root actuelle, ouvrez une nouvelle session SSH avec votre utilisateur ben pour vérifier que l’authentification par clé fonctionne correctement. Si quelque chose ne fonctionne pas, vous pourrez corriger le problème depuis votre session root toujours ouverte.
Étape 4 : Verrouiller le compte root
Une fois que vous êtes certain que ben peut se connecter avec sa clé SSH et utiliser sudo, verrouillez le compte root :
sudo passwd -l rootCette commande désactive le mot de passe du compte root, empêchant toute connexion directe.
Bonus : Personnaliser votre serveur
Changer le hostname
Le hostname (nom de la machine) est important pour identifier votre serveur. Voici comment le modifier.
Méthode recommandée : avec hostnamectl
Pour définir le hostname monserveur :
sudo hostnamectl set-hostname monserveurVérifiez le changement :
hostnamectlMéthode alternative : modification manuelle
- Éditez
/etc/hostname:
sudo nano /etc/hostnameRemplacez le contenu par votre nouveau nom (ex : monserveur).
- Mettez à jour
/etc/hosts:
sudo nano /etc/hostsModifiez la ligne avec 127.0.1.1 :
127.0.0.1 localhost
127.0.1.1 monserveur- Redémarrez le serveur pour appliquer les changements :
sudo rebootPersonnaliser le message d’accueil (MOTD)
Le MOTD (Message Of The Day) est le message affiché à chaque connexion SSH. C’est l’occasion de personnaliser l’accueil de votre serveur.
Méthode 1 : Message statique simple
Créez ou modifiez le fichier /etc/motd :
sudo nano /etc/motdAjoutez votre message personnalisé :
Bienvenue sur le serveur de sauvegarde 🖥️
Dernière mise à jour : mai 2025Ce message s’affichera à chaque connexion si Ubuntu n’utilise pas le système dynamique update-motd.
Méthode 2 : Système dynamique avec update-motd
Ubuntu utilise généralement un système dynamique basé sur des scripts situés dans /etc/update-motd.d/. Chaque script est exécuté au login et leur sortie combinée forme le MOTD.
Désactiver les messages par défaut non souhaités :
Par exemple, pour désactiver l’affichage des mises à jour disponibles :
sudo chmod -x /etc/update-motd.d/90-updates-availableVous pouvez désactiver d’autres scripts de la même façon en retirant leur droit d’exécution.
Créer un message personnalisé dynamique :
Créez un nouveau script :
sudo nano /etc/update-motd.d/01-customAjoutez ce contenu (exemple avec informations dynamiques) :
#!/bin/bash
echo "Bienvenue $(whoami) sur $(hostname) !"
echo "Nous sommes le $(date '+%A %d %B %Y')"
echo "--------------------------------------"Rendez le script exécutable :
sudo chmod +x /etc/update-motd.d/01-customTester le MOTD sans se déconnecter :
run-parts /etc/update-motd.d/Cette commande affiche le MOTD tel qu’il apparaîtra à la prochaine connexion.
Récapitulatif : Ce que vous avez accompli
✅ Utilisateur dédié : ben existe avec les droits sudo
✅ SSH sécurisé : Authentification par clé uniquement
✅ Root protégé : Le compte root ne peut plus se connecter
✅ Hostname personnalisé : Votre serveur a un nom identifiable
Bonnes pratiques supplémentaires
Pour aller plus loin dans la sécurisation de votre serveur :
- Configurez un firewall : Utilisez
ufwpour n’autoriser que les ports nécessaires - Installez fail2ban : Protégez-vous contre les attaques par force brute
- Mettez à jour régulièrement :
sudo apt update && sudo apt upgrade - Surveillez les logs : Consultez
/var/log/auth.logpour détecter les tentatives d’intrusion - Changez le port SSH : Utilisez un port non-standard (à modifier dans
/etc/ssh/sshd_config)
Conclusion
La sécurisation d’un serveur Ubuntu ne se limite pas à ces étapes, mais elles constituent une base solide pour commencer. En appliquant ces configurations dès l’installation, vous réduisez considérablement les risques d’intrusion et adoptez les bonnes pratiques recommandées par les administrateurs système.
N’hésitez pas à automatiser ces étapes avec un script bash si vous devez configurer plusieurs serveurs !
Avez-vous des questions sur la configuration de votre serveur Ubuntu ? Partagez votre expérience dans les commentaires !

Hello merci pour cet article, juste deux choses à noter pour les bonnes pratiques:
– fail2ban c’est dépassé: crowdsec est le nouveau roi
– le changement de port SSH c’est une fausse bonne idée. Les robots scannent absolument toutes les plages par intermittence, si serveur ssh il y a, ils le trouveront. Le port knocking peut être une bonne idée (https://wiki.archlinux.org/title/Port_knocking) si vraiment nécessité d’ouvrir un serveur SSH sur le web, sinon l’accès via vpn (puis tunnel ssh) est très bien aussi.
Salut,
Merci pour le partage de ces bonnes pratiques.
Si je peux me permettre une suggestion, ce serait de conserver le compte root actif, mais de ne pas ajouter sudo à l’utilisateur qui sert de login. Ainsi une action administrateur nécessitera une double protection, et le workflow deviendrait alors le suivant :
> SSH compte utilisateur (clé SSH uniquement) –>su – (password) –> droits admins
Quant au renommage des serveurs, il est possible de faire prendre en compte le changement du hostname à chaud sans redémarrer, en utilisant la commande suivante :
« `
~# hostname -F /etc/hostname
~# bash #optionnel, pour voir le nouveau hostname sur le prompt
« `