Ubuntu propose un outil officiel pour passer d’une version à la suivante sans tout effacer. Ce guide te montre comment faire, étape par étape, depuis le terminal.
Étape 1 : Sauvegarder tes données (recommandé)
Avant toute mise à niveau majeure du système, sauvegarde tes fichiers importants – documents, photos, fichiers de configuration – sur un disque externe ou dans le cloud.
Étape 2 : Mettre à jour le système actuel
Ta version actuelle d’Ubuntu doit être totalement à jour avant de lancer la mise à niveau.
Ouvre ton terminal (Ctrl + Alt + T) et lance cette commande :
apt update : actualise la liste des paquets disponibles (un « paquet », c’est l’équivalent d’une application ou d’un composant système sous Linux).
dist-upgrade : installe les mises à jour en gérant intelligemment les changements de dépendances (les dépendances, ce sont les composants dont un logiciel a besoin pour fonctionner).
autoremove : supprime les anciens paquets devenus inutiles.
Une fois terminé, redémarre ton ordinateur pour appliquer les changements – notamment si le noyau Linux (le coeur du système) a été mis à jour :
sudo reboot
Étape 3 : Configurer le type de mise à niveau souhaité
Ubuntu doit savoir quel type de version tu recherches. Ouvre le fichier de configuration avec cette commande :
sudo nano /etc/update-manager/release-upgrades
Repère la ligne qui commence par Prompt=. Tu as deux options :
Prompt=lts – recommandé
Te met à jour uniquement vers la prochaine version LTS (Long Term Support, support à long terme). Par exemple, de la 22.04 LTS à la 24.04 LTS, soit un changement tous les 2 ans environ.
Sécurité : maximale, tu reçois toutes les mises à jour de sécurité pour ta version actuelle.
Stabilité : maximale, tu changes de version du système rarement, ce qui réduit le risque de casser tes logiciels ou ta configuration.
Prompt=normal
Te propose toutes les versions stables, y compris les versions intermédiaires sorties tous les 6 mois.
Tu seras obligé de faire une mise à niveau majeure tous les 6 mois, car ces versions intermédiaires ne sont maintenues que pendant 9 mois. Passé ce délai, tu te retrouves avec un système obsolète et non sécurisé.
Changer de version deux fois par an augmente le risque de rencontrer des bugs ou des incompatibilités matérielles.
Modifie si nécessaire, puis sauvegarde avec Ctrl + O (puis Entrée) et quitte avec Ctrl + X.
Étape 4 : Lancer la mise à niveau
Maintenant que tout est prêt, lance l’outil officiel de mise à niveau d’Ubuntu :
sudo do-release-upgrade
Si aucune mise à niveau n’est détectée
Les versions LTS ne proposent parfois la mise à jour automatique qu’après la sortie de leur première version corrective (par exemple, la 24.04.1 plutôt que la 24.04). Dans ce cas, tu peux forcer la recherche avec l’option -d :
sudo do-release-upgrade -d
⚠️ Attention : l’option -d donne accès aux versions en accès anticipé, pas encore totalement stabilisées. À n’utiliser que si tu sais ce que tu fais et que tu as bien sauvegardé tes données au préalable.
Étape 5 : Suivre le processus et patienter
Le terminal t’affiche un résumé des changements prévus – paquets à installer, paquets à supprimer, taille du téléchargement – et te demande de confirmer avec o (pour Oui).
Pendant tout le processus :
Ne ferme pas le terminal.
Ne coupe pas ta connexion internet.
Si le système te demande si tu veux conserver tes fichiers de configuration modifiés ou installer les versions des nouveaux paquets, appuie sur Entrée pour garder le choix par défaut – c’est généralement la bonne option.
Cas particulier : connexion à distance via SSH
Si tu gères l’ordinateur à distance via SSH, do-release-upgrade ouvre automatiquement un port de secours (généralement le port 1022) en cas de coupure de connexion. Suis simplement les instructions affichées à l’écran.
Une fois le processus terminé, le terminal t’invite à redémarrer. Tu peux ensuite vérifier ta nouvelle version avec :
bash
lsb_release -a
Félicitations, tu es sur la nouvelle version stable d’Ubuntu !
Environnement cible : un ordinateur Ubuntu sur lequel sont installés Nginx Reverse Proxy (NPM), Portainer, Home Assistant et Stirling PDF. Tout est déployé sous forme de containers Docker avec des chemins absolus (Bind Mounts), sans volumes nommés. Stirling PDF et Home Assistant sont accessibles via des URL externes, ce qui impose une sécurisation rigoureuse.
L’objectif est d’ajouter Fail2Ban pour passer d’une sécurité passive (certificats Let’s Encrypt) à une sécurité active.
Qu’est-ce que Fail2Ban ?
Les certificats Let’s Encrypt garantissent que la connexion est chiffrée (personne ne peut lire ce qui transite). Fail2Ban agit comme un videur à l’entrée.
Contre les attaques par brute force – sa mission principale. Si quelqu’un tente de deviner un mot de passe sur une page d’authentification, Fail2Ban détecte les échecs répétés dans les logs et bannit l’IP au niveau du pare-feu (iptables).
Contre les bots de scan (DoS léger) – il bloque les robots qui scannent le serveur trop rapidement à la recherche de vulnérabilités.
Contre la recherche de fichiers sensibles – il bannit les IPs qui tentent d’accéder à des dossiers inexistants mais critiques (.env, wp-config.php, /admin).
Résumé : HTTPS garantit que le tuyau est sécurisé, mais pas que la personne au bout du tuyau est autorisée à entrer. Le HTTPS empêche l’espionnage sur le Wi-Fi public. Fail2Ban empêche l’attaquant de frapper 10 000 fois à la porte.
Vérifier le format des logs NPM (étape préalable)
Avant toute configuration, il faut s’assurer que NPM enregistre les vraies IPs publiques des visiteurs dans ses logs, et non l’IP interne du réseau Docker.
Commande de vérification – ouvre un terminal sur Ubuntu et inspecte un fichier de log :
cat /home/USER/docker/nginx-proxy-manager/data/logs/proxy-host-1_access.log | head -20
Cherche le champ [Client X.X.X.X] dans chaque ligne de log.
✓ Si tu vois des IPs publiques (ex: 205.210.x.x, 45.84.x.x) dans [Client …] : NPM transmet déjà les bonnes IPs, aucune configuration supplémentaire n’est nécessaire.
⚠ Si tu vois des IPs internes Docker (ex: 172.18.x.x) dans [Client …] : Fail2Ban sera inefficace et risque de bannir ta passerelle Docker. Ajoute les proxy_set_header dans l’onglet Advanced de chaque Proxy Host dans NPM (voir ci-dessous).
Note importante sur les IPs dans les logs NPM – le champ [Sent-to X.X.X.X] contient l’IP interne de ta machine Linux (destination du trafic) : c’est normal. Le champ [Client X.X.X.X] est la seule IP qui compte pour Fail2Ban (source du trafic entrant).
Si les IPs internes sont présentes – configuration dans NPM – dans l’interface NPM, pour chaque Proxy Host (Stirling PDF, Home Assistant…), onglet Advanced, zone Custom Nginx Configuration, ajoute :
Pourquoi network_mode: host ? En mode host, Fail2Ban partage la pile réseau de la machine Ubuntu. C’est indispensable pour qu’il voie les vraies IPs sources et puisse agir sur iptables.
Pourquoi monter les logs dans /data/nginx/logs ? L’image crazymax/fail2ban a un système de fichiers en lecture seule dans certains répertoires comme /var/log/nginx. Monter les logs dans /data/nginx/logs (qui est le volume /data accessible en écriture) évite cette erreur au démarrage.
Structure des dossiers de configuration
L’image crazymax/fail2ban attend ses fichiers de configuration dans /data/ (dans le conteneur), ce qui correspond à /home/USER/docker/fail2ban/ sur Ubuntu.
Avant de déployer, crée la structure manuellement :
⚠ Ne crée pas de sous-dossier ‘config/’ ou ‘data/’ supplémentaire. Les dossiers action.d, filter.d et jail.d doivent être directement dans /home/USER/docker/fail2ban/.
Note sur les permissions – si les dossiers ont été créés par Docker (au premier démarrage du conteneur), ils appartiennent à root. Utilise sudo pour créer les fichiers, ou reprends la propriété du dossier :
[DEFAULT]
# Temps de bannissement (1h)
bantime = 1h
# Fenetre d'observation (10 min)
findtime = 10m
# Nombre d'erreurs avant bannissement
maxretry = 5
# Action : utilise le fichier docker-action.conf
action = docker-action
# --- JAIL POUR AUTHENTIFICATION NGINX ---
[nginx-http-auth]
enabled = true
filter = nginx-http-auth
# Surveille les logs d'erreur de NPM
logpath = /data/nginx/logs/proxy-host-*_error.log
# --- JAIL ANTI-BOTS (erreurs 404/401/403) ---
[nginx-404]
enabled = true
port = http,https
filter = nginx-404
logpath = /data/nginx/logs/proxy-host-*_access.log
# Plus severe : 30 erreurs en 1 minute = banni 24h
maxretry = 30
findtime = 1m
bantime = 24h
Fichier filter.d/nginx-404.conf
Ce filtre indique à Fail2Ban quoi chercher dans les logs d’accès. Le format des logs NPM est différent du format Nginx standard – le regex doit en tenir compte.
[Definition]
# Regex adapte au format de log NPM (champ [Client X.X.X.X])
failregex = ^\[.*\] - \d+ \d+ - \w+ https? \S+ "\S+" \[Client <HOST>\] .*(404|401|403)
ignoreregex =
Le marqueur <HOST> est la variable Fail2Ban qui capture l’adresse IP – elle correspond au contenu du champ [Client …] dans les logs NPM.
ignoreregex = avec rien après le signe égal signifie « aucune ligne à ignorer ». Cette ligne doit être présente même vide, sinon Fail2Ban peut générer une erreur au démarrage.
Déploiement dans Portainer
Dans Portainer, clique sur ton environnement « local », puis va dans l’onglet « Stacks » à gauche.
Clique sur le bouton « + Add stack ».
Donne-lui un nom : fail2ban.
Dans la zone « Web editor », copie et colle le contenu du docker-compose.yml.
Clique sur « Deploy the stack ». Docker télécharge l’image (1 à 2 minutes selon la connexion).
Une fois la stack déployée, vérifie que le fichier fail2ban.log a bien été créé dans /home/USER/docker/fail2ban/. S’il n’apparaît pas, c’est souvent une question de permissions (le conteneur doit avoir le droit d’écrire dans ce dossier).
Vérification
Étape 1 – Vérifier que les logs sont accessibles
Ouvre un terminal sur Ubuntu et tape :
docker exec -it fail2ban ls /data/nginx/logs
✓ Si tu vois la liste de tes fichiers .log (en particulier proxy-host-*_access.log et proxy-host-*_error.log), le pont entre Fail2Ban et les logs NPM fonctionne.
Étape 2 – Vérifier les jails actives
Dans Portainer, ouvre la console (Exec) du conteneur fail2ban et tape :
fail2ban-client status
✓ Tu dois voir apparaître deux jails : nginx-http-auth et nginx-404. C’est bien le cas pour moi :
Résumé des sources de logs
Type de log
Chemin dans logpath
Ce qu’il contient
Erreurs d’authentification
/data/nginx/logs/proxy-host-*_error.log
Tentatives de mots de passe ratés
Visites (404/401/403)
/data/nginx/logs/proxy-host-*_access.log
Bots cherchant des fichiers inexistants
Log Fail2Ban
/data/fail2ban.log
Correspond au volume /home/USER/docker/fail2ban:/data
Commandes utiles
Supervision
Status général des jails :
docker exec -t fail2ban fail2ban-client status
Status détaillé d’une jail (ex: nginx-404) :
docker exec -t fail2ban fail2ban-client status nginx-404
Article de la série « Mon ordinateur Ubuntu » Actions et articles créés avec l’aide de Claude.ai et 100% testé et ajusté par moi.
Home Assistant est une plateforme domotique open source puissante. Il en existe plusieurs variantes d’installation. Cet article explique comment installer la variante « Container » sur un ordinateur Ubuntu qui fait déjà tourner d’autres services Docker, avec un accès sécurisé depuis l’extérieur via Nginx Proxy Manager.
Quelle variante de Home Assistant choisir ?
Il existe trois grandes variantes :
HA OS – remplace complètement l’OS de la machine. À réserver à un appareil dédié (Raspberry Pi par exemple).
HA Supervised – donne accès au magasin d’add-ons officiel, mais officiellement supporté sur Debian uniquement. Risques de friction sur Ubuntu.
HA Container – s’installe comme n’importe quel container Docker. Pas d’accès au magasin d’add-ons natif, mais les add-ons les plus courants ont un équivalent en container Docker séparé. C’est la solution la plus cohérente si tu as déjà un PC Ubuntu avec Docker et Portainer.
C’est cohérent avec l’organisation décrite dans Docker et Portainer : regrouper les données. Toutes les données de HA seront dans ce dossier, et donc automatiquement couvertes par ta sauvegarde rclone.
Étape 2 – Déployer la stack dans Portainer
Connecte-toi à Portainer (https://TON-IP:9443), clique sur ton environnement « local », puis « Stacks » dans le menu gauche. Clique sur « + Add stack » et donne-lui le nom home-assistant.
network_mode: host – HA utilise directement le réseau du PC, sans isolation. C’est recommandé par le projet HA pour la découverte automatique des appareils sur le réseau local.
privileged: true – nécessaire pour accéder au matériel (Bluetooth, USB, etc.).
/run/dbus:/run/dbus:ro – permet à HA de communiquer avec les services système, utile pour Bluetooth notamment.
Le volume letsencrypt n’est pas nécessaire ici – c’est Nginx Proxy Manager qui gère les certificats SSL.
Clique sur « Deploy the stack ». Au bout de quelques secondes, HA est accessible sur ton réseau local via http://TON-IP:8123.
Étape 3 – Accès externe via Nginx Proxy Manager
Ouvrir le port 8123
Dans l’interface de gestion de ton routeur, ajoute une règle de redirection de port :
Port externe : 8123
IP locale de destination : l’IP fixe de ton PC Linux
Port interne : 8123
Protocole : TCP
Créer le proxy host dans NPM
Connecte-toi à NPM (http://TON-IP:81), va dans « Proxy Hosts » et clique sur « Add Proxy Host ».
Onglet « Details » :
Domain Names : ha.TON-DOMAINE.com
Scheme : http
Forward Name/IP : 127.0.0.1
Forward Port : 8123
Coche « Block Common Exploits » et « Websockets Support »
Onglet « SSL » :
SSL Certificate : « Request a new SSL Certificate »
Coche « Force SSL », « HTTP/2 Support » et « HSTS Enabled »
Clique sur « Save ».
Le point spécifique à Home Assistant – configuration.yaml
Contrairement aux autres containers, HA intègre une protection contre les accès via proxy non déclarés. Sans configuration supplémentaire, tu obtiendras une erreur 400 (Bad Request) en accédant via https://ha.TON-DOMAINE.com.
Il faut déclarer NPM comme proxy de confiance. Ouvre le fichier de configuration :
Attention à l’indentation : 2 espaces par niveau, pas de tabulations. YAML est strict là-dessus.
Redémarre le container HA dans Portainer. HA est maintenant accessible depuis l’extérieur via https://ha.TON-DOMAINE.com.
Étape 4 – Premier démarrage et assistant de configuration
Au premier accès, HA t’ouvre automatiquement l’assistant de démarrage. Tu y crées ton compte administrateur, choisis la langue, le fuseau horaire et la localisation.
Bonne surprise : HA scanne ton réseau local et détecte automatiquement les appareils compatibles. Sur mon réseau il a trouvé Bluetooth, Google Cast, Frontier Silicon, Matter, Tado, Thread et UPnP – sans aucune configuration de ma part. La connexion effective de ces appareils est une étape ultérieure, mais la détection automatique donne un bon aperçu du potentiel.
Étape 5 – Sauvegardes
Si tu as déjà mis en place la sauvegarde automatique avec rclone décrite dans Sauvegarder ses containers Docker automatiquement avec Rclone, il n’y a rien à faire de plus. Le dossier /home/USER/docker/home-assistant/ est automatiquement inclus dans la sauvegarde quotidienne.
Une vulnérabilité Copy Fail a été découverte fin avril 2026. Elle concerne beaucoup d’ordinateurs sous linux.
Pour savoir si la vulnérabilité existe sur votre ordinateur : taper les commandes indiquées à la fin de cet article, dans le chapitre sur la vérification.
mettre à jour mon ordinateur linux
J’ai suivi les instructions de cet excellent site.
On peut aussi vérifier ensuite que tout a bien fonctionné :
lsmod | grep algif_aead
Rien ne devrait s’afficher en principe. Si rien ne s’affiche ça signifie que le module vulnérable ne se charge pas. C’est bien ce que l’on veut.
Ultime vérification : Pour Ubuntu 24.04 (Noble Numbat), tu devrais avoir une version égale ou supérieure à la 6.8.0-31 (ou une version spécifique 6.14 si tu es sur un kernel HWE). C’est ce que me dit Gemini le 11 mai.
uname -r
La réponse est « 6.17.0-23-generic ». Tout va bien donc.
Une image explicative de la faille
Image créée par Gemini
L’image est conçue comme une infographie technique simplifiée, divisée en deux parties distinctes pour expliquer le fonctionnement et les risques de la vulnérabilité CVE-2026-31431 :
La zone « VULNERABILITY » (à gauche) : Un utilisateur avec des privilèges normaux lance une commande de copie de fichier. Cette action, normalement anodine, déclenche une erreur dans le noyau Linux. Cette erreur est symbolisée par des fragments de code brisés et une « fuite » d’informations qui contourne les sécurités habituelles.
La zone « RISK » (à droite) : Un attaquant exploite cette corruption de mémoire pour contourner les protections. Un pictogramme montre un cadenas qui se brise, menant à une icône de l’utilisateur « Root » (super-utilisateur) symbolisé par une clé et une couronne, indiquant une prise de contrôle totale du système.
L’interface Nginx : En haut de l’image, une interface graphique simplifiée de Nginx agit comme une barrière externe. Elle souligne le point que nous avons abordé : le danger survient lorsqu’une application exposée sur le web (via Nginx) est piratée et sert de point d’entrée pour lancer l’exploit « Copy Fail ».
J’utilise Obsidian depuis peu pour stocker mes notes personnelles et professionnelles. L’objectif était simple : avoir mes notes accessibles sur mon PC Windows, mon téléphone Android et mon ordinateur Linux, sans payer d’abonnement. Voici comment j’ai mis ça en place, les obstacles rencontrés et les décisions prises.
Obsidian est un outil de prise de notes basé sur des fichiers markdown (.md) stockés localement sur votre machine. Pas de cloud propriétaire, pas d’abonnement obligatoire pour les fonctions de base – mes notes m’appartiennent et restent dans un dossier normal de mon ordinateur.
Mon usage principal : stocker des notes diverses au fil des jours, faire de la veille en conservant des liens commentés, et disposer d’une base de notes accessible depuis n’importe lequel de mes appareils.
Ce que je ne cherchais pas : un système complexe avec des dizaines de plugins. La règle que je me suis fixée – n’ajouter de la structure que si un vrai besoin se manifeste.
Ce qu’il faut avant de commencer
Un compte Dropbox (il peut être gratuit, 2 Go suffisent largement pour des notes texte)
Dropbox Desktop installé sur le PC Windows
Dropbox installé sur le PC linux (ce n’était pas mon cas, la synchronisation ne se fait pas)
Environ 30 minutes pour l’ensemble de l’installation
Étape 1 – Installation Windows et création du vault dans Dropbox
Au premier lancement, Obsidian propose de créer un vault (coffre). C’est le dossier qui contiendra toutes vos notes. Point crucial : place ce vault directement dans ton dossier Dropbox local.
Sur mon installation, le vault se trouve dans D:\Dropbox\OBSIDIAN\obsidian-vault.
Vérifie ensuite que Dropbox synchronise bien le dossier – l’icône Dropbox dans la barre des tâches doit indiquer une synchronisation en cours puis un statut « à jour ».
Étape 2 – Plugin Remotely Save – configuration et authentification Dropbox
Remotely Save est le plugin qui va gérer la synchronisation entre tes appareils via Dropbox. Il est gratuit pour Dropbox (attention : Google Drive est une fonctionnalité payante dans ce plugin).
Pour l’installer :
Paramètres > Modules complémentaires > activer les plugins communautaires
Dans les réglages du plugin : choisir Dropbox comme service
Cliquer sur Authentifier et autoriser l’accès à votre compte Dropbox
Tester une première synchronisation manuelle avec l’icône de synchronisation en bas à gauche
Le vault se retrouve alors dans un dossier OBSIDIAN dans ta Dropbox. On peut vérifier directement sur dropbox.com.
Étape 3 – Installation Android et première synchronisation
Installe Obsidian depuis le Play Store.
Au premier lancement, crée un vault avec le même nom que sur Windows. Pour le stockage, choisis « Stockage de l’application ».
Installe ensuite Remotely Save depuis les modules complémentaires (même procédure que sur Windows), configure Dropbox, authentifie-toi.
Lance une première synchronisation manuelle – toutes les notes créées sur Windows apparaissent sur le téléphone, et inversement.
Étape 4 – Installation Linux – cas particulier et limites
Sur Ubuntu, Obsidian est disponible directement dans l’App Center. Installation en un clic, aucune ligne de commande nécessaire.
La synchronisation est plus complexe sur Linux car Dropbox Desktop n’est pas installé sur ma machine. J’ai installé Remotely Save et configuré Dropbox, mais sans Dropbox Desktop local, le vault Linux reste isolé des autres appareils.
Ma décision : ne pas installer Dropbox sur Linux pour l’instant, car mon usage Linux d’Obsidian est incertain. Si le besoin se confirme, j’installerai Dropbox Desktop Linux.
Ce que j’ai appris en passant : les installations en container (Docker) n’ont pas de sens pour une application graphique comme Obsidian. Docker est fait pour des services auxquels on accède à distance, pas pour des interfaces utilisateur.
Étape 5 – Synchronisation automatique – les réglages essentiels
Par défaut, Remotely Save ne synchronise que manuellement. Pour automatiser, voici les réglages à faire sur chaque appareil séparément :
L’icône calendrier dans la barre latérale gauche ouvre la note du jour en un clic. tu y notes ce que tu veux sans te poser de questions d’organisation.
Pour la veille, deux approches simples :
Coller les URLs directement dans la note quotidienne avec un mot de contexte
Créer une note dédiée par thème (exemple : « Veille IA ») pour les liens que vous voulez retrouver facilement
Mon conseil : résiste à la tentation dde structurer avant d’avoir des notes à organiser. Obsidian peut devenir très complexe très vite – commence simple.
Ce que j’ai retenu de cette installation
Remotely Save + Dropbox est la combinaison gratuite et fiable pour synchroniser Obsidian sur plusieurs appareils. Google Drive aurait été plus naturel pour moi mais c’est une fonctionnalité payante dans ce plugin.
Le vault placé directement dans Dropbox sur Windows fonctionne sans friction. Sur Android, le plugin Remotely Save fait tout le travail. Sur Linux, la synchronisation nécessite Dropbox Desktop – à installer si l’usage se confirme.
La synchronisation automatique toutes les 5 minutes est un bon équilibre entre réactivité et consommation batterie sur mobile.
Cet article fait partie de ma démarche de capitalisation des compétences acquises. Si tu as des questions ou des retours sur cette installation, les commentaires sont ouverts.
Commentaires récents